2007-03-20 19:19:00 +08:00
|
|
|
#######################################################
|
|
|
|
# this are setting used in SETUP_EXAMPLE macro
|
|
|
|
#######################################################
|
2007-03-19 20:30:26 +08:00
|
|
|
SET(TARGET_DEFAULT_PREFIX "example_")
|
|
|
|
SET(TARGET_DEFAULT_LABEL_PREFIX "Examples")
|
2007-03-20 19:19:00 +08:00
|
|
|
|
2012-03-24 00:09:30 +08:00
|
|
|
SET(TARGET_COMMON_LIBRARIES
|
2008-06-23 17:57:45 +08:00
|
|
|
OpenThreads
|
2012-03-24 00:09:30 +08:00
|
|
|
osg
|
|
|
|
osgDB
|
2008-06-23 17:57:45 +08:00
|
|
|
osgUtil
|
|
|
|
osgGA
|
2012-03-24 00:09:30 +08:00
|
|
|
osgViewer
|
|
|
|
osgText
|
2007-03-19 20:30:26 +08:00
|
|
|
)
|
2007-03-05 21:27:55 +08:00
|
|
|
|
2011-03-09 00:35:37 +08:00
|
|
|
IF(ANDROID)
|
|
|
|
# ADD_SUBDIRECTORY(osgandroidsimple)
|
|
|
|
ELSE(ANDROID)
|
2009-11-25 19:31:52 +08:00
|
|
|
|
2007-06-15 21:43:49 +08:00
|
|
|
IF(DYNAMIC_OPENSCENEGRAPH)
|
|
|
|
|
2017-07-30 16:15:32 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsimpleMDI)
|
2008-09-25 22:41:27 +08:00
|
|
|
ADD_SUBDIRECTORY(osg2cpp)
|
2010-10-22 00:28:23 +08:00
|
|
|
ADD_SUBDIRECTORY(osganalysis)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimate)
|
2012-03-29 17:43:12 +08:00
|
|
|
ADD_SUBDIRECTORY(osgatomiccounter)
|
2008-11-28 22:37:58 +08:00
|
|
|
ADD_SUBDIRECTORY(osgautocapture)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgautotransform)
|
|
|
|
ADD_SUBDIRECTORY(osgbillboard)
|
2014-12-10 03:20:05 +08:00
|
|
|
ADD_SUBDIRECTORY(osgblenddrawbuffers)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgblendequation)
|
|
|
|
ADD_SUBDIRECTORY(osgcallback)
|
|
|
|
ADD_SUBDIRECTORY(osgcamera)
|
|
|
|
ADD_SUBDIRECTORY(osgcatch)
|
|
|
|
ADD_SUBDIRECTORY(osgclip)
|
|
|
|
ADD_SUBDIRECTORY(osgcompositeviewer)
|
2008-03-04 21:30:41 +08:00
|
|
|
ADD_SUBDIRECTORY(osgcopy)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgcubemap)
|
2016-05-20 00:20:29 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdeferred)
|
2009-01-29 21:17:48 +08:00
|
|
|
ADD_SUBDIRECTORY(osgcluster)
|
2020-11-11 22:32:28 +08:00
|
|
|
ADD_SUBDIRECTORY(osgcustompager)
|
2009-06-03 00:58:32 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdatabaserevisions)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdepthpartition)
|
2007-09-03 20:27:37 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdepthpeeling)
|
2009-01-06 23:11:54 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdrawinstanced)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgdistortion)
|
|
|
|
ADD_SUBDIRECTORY(osgfadetext)
|
2008-05-07 21:46:24 +08:00
|
|
|
ADD_SUBDIRECTORY(osgfont)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgforest)
|
|
|
|
ADD_SUBDIRECTORY(osgfxbrowser)
|
2009-12-09 01:41:44 +08:00
|
|
|
ADD_SUBDIRECTORY(osgoutline)
|
2008-10-14 22:58:10 +08:00
|
|
|
ADD_SUBDIRECTORY(osggameoflife)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osggeometry)
|
2008-03-04 21:30:41 +08:00
|
|
|
ADD_SUBDIRECTORY(osggeometryshaders)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osghangglide)
|
|
|
|
ADD_SUBDIRECTORY(osghud)
|
2008-07-21 18:57:06 +08:00
|
|
|
ADD_SUBDIRECTORY(osgimagesequence)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgintersection)
|
2008-06-04 00:13:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgkdtree)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgkeyboard)
|
|
|
|
ADD_SUBDIRECTORY(osgkeyboardmouse)
|
2013-03-15 00:24:22 +08:00
|
|
|
ADD_SUBDIRECTORY(osgkeystone)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osglauncher)
|
|
|
|
ADD_SUBDIRECTORY(osglight)
|
|
|
|
ADD_SUBDIRECTORY(osglightpoint)
|
|
|
|
ADD_SUBDIRECTORY(osglogicop)
|
|
|
|
ADD_SUBDIRECTORY(osglogo)
|
From PawelKsiezopolski, "This submission contains a new example for OSG : a geometry instancing rendering
algorithm consisting of two consequent phases :
- first phase is a GLSL shader performing object culling and LOD picking ( a culling shader ).
Every culled object is represented as GL_POINT in the input osg::Geometry.
The output of the culling shader is a set of object LODs that need to be rendered.
The output is stored in texture buffer objects. No pixel is drawn to the screen
because GL_RASTERIZER_DISCARD mode is used.
- second phase draws osg::Geometry containing merged LODs using glDrawArraysIndirect()
function. Information about quantity of instances to render, its positions and other
parameters is sourced from texture buffer objects filled in the first phase.
The example uses various OpenGL 4.2 features such as texture buffer objects,
atomic counters, image units and functions defined in GL_ARB_shader_image_load_store
extension to achieve its goal and thus will not work on graphic cards with older OpenGL
versions.
The example was tested on Linux and Windows with NVidia 570 and 580 cards.
The tests on AMD cards were not conducted ( due to lack of it ).
The tests were performed using OSG revision 14088.
The main advantages of this rendering method :
- instanced rendering capable of drawing thousands of different objects with
almost no CPU intervention ( cull and draw times are close to 0 ms ).
- input objects may be sourced from any OSG graph ( for example - information about
object points may be stored in a PagedLOD graph. This way we may cover the whole
countries with trees, buildings and other objects ).
Furthermore if we create osgDB plugins that generate data on the fly, we may
generate information for every grass blade for that country.
- every object may have its own parameters and thus may be distinct from other objects
of the same type.
- relatively low memory footprint ( single object information is stored in a few
vertex attributes ).
- no GPU->CPU roundtrip typical for such methods ( method uses atomic counters
and glDrawArraysIndirect() function instead of OpenGL queries. This way
information about quantity of rendered objects never goes back to CPU.
The typical GPU->CPU roundtrip cost is about 2 ms ).
- this example also shows how to render dynamic objects ( objects that may change
its position ) with moving parts ( like car wheels or airplane propellers ) .
The obvious extension to that dynamic method would be the animated crowd rendering.
- rendered objects may be easily replaced ( there is no need to process the whole
OSG graphs, because these graphs store only positional information ).
The main disadvantages of a method :
- the maximum quantity of objects to render must be known beforehand
( because texture buffer objects holding data between phases have constant size ).
- OSG statistics are flawed ( they don't know anymore how many objects are drawn ).
- osgUtil::Intersection does not work
Example application may be used to make some performance tests, so below you
will find some extended parameter description :
--skip-dynamic - skip rendering of dynamic objects if you only want to
observe static object statistics
--skip-static - the same for static objects
--dynamic-area-size - size of the area for dynamic rendering. Default = 1000 meters
( square 1000m x 1000m ). Along with density defines
how many dynamic objects is there in the example.
--static-area-size - the same for static objects. Default = 2000 meters
( square 2000m x 2000m ).
Example application defines some parameters (density, LOD ranges, object's triangle count).
You may manipulate its values using below described modifiers:
--density-modifier - density modifier in percent. Default = 100%.
Density ( along with LOD ranges ) defines maximum
quantity of rendered objects. registerType() function
accepts maximum density ( in objects per square kilometer )
as its parameter.
--lod-modifier - defines the LOD ranges. Default = 100%.
--triangle-modifier - defines the number of triangles in finally rendered objects.
Default = 100 %.
--instances-per-cell - for static rendering the application builds OSG graph using
InstanceCell class ( this class is a modified version of Cell class
from osgforest example - it builds simple quadtree from a list
of static instances ). This parameter defines maximum number
of instances in a single osg::Group in quadtree.
If, for example, you modify it to value=100, you will see
really big cull time in OSG statistics ( because resulting
tree generated by InstanceCell will be very deep ).
Default value = 4096 .
--export-objects - write object geometries and quadtree of instances to osgt files
for later analysis.
--use-multi-draw - use glMultiDrawArraysIndirect() instead of glDrawArraysIndirect() in a
draw shader. Thanks to this we may render all ( different ) objects
using only one draw call. Requires OpenGL version 4.3 and some more
work from me, because now it does not work ( probably I implemented
it wrong, or Windows NVidia driver has errors, because it hangs
the apllication at the moment ).
This application is inspired by Daniel Rákos work : "GPU based dynamic geometry LOD" that
may be found under this address : http://rastergrid.com/blog/2010/10/gpu-based-dynamic-geometry-lod/
There are however some differences :
- Daniel Rákos uses GL queries to count objects to render, while this example
uses atomic counters ( no GPU->CPU roundtrip )
- this example does not use transform feedback buffers to store intermediate data
( it uses texture buffer objects instead ).
- I use only the vertex shader to cull objects, whereas Daniel Rákos uses vertex shader
and geometry shader ( because only geometry shader can send more than one primitive
to transform feedback buffers ).
- objects in the example are drawn using glDrawArraysIndirect() function,
instead of glDrawElementsInstanced().
Finally there are some things to consider/discuss :
- the whole algorithm exploits nice OpenGL feature that any GL buffer
may be bound as any type of buffer ( in our example a buffer is once bound
as a texture buffer object, and later is bound as GL_DRAW_INDIRECT_BUFFER ).
osg::TextureBuffer class has one handy method to do that trick ( bindBufferAs() ),
and new primitive sets use osg::TextureBuffer as input.
For now I added new primitive sets to example ( DrawArraysIndirect and
MultiDrawArraysIndirect defined in examples/osggpucull/DrawIndirectPrimitiveSet.h ),
but if Robert will accept its current implementations ( I mean - primitive
sets that have osg::TextureBuffer in constructor ), I may add it to
osg/include/PrimitiveSet header.
- I used BufferTemplate class writen and published by Aurelien in submission forum
some time ago. For some reason this class never got into osg/include, but is
really needed during creation of UBOs, TBOs, and possibly SSBOs in the future.
I added std::vector specialization to that template class.
- I needed to create similar osg::Geometries with variable number of vertices
( to create different LODs in my example ). For this reason I've written
some code allowing me to create osg::Geometries from osg::Shape descendants.
This code may be found in ShapeToGeometry.* files. Examples of use are in
osggpucull.cpp . The question is : should this code stay in example, or should
it be moved to osgUtil ?
- this remark is important for NVidia cards on Linux and Windows : if
you have "Sync to VBlank" turned ON in nvidia-settings and you want to see
real GPU times in OSG statistics window, you must set the power management
settings to "Prefer maximum performance", because when "Adaptive mode" is used,
the graphic card's clock may be slowed down by the driver during program execution
( On Linux when OpenGL application starts in adaptive mode, clock should work
as fast as possible, but after one minute of program execution, the clock slows down ).
This happens when GPU time in OSG statistics window is shorter than 3 ms.
"
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk@14531 16af8721-9629-0410-8352-f15c8da7e697
2014-11-25 18:58:23 +08:00
|
|
|
ADD_SUBDIRECTORY(osggpucull)
|
2009-12-02 20:37:22 +08:00
|
|
|
ADD_SUBDIRECTORY(osggpx)
|
2011-01-25 04:45:02 +08:00
|
|
|
ADD_SUBDIRECTORY(osggraphicscost)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmanipulator)
|
2016-08-25 18:05:30 +08:00
|
|
|
ADD_SUBDIRECTORY(osgimpostor)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmovie)
|
2012-10-02 22:07:12 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultiplemovies)
|
2008-05-07 21:46:24 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultiplerendertargets)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultitexture)
|
2008-03-03 22:17:56 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultitexturecontrol)
|
From Stephan Huber, "attached you'll find a first version of multi-touch-support for OS X (>=
10.6), which will forward all multi-touch events from a trackpad to the
corresponding osgGA-event-structures.
The support is switched off per default, but you can enable multi-touch
support via a new flag for GraphicsWindowCocoa::WindowData or directly
via the GraphicsWindowCocoa-class.
After switching multi-touch-support on, all mouse-events from the
trackpad get ignored, otherwise you'll have multiple events for the same
pointer which is very confusing (as the trackpad reports absolute
movement, and as a mouse relative movement).
I think this is not a problem, as multi-touch-input is a completely
different beast as a mouse, so you'll have to code your own
event-handlers anyway.
While coding this stuff, I asked myself if we should refactor
GUIEventAdapter/EventQueue and assign a specific event-type for
touch-input instead of using PUSH/DRAG/RELEASE. This will make it
clearer how to use the code, but will break the mouse-emulation for the
first touch-point and with that all existing manipulators. What do you
think? I am happy to code the proposed changes.
Additionally I created a small (and ugly) example osgmultitouch which
makes use of the osgGA::MultiTouchTrackballManipulator, shows all
touch-points on a HUD and demonstrates how to get the touchpoints from
an osgGA::GUIEventAdapter.
There's even a small example video here: http://vimeo.com/31611842"
2012-02-03 22:25:08 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultitouch)
|
2020-11-12 20:22:40 +08:00
|
|
|
ADD_SUBDIRECTORY(osgmultiviewOVR)
|
2016-06-17 23:45:06 +08:00
|
|
|
ADD_SUBDIRECTORY(osgobjectcache)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgoccluder)
|
2007-12-21 22:45:16 +08:00
|
|
|
ADD_SUBDIRECTORY(osgocclusionquery)
|
2010-07-12 19:30:15 +08:00
|
|
|
ADD_SUBDIRECTORY(osgoit)
|
2012-11-28 18:43:58 +08:00
|
|
|
ADD_SUBDIRECTORY(osgoscdevice)
|
2008-11-21 20:38:22 +08:00
|
|
|
ADD_SUBDIRECTORY(osgpackeddepthstencil)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgpagedlod)
|
|
|
|
ADD_SUBDIRECTORY(osgparametric)
|
|
|
|
ADD_SUBDIRECTORY(osgparticle)
|
|
|
|
ADD_SUBDIRECTORY(osgparticleeffects)
|
Form Wang Rui, "An initial GLSL shader support of rendering particles. Only the POINT
type is supported at present. The attached osgparticleshader.cpp will
show how it works. It can also be placed in the examples folder. But I
just wonder how this example co-exists with another two (osgparticle
and osgparticleeffect)?
Member variables in Particle, including _alive, _current_size and
_current_alpha, are now merged into one Vec3 variable. Then we can
make use of the set...Pointer() methods to treat them as vertex
attribtues in GLSL. User interfaces are not changed.
Additional methods of ParticleSystem are introduced, including
setDefaultAttributesUsingShaders(), setSortMode() and
setVisibilityDistance(). You can see how they work in
osgparticleshader.cpp.
Additional user-defined particle type is introduced. Set the particle
type to USER and attach a drawable to the template. Be careful because
of possible huge memory consumption. It is highly suggested to use
display lists here.
The ParticleSystemUpdater can accepts ParticleSystem objects as child
drawables now. I myself think it is a little simpler in structure,
than creating a new geode for each particle system. Of course, the
latter is still compatible, and can be used to transform entire
particles in the world.
New particle operators: bounce, sink, damping, orbit and explosion.
The bounce and sink opeartors both use a concept of domains, and can
simulate a very basic collision of particles and objects.
New composite placer. It contains a set of placers and emit particles
from them randomly. The added virtual method size() of each placer
will help determine the probability of generating.
New virtual method operateParticles() for the Operator class. It
actually calls operate() for each particle, but can be overrode to use
speedup techniques like SSE, or even shaders in the future.
Partly fix a floating error of 'delta time' in emitter, program and
updaters. Previously they keep the _t0 variable seperately and compute
different copies of dt by themseleves, which makes some operators,
especially the BounceOperator, work incorrectly (because the dt in
operators and updaters are slightly different). Now a getDeltaTime()
method is maintained in ParticleSystem, and will return the unique dt
value (passing by reference) for use. This makes thing better, but
still very few unexpected behavours at present...
All dotosg and serialzier wrappers for functionalities above are provided.
...
According to some simple tests, the new shader support is slightly
efficient than ordinary glBegin()/end(). That means, I haven't got a
big improvement at present. I think the bottlenack here seems to be
the cull traversal time. Because operators go through the particle
list again and again (for example, the fountain in the shader example
requires 4 operators working all the time).
A really ideal solution here is to implement the particle operators in
shaders, too, and copy the results back to particle attributes. The
concept of GPGPU is good for implementing this. But in my opinion, the
Camera class seems to be too heavy for realizing such functionality in
a particle system. Myabe a light-weight ComputeDrawable class is
enough for receiving data as textures and outputting the results to
the FBO render buffer. What do you think then?
The floating error of emitters
(http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/2009-May/028435.html)
is not solved this time. But what I think is worth testing is that we
could directly compute the node path from the emitter to the particle
system rather than multiplying the worldToLocal and LocalToWorld
matrices. I'll try this idea later.
"
2010-09-14 23:47:29 +08:00
|
|
|
ADD_SUBDIRECTORY(osgparticleshader)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgpick)
|
|
|
|
ADD_SUBDIRECTORY(osgplanets)
|
|
|
|
ADD_SUBDIRECTORY(osgpoints)
|
|
|
|
ADD_SUBDIRECTORY(osgpointsprite)
|
2010-12-13 21:37:37 +08:00
|
|
|
ADD_SUBDIRECTORY(osgposter)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgprecipitation)
|
|
|
|
ADD_SUBDIRECTORY(osgprerender)
|
|
|
|
ADD_SUBDIRECTORY(osgprerendercubemap)
|
|
|
|
ADD_SUBDIRECTORY(osgreflect)
|
2008-11-11 04:06:27 +08:00
|
|
|
ADD_SUBDIRECTORY(osgrobot)
|
2014-12-10 20:23:04 +08:00
|
|
|
ADD_SUBDIRECTORY(osgSSBO)
|
2018-01-04 04:22:38 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsampler)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgscalarbar)
|
|
|
|
ADD_SUBDIRECTORY(osgscribe)
|
|
|
|
ADD_SUBDIRECTORY(osgsequence)
|
|
|
|
ADD_SUBDIRECTORY(osgshaders)
|
2016-10-20 03:26:26 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshaderpipeline)
|
2010-07-02 20:04:20 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshadercomposition)
|
2009-03-23 19:53:06 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshadergen)
|
2016-06-29 18:39:44 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshadermultiviewport)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshaderterrain)
|
2010-06-24 22:03:51 +08:00
|
|
|
# ADD_SUBDIRECTORY(osgshadercompositor)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgshadow)
|
|
|
|
ADD_SUBDIRECTORY(osgshape)
|
2008-03-04 21:30:41 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsharedarray)
|
2012-03-06 18:29:47 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsimpleshaders)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsimplifier)
|
|
|
|
ADD_SUBDIRECTORY(osgsimulation)
|
2008-11-24 22:37:15 +08:00
|
|
|
ADD_SUBDIRECTORY(osgsidebyside)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgslice)
|
|
|
|
ADD_SUBDIRECTORY(osgspacewarp)
|
|
|
|
ADD_SUBDIRECTORY(osgspheresegment)
|
|
|
|
ADD_SUBDIRECTORY(osgspotlight)
|
|
|
|
ADD_SUBDIRECTORY(osgstereoimage)
|
2008-04-11 19:58:27 +08:00
|
|
|
ADD_SUBDIRECTORY(osgstereomatch)
|
2010-03-20 00:31:48 +08:00
|
|
|
ADD_SUBDIRECTORY(osgterrain)
|
2010-03-19 22:55:35 +08:00
|
|
|
ADD_SUBDIRECTORY(osgthreadedterrain)
|
2013-10-29 01:46:07 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtransferfunction)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtext)
|
2007-12-10 23:15:56 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtext3D)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtexture1D)
|
|
|
|
ADD_SUBDIRECTORY(osgtexture2D)
|
2015-03-11 02:07:17 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtexture2DArray)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtexture3D)
|
|
|
|
ADD_SUBDIRECTORY(osgtexturerectangle)
|
2009-03-27 01:24:28 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtexturecompression)
|
2008-03-04 21:30:41 +08:00
|
|
|
ADD_SUBDIRECTORY(osgthirdpersonview)
|
2015-01-07 01:12:51 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtransformfeedback)
|
2010-11-30 01:43:27 +08:00
|
|
|
ADD_SUBDIRECTORY(osguniformbuffer)
|
2010-11-08 20:28:31 +08:00
|
|
|
ADD_SUBDIRECTORY(osguserstats)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgvertexprogram)
|
2009-10-08 22:29:54 +08:00
|
|
|
ADD_SUBDIRECTORY(osgvertexattributes)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgvolume)
|
|
|
|
ADD_SUBDIRECTORY(osgwindows)
|
2010-06-24 22:03:51 +08:00
|
|
|
ADD_SUBDIRECTORY(osgvirtualprogram)
|
2009-10-28 21:31:24 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationhardware)
|
2008-11-22 20:14:19 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationtimeline)
|
|
|
|
ADD_SUBDIRECTORY(osganimationnode)
|
|
|
|
ADD_SUBDIRECTORY(osganimationmakepath)
|
2009-03-10 01:38:39 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationmorph)
|
2008-11-22 20:14:19 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationskinning)
|
|
|
|
ADD_SUBDIRECTORY(osganimationsolid)
|
2008-11-28 22:37:58 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationviewer)
|
2010-02-26 01:58:50 +08:00
|
|
|
ADD_SUBDIRECTORY(osganimationeasemotion)
|
2008-11-22 22:30:21 +08:00
|
|
|
ADD_SUBDIRECTORY(osgwidgetaddremove)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetbox)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetcanvas)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetframe)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetinput)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetlabel)
|
2008-11-28 22:37:58 +08:00
|
|
|
ADD_SUBDIRECTORY(osgwidgetmessagebox)
|
2008-11-22 22:30:21 +08:00
|
|
|
ADD_SUBDIRECTORY(osgwidgetmenu)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetnotebook)
|
2008-11-28 22:37:58 +08:00
|
|
|
ADD_SUBDIRECTORY(osgwidgetperformance)
|
2008-11-22 22:30:21 +08:00
|
|
|
ADD_SUBDIRECTORY(osgwidgetscrolled)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetshader)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetstyled)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgettable)
|
|
|
|
ADD_SUBDIRECTORY(osgwidgetwindow)
|
2011-06-03 06:06:56 +08:00
|
|
|
ADD_SUBDIRECTORY(osguserdata)
|
2012-02-09 23:51:20 +08:00
|
|
|
# GL3/GL4 example
|
|
|
|
ADD_SUBDIRECTORY(osgsimplegl3)
|
2017-01-13 23:56:42 +08:00
|
|
|
ADD_SUBDIRECTORY(osgbindlesstext)
|
2009-11-17 20:55:52 +08:00
|
|
|
IF(OSG_CPP_EXCEPTIONS_AVAILABLE)
|
|
|
|
ADD_SUBDIRECTORY(osgunittests)
|
|
|
|
ADD_SUBDIRECTORY(osgmemorytest)
|
|
|
|
ENDIF()
|
2009-11-03 23:22:14 +08:00
|
|
|
|
2010-10-09 01:13:59 +08:00
|
|
|
IF(NOT OSG_GL3_AVAILABLE)
|
|
|
|
ADD_SUBDIRECTORY(osgfpdepth)
|
|
|
|
ENDIF()
|
|
|
|
|
2009-11-17 20:55:52 +08:00
|
|
|
IF(NOT OSG_GLES1_AVAILABLE AND NOT OSG_GLES2_AVAILABLE AND NOT OSG_GL3_AVAILABLE)
|
|
|
|
ADD_SUBDIRECTORY(osgscreencapture)
|
|
|
|
ADD_SUBDIRECTORY(osgmotionblur)
|
|
|
|
ADD_SUBDIRECTORY(osgteapot)
|
|
|
|
ENDIF()
|
|
|
|
|
2010-10-06 22:44:52 +08:00
|
|
|
ADD_SUBDIRECTORY(osgphotoalbum)
|
|
|
|
ADD_SUBDIRECTORY(osgtessellate)
|
2012-04-20 17:38:51 +08:00
|
|
|
ADD_SUBDIRECTORY(osgtessellationshaders)
|
2013-01-25 19:54:03 +08:00
|
|
|
ADD_SUBDIRECTORY(osgcomputeshaders)
|
2009-10-08 03:42:32 +08:00
|
|
|
|
2008-12-08 01:02:30 +08:00
|
|
|
ADD_SUBDIRECTORY(osgpdf)
|
2007-06-15 21:43:49 +08:00
|
|
|
|
|
|
|
IF (SDL_FOUND)
|
|
|
|
ADD_SUBDIRECTORY(osgviewerSDL)
|
|
|
|
ENDIF(SDL_FOUND)
|
|
|
|
|
2008-05-09 00:39:10 +08:00
|
|
|
IF (GTKGL_FOUND)
|
|
|
|
ADD_SUBDIRECTORY(osgviewerGTK)
|
|
|
|
ENDIF(GTKGL_FOUND)
|
|
|
|
|
2007-07-24 22:02:53 +08:00
|
|
|
IF (FOX_FOUND)
|
|
|
|
ADD_SUBDIRECTORY(osgviewerFOX)
|
|
|
|
ENDIF(FOX_FOUND)
|
|
|
|
|
2012-02-24 18:56:48 +08:00
|
|
|
IF (wxWidgets_FOUND AND CMAKE_BUILD_TYPE)
|
|
|
|
IF (${CMAKE_BUILD_TYPE} STREQUAL "Release")
|
|
|
|
ADD_SUBDIRECTORY(osgviewerWX)
|
|
|
|
ENDIF()
|
2011-10-20 19:50:04 +08:00
|
|
|
ENDIF()
|
2007-06-15 21:43:49 +08:00
|
|
|
|
2012-09-06 18:32:07 +08:00
|
|
|
IF (FLTK_FOUND AND FLTK_GL_LIBRARY)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgviewerFLTK)
|
2011-12-01 03:14:14 +08:00
|
|
|
ENDIF()
|
2007-06-15 21:43:49 +08:00
|
|
|
|
|
|
|
IF (WIN32)
|
|
|
|
|
|
|
|
OPTION(BUILD_MFC_EXAMPLE "Enable the build of the MFC Example" OFF)
|
|
|
|
|
2012-03-24 00:09:30 +08:00
|
|
|
IF (BUILD_MFC_EXAMPLE)
|
2007-06-15 21:43:49 +08:00
|
|
|
ADD_SUBDIRECTORY(osgviewerMFC)
|
|
|
|
ENDIF(BUILD_MFC_EXAMPLE)
|
|
|
|
|
|
|
|
ENDIF(WIN32)
|
|
|
|
|
2008-06-23 17:57:45 +08:00
|
|
|
IF (APPLE)
|
|
|
|
ADD_SUBDIRECTORY(osgviewerCocoa)
|
|
|
|
ENDIF(APPLE)
|
|
|
|
|
2010-12-13 19:34:33 +08:00
|
|
|
IF(DIRECTINPUT_FOUND)
|
|
|
|
ADD_SUBDIRECTORY(osgdirectinput)
|
|
|
|
ENDIF(DIRECTINPUT_FOUND)
|
2008-11-22 20:14:19 +08:00
|
|
|
|
2008-10-31 20:03:44 +08:00
|
|
|
IF (LIBVNCSERVER_FOUND)
|
|
|
|
ADD_SUBDIRECTORY(osgvnc)
|
|
|
|
ENDIF(LIBVNCSERVER_FOUND)
|
|
|
|
|
2007-06-15 21:43:49 +08:00
|
|
|
#to add subject to find socket#ADD_SUBDIRECTORY(osgcluster)
|
|
|
|
|
|
|
|
ELSE(DYNAMIC_OPENSCENEGRAPH)
|
2008-12-12 01:00:40 +08:00
|
|
|
#needed on win32 or the linker get confused by _declspec declarations
|
|
|
|
ADD_DEFINITIONS(-DOSG_LIBRARY_STATIC)
|
2007-06-15 21:43:49 +08:00
|
|
|
|
2018-07-10 09:09:28 +08:00
|
|
|
IF(OSG_BUILD_PLATFORM_IPHONE)
|
2010-11-30 17:26:18 +08:00
|
|
|
ADD_SUBDIRECTORY(osgviewerIPhone)
|
2018-07-10 09:09:28 +08:00
|
|
|
ELSE()
|
|
|
|
ADD_SUBDIRECTORY(osgstaticviewer)
|
2010-11-27 02:19:28 +08:00
|
|
|
ENDIF()
|
2012-03-24 00:09:30 +08:00
|
|
|
|
2007-06-15 21:43:49 +08:00
|
|
|
ENDIF(DYNAMIC_OPENSCENEGRAPH)
|
2007-05-17 19:04:57 +08:00
|
|
|
|
2011-03-09 00:35:37 +08:00
|
|
|
ENDIF(ANDROID)
|