Compare commits

..

188 Commits

Author SHA1 Message Date
Robert Osfield
2f780df47b Release OpenSceneGraph-3.2.1
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/tags/OpenSceneGraph-3.2.1@14364 16af8721-9629-0410-8352-f15c8da7e697
2014-07-04 16:55:34 +00:00
Robert Osfield
ae81ca6b6e Updated ChangeLog and README for release
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14362 16af8721-9629-0410-8352-f15c8da7e697
2014-07-04 11:34:44 +00:00
Robert Osfield
27bfc09c7a Updated version number to 3.2.1 for release
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14361 16af8721-9629-0410-8352-f15c8da7e697
2014-07-04 11:29:02 +00:00
Robert Osfield
ea5857c8d5 Updated RC number
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14359 16af8721-9629-0410-8352-f15c8da7e697
2014-07-04 08:52:29 +00:00
Robert Osfield
fb7f800ba7 Updated release candidate number and ChangeLog for 3.2.1-rc6
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14354 16af8721-9629-0410-8352-f15c8da7e697
2014-07-03 14:20:46 +00:00
Robert Osfield
0ecaf90a7c Updated NEWS in prep for 3.2.1 release
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14353 16af8721-9629-0410-8352-f15c8da7e697
2014-07-03 14:13:01 +00:00
Robert Osfield
32fe2f09d4 Added vertical destructors
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14352 16af8721-9629-0410-8352-f15c8da7e697
2014-07-03 13:06:56 +00:00
Robert Osfield
46c52f2a97 Merged fix from svn/trunk to handlng of file type of nested files within a .osgx, .osgt and .osgb file.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14345 16af8721-9629-0410-8352-f15c8da7e697
2014-07-02 14:14:57 +00:00
Robert Osfield
dfd59cbfe1 Added #include <stdint.h> to address compile issue on some Linux distro's.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14342 16af8721-9629-0410-8352-f15c8da7e697
2014-07-01 07:31:48 +00:00
Robert Osfield
81b32a3d89 Add dds no flip on write option to prevent output of .dds volume from being flipped by the dds plugin.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14340 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 15:31:39 +00:00
Robert Osfield
98889b7331 Updated ChangeLog and AUTHORS file
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14336 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 10:22:37 +00:00
Robert Osfield
4fefd87b80 From Mikhail Izmestev, "Attached fix to avoid vector reallocs on push_back in StateGraph::moveStateGraph."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14335 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 10:13:22 +00:00
Robert Osfield
586c177db9 Updated ChangeLog and AUTHORS file
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14333 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 09:13:04 +00:00
Robert Osfield
b138fa8ab7 Updated RC number
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14330 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 08:55:36 +00:00
Robert Osfield
5aa7acd92b From Pjotr Svetachov, "Here is a small fix for a overflow when editing large 3d volume data."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14328 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 08:46:53 +00:00
Robert Osfield
a4a684cb07 Removed space from #include.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14327 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 08:20:31 +00:00
Robert Osfield
d009dec52f Merged librsvg-2.0>=2.35 version check from svn/trunk.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14325 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 07:39:16 +00:00
Robert Osfield
9d14c9908e From Alexander Sinditskiy, build fix to allow building against versions older than librsvg-2.36.2
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14324 16af8721-9629-0410-8352-f15c8da7e697
2014-06-30 07:37:09 +00:00
Robert Osfield
cd5e4a999b Removed unused method.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14317 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:55:02 +00:00
Robert Osfield
46e53047bc From Laurens Voerman, "attached is a modified version of src/osgUtil/Tessellator.cpp
current code checks for a Nullpointer and on notify level info or above will inform you with a crash, by dereferencing it."



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14316 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:48:41 +00:00
Robert Osfield
1d120f7814 Updated AUTHORS file
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14314 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:39:56 +00:00
Robert Osfield
2c25825800 Added a render order sort to the list of Cameras being tested by the *Viewer::generatePointerData(..) method to ensure that the highest Camera gets focus.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14311 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:38:48 +00:00
Robert Osfield
2f83db9442 Added a render order sort to the list of Cameras being tested by the *Viewer::generatePointerData(..) method to ensure that the highest Camera gets focus.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14308 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:30:50 +00:00
Robert Osfield
78a59c33bd Updated AUTHORS file
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14307 16af8721-9629-0410-8352-f15c8da7e697
2014-06-27 15:26:03 +00:00
Robert Osfield
ec8a784d90 Updated ChangeLog for 3.2.1-rc4
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14305 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 15:54:37 +00:00
Robert Osfield
949d6f20e5 Updated RC number to 4.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14304 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 15:18:56 +00:00
Robert Osfield
ce51923f87 From Sebastian Messerschmidt, "I've applied a simple fix for the backward animation support in osg::Sequence.
It will simply use the sign of the speed set in the getNextValue. Attached file is against trunk."


git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14301 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 11:49:58 +00:00
Robert Osfield
1571ac72b7 From Laurens Voerman, "In order to speed up loading large scenes (especially from network disk) I added code to our viewer to setup multiple database-pagers and request the files trough a database-request:
databasePager->setUpThreads(16, 1);

We experienced problems with multiple databasepagers loading files in parallel, when two threads start to load the same file (usually a texture referenced by multiple models). The second thread to add the file to the cache (sometimes) manages to do so while the refcount from the cached object still is zero, causing the object loaded to be destroyed.
Sometimes the second thread manages to ref() the object before Referenced::signalObserversAndDelete does the final recount check, causing a warning:
    "Warning Referenced::signalObserversAndDelete(,,) doing delete with _refCount=1"

With a deleted object added to the scenegraph we get some undesired results, I think the program only crashes if the object was a Node, and just has some untextured surfaces if it was a texture, but I'm not completely sure.

Attached is a modified version of the Registry.cpp, returning the object in cache and let the duplicate loaded object to be destroyed.

A more efficient option would be to add some sort of blocking entry to the objectcache to stop the second thread from reading the file, and just wait until the first thread added it to the cache. If you think that's worthwile we would be happy to implement that version. A bit tricky to implement and test, that's why I submit a simple version that stops my program from crashing.
"


git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14299 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 11:11:38 +00:00
Robert Osfield
64bef29848 Removed erroneous character
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14297 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 11:09:21 +00:00
Robert Osfield
fc0c2a76c1 From Farshid Lashkari,
"I noticed that Text3D objects would change there z alignment depending on the alignment mode. I'm not sure if this was intentional or just a simple mistake. My expectation was that the front of the object would always stay aligned to the 0 z-plane, regardless of the alignment mode. I've attached an updated version that retains a consistent z-alignment."
"I just now noticed another issue with Text3D objects. It was not properly computing the bounding box when non-axis aligned rotations were being applied. In this case all corners of the bounding box need to be transformed in order to get the correct containing box. I've attached the updated file."
"The incorrect bounding box problem also applies to regular Text objects. I've attached the fix for that as well as the original Text3D fix."



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14295 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 10:53:16 +00:00
Robert Osfield
fb09bd6c12 From Laurens Voerman, "while debugging ImageSequence I had a crash, due to the very large frametimes caused by halting the program. The problem is that when the frame time exceeds the length of the entire image sequence, a looping sequence will try to read it's _imageDataList beyond its size.
fix attached for  src/osg/ImageSequence.cpp"



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14292 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 10:24:39 +00:00
Robert Osfield
94e7f4e860 From Laurens Voerman, "while testing databasepager stuff I noticed that the various loaders (osg/ive/osgx) do not pass the current options to the imagePager, therefore the images cannot be found if not in the global OSG_FILE_PATH. Attached is a fix, containing modified versions of
From Robert Osfield, add check to only apply Options object when a valid Option object is assigned.

src\osgPlugins\ive\ImageSequence.cpp
src\osgWrappers\deprecated-dotosg\osg\ImageSequence.cpp
src\osgWrappers\serializers\osg\ImageSequence.cpp"


git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14291 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 10:05:55 +00:00
Robert Osfield
1ca2ed9729 From Farshid Lashkari, "I've attached a small fix for the ply loader to support Windows style line endings when reading the header."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14289 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 09:39:16 +00:00
Robert Osfield
f86acab9b2 From Aurelien Albert, "This submission fix all my problems with reading / writing "osgb" files inside "osga" archive with final archive size > 2 Go, with Windows OS (didn't tested with Linux)"
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14286 16af8721-9629-0410-8352-f15c8da7e697
2014-06-26 09:33:54 +00:00
Robert Osfield
5461ca4b6f From Riccardo Corsi, "there's an inconsistency between the behavior of the method and the
debug message it prints out on the console.

Around line 1040 of Registry.cpp (see code below) the method returns
"simpleFileName" but prints about returning "filename".

In attachment the modified file, based on osg 3.2.0
ricky


<code>
if(fileExists(simpleFileName))
{
    OSG_DEBUG << "FindFileInPath(" << filename << "): returning " <<
filename << std::endl;
    return simpleFileName;
}
</code>
"



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14284 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 16:05:53 +00:00
Robert Osfield
0f797078f0 Refactored the way that hole are pruned from the occluder hole list.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14281 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 15:47:54 +00:00
Robert Osfield
14332e5ca1 From Laurens Voerman, "a minor patch for osgconv to make sure the helptext is printed if you run "osgconv -h" with OSG_NOTIFY_LEVEL set too low.
applys to both trunk and stable branch."


git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14279 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 11:07:57 +00:00
Robert Osfield
2f8a4c654a From Mikhail Izmestev, "Attached fix to avoid vector usage in StateGraph::prune and reduce heap allocations."
Notes from Robert Osfield, ammended the erase so that it explictly increments the iterator before the erase call.



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14278 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 10:45:35 +00:00
Robert Osfield
832fb9798e From Björn Blissing, "I found a minor error in documentation in include/osg/Math.
Function: absolute() had the same description as the function minimum()

I removed the erroneous text."


git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14274 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 08:21:40 +00:00
Robert Osfield
79b0f8c839 From Björn Blissing, "Fix to support correct shininess and transparency in FBX plugin
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14271 16af8721-9629-0410-8352-f15c8da7e697
2014-06-25 08:17:59 +00:00
Robert Osfield
8d41495014 From Pjotr Svetachov, "There were some modes missing when exporting to .ogst so I added them."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14270 16af8721-9629-0410-8352-f15c8da7e697
2014-06-24 19:57:45 +00:00
Robert Osfield
fb28e0ffa1 "I've attached a small for the osg ReaderWriter. It was performing a case sensitive comparison to the file extension to determine whether to write the file in ascii or binary. This meant that if the filename was "model.OSGT" it would be treated as binary, instead of ascii. I've updated the plugin to ignore case."
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14268 16af8721-9629-0410-8352-f15c8da7e697
2014-06-24 14:59:04 +00:00
Robert Osfield
cb3ce747ca Fix to merge Geometries.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14266 16af8721-9629-0410-8352-f15c8da7e697
2014-06-24 11:24:48 +00:00
Robert Osfield
a6939bc46f Fixed check against number of vertices
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14263 16af8721-9629-0410-8352-f15c8da7e697
2014-06-16 16:18:02 +00:00
Robert Osfield
773d0a2ddf From Aurelien Albert, "I've got some issues using osgb files within an big osga archive (file size > 2Go).
Issue is described here : http://forum.openscenegraph.org/viewtopic.php?t=13914

Here is a fix, using "std::streampos" standard type for stream positions up to 64bits.
"



git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14260 16af8721-9629-0410-8352-f15c8da7e697
2014-06-16 08:54:51 +00:00
Robert Osfield
1b3dba7860 Removed generation of scroll event on the X11 button release event as X11 was generating both a pair of press/release events for a single scroll when movement.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14256 16af8721-9629-0410-8352-f15c8da7e697
2014-06-12 16:00:20 +00:00
Robert Osfield
f127220582 Added if () blocks to State::convertVertexShaderSourceToOsgBuiltIns() to ensure that only parts of the shader than need replacing are replaced.
git-svn-id: http://svn.openscenegraph.org/osg/OpenSceneGraph/branches/OpenSceneGraph-3.2@14254 16af8721-9629-0410-8352-f15c8da7e697
2014-06-12 15:24:31 +00:00
Robert Osfield
52abe9503f Updated release candidate for 3.2.1-rc3 2014-05-22 14:52:26 +00:00
Robert Osfield
95acbe55b5 Upated ChangeLog and AUTHORS in prep for release candidate 2014-05-22 14:43:30 +00:00
Robert Osfield
3a5d834643 From Sebastian Messershmidt, "There was some small error due to MS non-conformity handling comments correctly." 2014-05-15 14:58:43 +00:00
Robert Osfield
2ab66723d5 From Pjotr Svetachov, "Today I found a bug in the IutputStream class when saving array
attributes in vec3b format. It looks like my compiler takes the wrong
overload and outputs integers instead of characters. The problem is
that vec3b is of type signed char and that is not the same as char (
see http://stackoverflow.com/questions/436513/char-signed-char-char-unsigned-char
) and visual studio 2013 will promote it to integer when choosing an
overload.
It looks like that the InputStream class already takes care of this
issue (if it didn't it would have read everything ok and I would have
not even stumbled upon this bug. :) )"
2014-04-29 13:41:33 +00:00
Robert Osfield
044e20911b From Pjotr Svetachov, "I had the osgvolume example crash on me when loading large volume
datasets due to an overflow in image.cpp after a unneeded cast from
unsigned int to int. Here is a small fix."
2014-04-28 14:58:33 +00:00
Robert Osfield
a256eac9c5 From Jason Beverage, "Here is a fix for a small race condition in osgDB::makeDirectory. It attempts to create all the directories in the given path and stops attempting to make directories when one of them fails. I've added a check to see if the failure occurred b/c the directory was created by another thread or process.
We were running into issues occasionally in osgEarth where multiple threads were writing out files like /1/2/3.jpg and /1/3/4.jpg.  Both threads would try to create the /1 directory and only one of them would succeed.  So the first thread would write out the full /1/2/3.jpg while the second thread wouldn't create the /1/3 directory b/c /1 was already created and the writing of /1/3/4.jpg would fail.
"
2014-04-28 14:57:01 +00:00
Robert Osfield
14b978369e Fixed type error 2014-04-28 11:53:53 +00:00
Robert Osfield
25aeb1dadc From Farshid Lashkari, "I've attached a small fix to the Collada loader which prevents a null pointer access in some cases." 2014-04-24 17:26:44 +00:00
Robert Osfield
762f0819ff In the ::apply method, when the image data need to be re-uploaded, the Texture2DArray checks if the TextureObject can be re-used. The test was made using the constant 1 instead of the real texture depth, so the TextureObject was never re-used. 2014-04-24 17:23:15 +00:00
Robert Osfield
0d30acccf1 Fixed reference invalidation bug. 2014-04-24 10:39:03 +00:00
Robert Osfield
5c73224c36 Fixed comment 2014-04-14 16:16:22 +00:00
Robert Osfield
b65f0043ef Renamed FindFreeType.cmake to FindFreetype.cmake to enable CMake build to pick up on CMake's own FindFreetype.cmake when it's available. 2014-04-13 16:04:25 +00:00
Robert Osfield
283b9d4447 Merged changes from svn/trunk to add the REMOVE_CXX_FLAGS macro 2014-04-13 16:03:17 +00:00
Robert Osfield
2d8b521e33 Disabled warnings that FBX headers are generating that we can't fix 2014-04-09 17:21:26 +00:00
Robert Osfield
a6df790b64 Added extra search files for K/Ubuntu 14.04 new location for freetype headers 2014-04-08 19:44:29 +00:00
Robert Osfield
c0ef8b8264 From Remo Eichenberger, "I have extended the TIFF plugin that allows you to write LZW or JPEG compressed TIFF's. Options are:
tiff_compression = lzw | jpeg"
2014-04-08 12:00:59 +00:00
Robert Osfield
8c0413e293 From Pjotr Svetachov, "We had a small problem converting skeleton animations from fbx to osgt
format. Turned out that the serializer didn't handle bone names with
spaces very well (the 3ds studio max biped for instance has spaces by
default). Here is a small fix for the problem."
2014-04-08 11:17:55 +00:00
Robert Osfield
a3288ea19a From Pjotr Svetachov, previous obj "commit broke compilation under visual studio 2013. To use std::not1 you need to include the functional header. Here is a fix." 2014-04-08 11:07:57 +00:00
Robert Osfield
eeeb18926a Fixed build when using of double BoundingBox/BoundingSphere 2014-04-07 15:04:32 +00:00
Robert Osfield
dcb01cf3e5 From Jan Peciva, "I am sending four fixes to obj plugin:
- materialName used to be not stripped of whitespace, making number of models
fail to load materials; now fixed
- stripping was considering spaces only, thus models using tabs had problems
to load correctly; fixed
- fixed references to textures; they did not performed conversion to native
directory separators
- make d (dissolve) takes precedence over Tr (transparency); there seems to be
a confusion about the Tr item - some claiming 1 to be opaque and 0
transparent, while number of models uses exactly the opposite. d (dissolve),
if present in the model, does not suffer from this confusion, thus using it
instead fixes the problem for many many models.

I put many comments to the file concerning d and Tr item as others may further
investigate. Let me know in the case of any problems."
2014-04-07 14:18:17 +00:00
Robert Osfield
6077e19029 From Marcel Pursche, "The problem is that when OpenThreads is build with the Linux pthreads implementation all threads inherit the processor affinity from their parent thread.
This behavior is also described in the pthreads man page (http://man7.org/linux/man-pages/man3/pthread_create.3.html):

>
> Linux-specific details
> The new thread inherits copies of the calling thread's capability
> sets (see capabilities(7)) and CPU affinity mask (see
> sched_setaffinity(2)).
>

To prevent this behaviour I wrote a patch that explicitly sets the affinity mask to all cores of the system, if no specific affinity was defined with PThread::setProcessorAffinity(unsigned int) .

Thank you!
"
2014-04-07 14:11:11 +00:00
Robert Osfield
34911d071e From Bjorn Blessing, "I got bored of the constant reports of “missing chunk 0xA08A” when reading 3ds-files. After a bit of research I discovered that this property is related to the advanced transparency settings for the material in 3D studio. In this case the falloff parameter. These controls affect the opacity falloff of a transparent material. And the property chooses whether falloff is in or out. I have added the property to the file reader BUT no changes are made to make this property propagate into the osgMaterial. But at least we get rid of this annoying error message." 2014-04-07 14:03:54 +00:00
Robert Osfield
21acda6898 From Paul Martz, "We discussed the issue of GL_RED_SNORM and GL_RG_SNORM some time ago, but the issue was never completely resolved. Please see the attached submission to fix the issue.
osg/GL2Extensions was incorrectly defining GL_RED_SNORM and GL_RG_SNORM as part of the definitions for OpenGL v3.1. However, a quick review of the 3.1 spec indicates that these are not part of the 3.1 standard.

My attached change moves these definitions out of the #ifndef GL_VERSION_3_1 conditional block, and defines them conditionally if not already defined. This allows the DDS plugin to build for GL3.
"
2014-04-07 13:48:11 +00:00
Robert Osfield
cdf9886a9e Improved white space trimming 2014-02-05 11:06:39 +00:00
Robert Osfield
d91c8b81cd Replaced C cast to long with a static_cast<const void*>() to avoid a build error under Mingw 64. 2014-01-31 19:18:22 +00:00
Robert Osfield
5a8aee3ede Updated ChangeLog 2014-01-29 11:08:29 +00:00
Robert Osfield
abefc9d8a8 Fixed MingW build's handling of debug d postfix. 2014-01-28 16:48:27 +00:00
Robert Osfield
8cbee2664f Disabled the compiler invocation at runtime. 2014-01-28 16:47:53 +00:00
Robert Osfield
ebbf2d1653 From Laurens Voerman, "I experienced a crash in Geometry::fixDeprecatedData(), on certain files, and brought the problem down to a very simple test file, attached as test3.zip.
There are two problems:
1> for DrawElementsUShortPrimitiveType (and UInt) the source_pindex still equals -1 and causes a crash
     in DrawElementsUBytePrimitiveType source_pindex is incremented, and in DrawElementsU(Short/Int)PrimitiveType primitiveNum is incremented, but never used

2> The drawelements need to be rewritten as the vertices are reordered.

created a patch for osg stable branch(r14038): attached as Geometry-osg-3.2.zip
and for svn brach(r14044): attached as Geometry_osg_svn.zip"
2014-01-24 17:31:03 +00:00
Robert Osfield
aa81404a41 From Aurelien Albert, "In the "apply" method of osg::FrameBufferObject, the draw buffers are always enabled, even if the target is only "READ_FRAMEBUFFER".
This can lead to inconsistency if you bind a framebuffer with multiple attachments in DRAW mode and then a framebuffer with different attachment count in READ mode (for example to manually "blit" from a FBo to another).

On some ATI cards (at least RADEON HD) this also leads to an "incomplete " FBO status

I've added a test to enable drawbuffers only if target is "DRAW" or "READ_DRAW", this solves my problems on ATI cards."
2014-01-24 17:06:33 +00:00
Robert Osfield
a69d12af10 From Michael Schanne, "small fix for a duplicate OR operand in KdTree.cpp." 2014-01-24 16:45:46 +00:00
Robert Osfield
1102058f31 From Torben Dannahuer, "modified findcollada.cmake which can now detect Boost 1.55 libraries, which are used by Collada in my 3rdParty package" 2014-01-24 16:28:28 +00:00
Robert Osfield
684b4d8bf5 From Torben Dannhauer, VisualStudio 2013 build fixes 2014-01-24 16:24:59 +00:00
Robert Osfield
69fd9d7530 From Marc Helbling, "I am sending a small fix in the PLY pseudo-loader; the extension was checked in plyfile.cpp thus preventing the loading of any .PLY file (extension in uppercase). The extension filtering is already handled by ReaderWriter::acceptsExtension in a case unsensitive way." 2014-01-24 16:02:00 +00:00
Robert Osfield
6ffe11dda5 Fixed warnings 2014-01-23 19:55:35 +00:00
Robert Osfield
a8e7dbd9ce Cleaned up the Qt find package, and made changed the default threading model to SingleThreaded when using Qt5 to avoid crash due to regresssion since Qt4. 2014-01-23 10:09:57 +00:00
Robert Osfield
a2e1dc04bf Added clean up of osg::Program that are applied by the GLObjectsVisitor, which addresses a state leak that creates GL error once the main scene graph is rendered. 2014-01-23 09:41:16 +00:00
Robert Osfield
7b39cbddfd Added GL_TEXTURE_2D_MULTISAMPLE to texture mode list. 2014-01-23 07:59:53 +00:00
Robert Osfield
eaca0d3d3d From Stephan Huber, OSX build fix 2014-01-17 18:22:16 +00:00
Robert Osfield
2665191aed From Kristofer Tingdahl, "the patch I sent to src/osgQt/CMakeModules.txt did not do the work on windows. I have fixed that, and also made it more generic so there is no special handling of qt5.2, but all qt5 are the same.
I have tested this on:

mac/qt5.2
linux/qt5.2
windows/qt5.2, and
mac/qt5.1

All platforms perform as expected.

The previous fix removed the -f flag to the moc-pre-processor, but on windows, it turned out that -f "osgQt/QGraphicsViewer" was needed.

This becomes an include-statement in the file generated by moc which is needed for compiling it. I ask you consider this patch for the trunk and the 3.2 branch.


Secondly, I wonder if it would be possible to apply my patch for FindRSVG.cmake from 22nd November in the 3.2 branch.

In short, the version of librsvg must be equal or higher to 2.35:

PKG_CHECK_MODULES(RSVG librsvg-2.0>=2.35)
"
2014-01-17 14:02:46 +00:00
Robert Osfield
ed2b25e32c From Jordi Torres, "Fixed a typo in ReaderWriterCURL::ReaderWriterCURL() changed Psuedo for Pseudo." 2014-01-17 13:53:54 +00:00
Robert Osfield
acdebc99bc From Farshid Lashkari, "I've attached a fix for the Collada loader that prevents a crash with some files containing textures. I also converted an OSG_NOTICE to OSG_INFO to be consistent with other log messages within the loader." 2014-01-08 10:32:58 +00:00
Robert Osfield
574b3eb573 Removed more odd characters 2014-01-08 10:31:24 +00:00
Robert Osfield
d32d406019 Removed more odd characters 2014-01-08 10:28:11 +00:00
Robert Osfield
8b3a85e6bc Removed odd characters 2014-01-08 10:24:32 +00:00
Robert Osfield
91660974e2 Removed execute permissions using svn propdel svn:executable file 2014-01-07 16:43:49 +00:00
Robert Osfield
0f547585d3 From Farshid Lashkari, "I've attached a small change to the DAE writer to support writing out unknown transform types. It will essentially treat it as a matrix transform, using the the local to world matrix value." 2014-01-07 16:29:20 +00:00
Robert Osfield
3ba5f22604 From Sebastian Messerschmidt, "Original shader was not running on various NVidia cards due to old syntax in shader." 2014-01-07 16:16:25 +00:00
Robert Osfield
64707b12f2 Updated SO_VERSION of OpenThreads to avoid conflicts with Debian increments to the SO version they have bumped for OpenThreads 2014-01-07 11:02:39 +00:00
Robert Osfield
7da5ae26d0 Added State::getMaxTextureCoords() and State::getMaxTextureUnits() inline methods. 2014-01-07 11:01:27 +00:00
Robert Osfield
485776bf18 Renamed the OSGSIM cmake variable to OSGSIM_LIBRARY to be consistent with the rest of the variables. 2014-01-06 10:23:31 +00:00
Robert Osfield
3eddec871a From Kristofer Tingdahl, "the syntax of the moc executable has changed between 5.1.1 and 5.2.0 versions of qt (see below). The difference is that the <file> argument has become mandatory after the -f option.
Hence, moc will complain when osg throws in a -f without anything after it. Hence I propose removing the -f on Qt5 builds. I have tested building without -f on both qt520 and qt511, and that works well.

The attached src/osgQt/CMakeLists.txt that can be patched into 3.2 safely. For the trunk, I would consider dropping the check on the version, and simply remove the option on qt5. I have tested that on qt5.1.1, and that worked fine. Question is however if it works on qt5.0. Probably it does, so the question is simplicity of CMakeList.txt vs safety."
2013-12-19 17:13:23 +00:00
Robert Osfield
f8f04cb04c From Mike Krus, compile fix to enable compiling across a wider set of versions. 2013-12-06 09:36:02 +00:00
Robert Osfield
4f11db1653 From Stephan Huber, workaround for Clang bug under Apple 2013-11-22 10:33:57 +00:00
Robert Osfield
63bd3be9cd Warning fixes 2013-11-22 10:27:20 +00:00
Robert Osfield
4ca088dcf9 Clean up of line endings 2013-11-22 10:10:14 +00:00
Robert Osfield
3ef97ddeea From Stephan Huber, "attached you’ll find some minor ios-fixes/-enhancements
* force _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC for IOS device + simulator as the test does not pick the right implementation
* fixed a small compile-bug for iphone-example
* added a check to prevent multiple realization of a GraphicsWindowIOS-object
"
2013-11-21 14:09:20 +00:00
Robert Osfield
31c54aa3e4 From Farshid Lashkari, "I recently encountered an issue attempting to load an IVE file generated by an older version of OSG. The file contained dxt1 compressed image data with mipmaps. The loaded model would cause crashes when passing the mipmap data to glCompressedTexImage2D. It seems that the size of the data array within the IVE file did not match the computed size from Image::getTotalSizeInBytesIncludingMipmaps(). This essentially made the mipmap offsets invalid within the Image object.
I'm not sure if the IVE was simply generated incorrectly, or if the Image::getTotalSizeInBytesIncludingMipmaps() was modified since the file was generated. Either way, I added a simple check in the IVE loader so that it clears the mipmap offsets if the actual data size does not match the computed data size. This seems like a safe fallback since the mipmap data can be automatically generated, and it fixes the problem in my case.

Also, while looking into this issue, I noticed that the osgDB::InputStream class applies the serialized image allocation mode. However, since the serializer is allocating the image data itself, it seems like it should force the allocation mode to USE_NEW_DELETE.
"
2013-11-21 13:58:36 +00:00
Robert Osfield
76c45c7731 Changed std::max to osg::minimum to addres build error under VS2013. 2013-11-21 11:00:50 +00:00
Robert Osfield
5efce09451 Removed -fpermissive flag from GCC build, and fixed warning 2013-10-25 15:48:15 +00:00
Robert Osfield
3f8e6d0a74 Added explict setting of the PolygonMode to over the distion mesh being toggled to wireframe. 2013-10-25 15:47:41 +00:00
Robert Osfield
9433947d2a Fixed warning 2013-10-24 20:22:05 +00:00
Robert Osfield
6f9b82142a Removed deprecated glib call 2013-10-24 19:56:14 +00:00
Robert Osfield
1dcc2555e7 Fixed FileInfo self initialization bug 2013-10-24 19:31:41 +00:00
Robert Osfield
27f9021df7 Fixed warnings 2013-10-22 16:28:03 +00:00
Robert Osfield
9af08d6715 From Colin McDonald, two submissions merged from svn/trunk:
"The osgb file reader uses seek to position within the file.
But the nested stream implementation for osga archive files doesn't
support seeking.  So osgb files can't currently be used in an osga
archive e.g. if osgdem is used to output a osgb format database it
can't be packaged in an archive file, in the same manner that ive
files could.

I've added seek support to the osga nested stream implementation."


"The osgt/osgb file formats output a scenegraph node with the type
set to "SCENE" in the file header.  But if the file is stored and
then extracted again from an osga archive this header info is lost,
and the resulting file is just an "OBJECT".  Possibly other plugin
operations would have the same effect.  The osgt/osgb plugin won't
then return the scenegraph contents.

I have updated the osgt/osgb plugin to return a node from an "OBJECT"
file."
2013-10-22 11:33:45 +00:00
Robert Osfield
5c4800c774 Fixed handling of in scene graph osg::Program being overriden by shader composition. 2013-10-22 11:17:29 +00:00
Robert Osfield
dfd8594042 From Robert Milharcic, workaround for ShaderComposer clean up bug. 2013-10-21 17:44:24 +00:00
Robert Osfield
be2d80abca Build fixes for clang 2013-10-21 09:56:57 +00:00
Robert Osfield
ca8f3d5f8a From Farshid Lashkari, "previously discussed change to the dae loader which applies the node ID as a "dae_node_id" user value." 2013-10-18 09:57:53 +00:00
Robert Osfield
790c0091e6 From Vladimir Chebeav, fix for removal of nested callbacks 2013-10-18 08:37:19 +00:00
Robert Osfield
ce58131cfc From Konstantin Matveyev, "Multiple light fix in FBX-importer" 2013-10-18 07:54:59 +00:00
Robert Osfield
309da2fe07 From Colin McDonald, "Added some missing updates to the serializer static build support." 2013-10-18 07:52:00 +00:00
Robert Osfield
97d706c640 Build fix 2013-10-17 18:34:16 +00:00
Robert Osfield
f14f58c486 Fix for error in getting the uniform block max name length, fix suggested by Christopher Fennell. 2013-10-17 18:29:38 +00:00
Robert Osfield
7c9cbc5ff9 From Pjotr Svetachov, "With the new osg::Geometry the binding for arrays now default to undefined. This breaks previously working code in osgAnimation::RigTransformHardware where the arrays got an undefined bounding and because of this the bone indices and weights were not loaded by the shader. Here is a little patch to fix this." 2013-10-10 20:42:21 +00:00
Robert Osfield
2a70ea9f64 Updated rc number 2013-10-07 10:40:10 +00:00
Robert Osfield
2f71509ebf From Stephan Huber, "attached you’ll find a bunch of fixes + enhancements for iOS and OS X based on current trunk. I incorporated + tested the submission from Colin Cochran, so his submission is not needed anymore.
* fixed a bug with multi-touch and touch-id-generation on iOS and OS X. (will fix a bug reported by Colin Cochran, without ditching the existing logic)
* removed unnecessary warning-flagss when generating xcode-projects via cmake, will enable the usage of OSG_AGGRESSIVE_WARNING_FLAGS
* added support for 10.9 (OS X)
* new cmake-variable: IPHONE_VERSION_MIN, this will set the deployment-target (previously hard-coded) If you set the IPHONE_VERSION_MIN to something like 7.0 osg gets compiled also for 64bit (amd64)
* cmake defaults now to the clang compiler if IPHONE_VERSION_MIN > 4.2
* cmake now sets some xcode-settings so the compiler uses the c++98-standard (clang defaults to c++11, w/o this I got a lot of linking errors)
* removed include-dir for avfoundation-plugin as not needed on OSX/IOS.
* enhanced the ios-example, will now show multitouch-information on a hud (similar to the  osgmultitouch-example), and more importantly, will compile + link out of the box
* small enhancements for the osc-device-plugin (send only one msg for MOVE/DRAG, even if multiple msgs/event is enabled)
* better memory-handling for the zeroconf-plugin
* fixed a possible bug in the rest-http-plugin when receiving mouse-events.
* incorporated a fix from Colin Cochran "forwarded touch events are not transformed into the GL UIView“
"
2013-10-07 10:38:58 +00:00
Robert Osfield
320c51aa96 Updated Controbutors to fix errors 2013-10-03 16:13:54 +00:00
Robert Osfield
8de7ad3fa3 Updated AUTHORS and ChangeLog for 3.2.1-rc1 2013-10-03 15:40:08 +00:00
Robert Osfield
316726445d Updated versions in prep for 3.2.1-rc1 2013-10-03 15:29:26 +00:00
Robert Osfield
eac772a841 Updated AUTHORS for for rc 2013-10-03 15:24:07 +00:00
Robert Osfield
f2428e961f From Dmitry Marakasov, "These are FreeBSD bits for src/osgPlugins/osc/osc/OscHostEndianness.h,
required to build newever OSG on this OS. Also corrects file name
in the error message - I was confused not to find OSCHostEndianness.h
after I've got this error.

Tested by successfully building OSG 3.2.0 with this patch on FreeBSD
9.1."
2013-10-02 11:29:56 +00:00
Robert Osfield
d636e89f9a From Björn Hein, "it seems that for generating "per vertex normals" as stated in the
comment, two of them are missing. This results in wrong display of
STL-files regarding normals. Following simple fix seems to work:

Index: ReaderWriterSTL.cpp
===================================================================
--- ReaderWriterSTL.cpp    (Revision 13797)
+++ ReaderWriterSTL.cpp    (Arbeitskopie)
@@ -108,6 +108,8 @@
                     ++itr)
                 {
                     perVertexNormals->push_back(*itr);
+                    perVertexNormals->push_back(*itr);
+                    perVertexNormals->push_back(*itr);
                 }

                 geom->setNormalArray(perVertexNormals.get(),
osg::Array::BIND_PER_VERTEX);
"
2013-10-02 11:09:22 +00:00
Robert Osfield
cb67c10b5f From Björn Blissing, "I propose making the following outputs a little bit more silent. In my mind it would suffice with OSG_DEBUG (compared to OSG_NOTICE) for these information messages." 2013-10-01 16:20:18 +00:00
Robert Osfield
7990effc06 From Christopher Baker, submitted by Alberto Luacas, "there is a bug report in the Ubuntu tracker that points to a bug when
loading multiple VRML files in parallel.  Christopher R. Baker has
detected this bug and crafted a patch.  In addition, libcoin has to be
also built with the "--enable-threadsafe" option.

I copy here his report, extracted from
(https://bugs.launchpad.net/ubuntu/+source/openscenegraph/+bug/1211993)
and attach his fix.  All credit is due to him:

«
There are three instances of a classical method-local-static
multithreaded initialization bug in the Inventor plugin for OSG that
trigger various memory faults when reading multiple VRML files in
parallel via osgDB::readNodeFile. These bugs are of the form:

static std::map<Stuff,OtherStuff> myHandyMap;
static bool once = true;
if(once) { ...fill myHandyMap; once = false }
... use myHandyMap;

To repeat: try loading multiple VRML files from multiple threads. The
liklihood of the bug depends on many factors, but my application, which
parallel-loads some dozens of small (<100K) VRML files on startup,
triggers this problem 25% of the time or more.

The attached patch (inventor-plugin-multithread.patch) rectifies this
problem by:

1 - Inheriting MyHandyMap from std::map, then
2 - Moving the map initialization into the derived constructor, which
3 - Is intrinsically protected from multithread issues by g++ (and is
part of the C++ standard), unless you pass -fno-threadsafe-statics,
which is strongly discouraged by the man page.
»
"
2013-10-01 09:37:54 +00:00
Robert Osfield
8d2c3db14c From Adrien Grandemange, "On Windows 7 and 8, mouse messages are generated in addition to touch messages, which leads to duplicate PUSH, DRAG and RELEASE events in OSG. Besides, the mouse and touch messages referring to the same user input are not necessarily sent at the same time, due to gesture translation done by Windows by default, such as double-tap => double-click and long-push => right-click.
The delay between the 2 types of messages is more noticeable on Windows 8 and leads to serious disruptions in our application.

Mouse messages generated by touch input are only present for legacy support. I think they should be filtered out by OSG (real click events originating from a physical mouse will of course still go through).

This is what this patch does, according to this suggestion: http://msdn.microsoft.com/en-us/library/dd693088%28v=VS.85%29.aspx (third issue in this page)."
2013-10-01 09:11:23 +00:00
Robert Osfield
04ea3aa6a2 From Thomas Hogarth, "Attached is a small build fix for PointSprite when compiling under GLES2 (r13788)
GL_POINT_SPRITE_OES does not exist in GLES2, instead you just draw using GL_POINTS then use gl_PointSize in a vertex shader to set the size."
2013-10-01 09:05:42 +00:00
Robert Osfield
d30a94bf4c 2013-09-30 18:32:44 +00:00
Robert Osfield
8ff77c10f9 From Farshid Lashkari, "I have a scene that makes heavy use of the StateSet::compare method and my profiler showed that a lot of time was being spent inside it. I made a small change to the method so that it performs a quick size comparison between the attribute/mode lists and bin mode before iterating through all the attributes. This made a noticeable improvement in my scene. I've attached the change." 2013-09-30 18:16:08 +00:00
Robert Osfield
76edd07195 Refactored the epsilon code to use the same one now used in svn/trunk. 2013-09-30 10:45:24 +00:00
Robert Osfield
0ab211cb7c Removed unnceccesary setNumChildrenRequiringUpdateTraversal from VolumeTile constructor. 2013-09-20 15:43:22 +00:00
Robert Osfield
0cd6a935e0 From Giuseppe Donvito, "I'm using OSG 320 and I need to flush a DDS 3D texture on disk.
I found a bug on DDS ReaderWriter that generates a false positive on a guard for the size check on writing operation. This is due to a wrong imageSize computation that uses img->getImageSizeInBytes() method instead of img->getTotalSizeInBytes(), that actually ignores the r() dimension, contrariwise taken into account by the function ComputeImageSizeInBytes() later.

The line 1062 on file ReaderWriterDDS.cpp should be fixed with:
[code]unsigned int imageSize = img->getTotalSizeInBytes();[/code]"
2013-09-10 15:18:34 +00:00
Robert Osfield
cab0f50371 From Giuseppe Donvito, Fixed typo of "CLEAR_GLOBAL_STATESET = 0x16," to indended "CLEAR_GLOBAL_STATESET = "0x10". 2013-09-10 13:29:28 +00:00
Robert Osfield
c62a57c006 From Colin Cochran, OES support for point sprites 2013-09-09 14:58:08 +00:00
Robert Osfield
fefe87ec13 osg uses osg::FBOExtensions to check if Frame Buffer Objects are
available.  But this just checks if the fbo functions can be called.
It doesn't check if the OpenGL renderer supports fbos.  For indirect
rendering on linux the client side capability may be different from
the display server, which can lead to mipmapped textures failing to
render.  I've added a fbo extension check.
2013-09-09 13:33:11 +00:00
Robert Osfield
8fd8036e33 From Ulrich Hertlein, "Patch for FindAVFoundation to work with OS X 10.9" 2013-09-09 12:44:32 +00:00
Robert Osfield
f653048d5f From Wang Rui, "Some developers report that the osgviewerMFC example is broken in 3.2, in which depth test is not enabled by default so all models loaded look awkward. I submit this patch to make it work again. I haven't gone deep to check why previous example goes wrong in newer version but I believe the problem was because the newly created camera object missed some important global statesets before set as the main camera." 2013-09-09 12:37:55 +00:00
Robert Osfield
caf56902c3 From Laurens Voerman, "two minor fixes, both in a CMakeList.txt file,
1> osgmultiplemovies example does not use SDL so needs no link to SDL

2> Added header files to "Plugins osg" project, so visual studio can find the source of
   OSG_WARN <<  "AsciiInputIterator::readProperty(): Unmatched property "
"
2013-09-09 12:33:20 +00:00
Robert Osfield
48498a1517 From Colin McDonald, "Attached are some fixes to build osg using the Solaris Studio compiler.
I've also checked the modified files still build ok with other
compilers (Linux gcc, Windows Visual Studio).

osgDB/OutputStream.cpp and osgPlugins/lws/SceneLoader.cpp require
stdlib.h for atoi use.

In osg/Uniform.cpp the compiler complains that base_class is unknown
unless I add a class name qualifier.

Not a build fix, but I spotted a typo in osgUtil/SceneView."
2013-09-05 10:23:24 +00:00
Robert Osfield
b86e644542 From Laurens Voerman, "like the "Bug in ProxyNode serializer" Farshid Lashkari found (svn submit 13754) the PagedLOD serializer attempts to read begin and and brackets.
Fix is identical (don't read brackets when num_chidren is zero) and applies both to trunk and 3.2 branch."
2013-09-05 10:08:06 +00:00
Robert Osfield
97091aa96c Fixed warnings 2013-09-05 10:05:05 +00:00
Robert Osfield
9574f4c087 From Alberto Luaces, "current versions of ffmpeg render «url_feof» macro as obsolete. The fix
is very simple and it is contained in the attached file."
2013-09-05 08:41:58 +00:00
Robert Osfield
a5002123a9 From Farshid Lashkari, "The ProxyNode serializer was not correctly reading the "Children" field. It conditionally writes the begin/end brackets, depending on whether it has children. However, during input it unconditionally attempts to read the begin/end brackets. I've modified the code to only read the brackets if it has children." 2013-09-02 10:57:50 +00:00
Robert Osfield
bddb6e8eaa Merged from svn/trunk, fixed double copy in StackedTransform constructor 2013-09-02 09:13:20 +00:00
Robert Osfield
41b1fcffe6 From Aurelien Albert, "I've go some problem with the method "State_Utils::replace" : if the original_phrase is empty, it leads to an infinite loop.
Here is a path to prevent this."
2013-08-05 12:00:59 +00:00
Robert Osfield
044f16b8b9 From Anish Thomas, added catch for to an empty DrawElementsUInt creation. 2013-08-01 11:25:07 +00:00
Robert Osfield
d581806619 From Ulrich Hertlein, "Based on the exchange on osg-users I went ahead and reworked shp/XBaseParser to avoid
weird behaviour (closing stdin) and leaking file descriptors, as well as some const-ness."
2013-08-01 10:28:15 +00:00
Robert Osfield
48364df671 From Sebastian Messerschmidt, "Seems like your re-factoring didn't really produces the correct results.
You can check with the tester2.flt provided earlier and check with the result image.
I double checked this with OpenFlight creator, and it seems the yaw is broken.

With my initial quaternion version is seems correct and if I change the


float cos_yaw = cosf(osg::inDegrees(yaw));
float sin_yaw = sinf(osg::inDegrees(yaw));

to be
float cos_yaw = cosf(osg::inDegrees(-yaw));
float sin_yaw = sinf(osg::inDegrees(-yaw));

it seems to work as well."
2013-08-01 10:04:07 +00:00
Robert Osfield
981ed52356 From Tom Jolley, "I found a couple more bugs after closely looking at the small piece of deprecated geometry in my model. There were problems with more than one primitive in a couple places. The first was the number of vertices were not being accumulated for DrawArraysPrimitiveType (caused another crash). The second is I had to move target_vindex and source_pindex before the PrimitiveSetList loop so they don't get reset on the next primitive (otherwise you end up with a lot of zeros in per vertex lists)." 2013-08-01 10:00:31 +00:00
Robert Osfield
9a90ddd2d9 From Aurelien Albert, "Here is the code to get access to OpenGL handle of an osg::FrameBufferObject" 2013-07-31 07:11:05 +00:00
Robert Osfield
123058965c From Tom Jolly, "I ran across this error reading one of our older files. An iterator was being changed inside a loop that caused a crash." 2013-07-31 06:56:28 +00:00
Robert Osfield
1364329fc8 From Sergey Kurdakov, merged from svn/trunk fix for GLES2 runtime invalid enumerant warning. 2013-07-31 06:43:46 +00:00
Robert Osfield
07550df2f2 From svn/trunk merged "Changed default cull mask to match the left cull mask so that mono rendering of presentations with left/right stereo images/movies works fine." 2013-07-30 06:39:36 +00:00
Robert Osfield
45f463ccd2 Removed trailing spaces 2013-07-30 06:39:01 +00:00
Robert Osfield
789d435abe Updated ChangeLog 2013-07-24 17:29:50 +00:00
Robert Osfield
6b8db67c91 Changed default of serialize draw to OFF 2013-07-24 17:27:14 +00:00
Robert Osfield
2975f9c20a Updated README for 3.2 release 2013-07-24 14:23:37 +00:00
Robert Osfield
ebc855cf50 Removed release candidate number in prep for 3.2.0 release 2013-07-24 14:11:55 +00:00
Robert Osfield
c9547497cc Fixed typo 2013-07-24 14:05:08 +00:00
Robert Osfield
75d32b3af6 Updated ChangeLog 2013-07-24 13:29:22 +00:00
Robert Osfield
a844a278ab Added GL2Extensions::isDrawBuffersSupported() and usage with FrameBufferObject.cpp to prevent invalid MRT usage causing crash under GLES2 2013-07-24 13:01:38 +00:00
Robert Osfield
94dcfb4ec2 Updated NEWS for 3.2 release 2013-07-24 12:50:34 +00:00
Robert Osfield
8528449dff Fixed warning 2013-07-24 12:49:11 +00:00
Robert Osfield
8d7fd88d5f Added getCallbacks() methods 2013-07-24 12:17:10 +00:00
Robert Osfield
28dd1cf8a8 Updated ChangeLog, AUTHORS file, Release Candidate Number and SO version number for 3.2-rc4 2013-07-23 18:34:01 +00:00
Robert Osfield
14de2266ba From Rocco Martino, build fix for compiling against ffmpeg/trunk 2013-07-23 18:11:31 +00:00
Robert Osfield
cc02695822 Disabled the check for Asio for Windows 2013-07-23 15:36:45 +00:00
Robert Osfield
2c442c9e9a Added NOT ANDROID to force use of posix API when building for Android under Windows 2013-07-23 15:28:34 +00:00
Robert Osfield
ca44b9cbce Added lazy setting of the UserDataContainer to avoid unncessarily create a UserDataContain when an empty description list is passed to Node::setDescriptions(..) 2013-07-23 10:24:27 +00:00
Robert Osfield
0483912e32 Fixed crash when open(..) returns an error. 2013-07-23 09:54:28 +00:00
Robert Osfield
21b5109089 Updated ChangeLog and AUTHORS file for rc3 2013-07-23 05:45:34 +00:00
Robert Osfield
549e20fbe7 Fixed svn source to that it's relase candidates and final release made from the OpenSceneGraph-3.2 branch 2013-07-23 05:41:40 +00:00
Robert Osfield
b4b7a13063 From Torben Dannhauer, "Please find attached further changes to make library auto detection
functional again for some libraries:

    Find3rdPa..: Fix to find libxml2
    FindCollada: Rearranged to handle different MSVC versions more effective.
    This file is already prepared for the upcoming VS 2013.
    FindNVTT: introduced management of debug libraries (also auto detected).
    "
2013-07-23 05:25:45 +00:00
Robert Osfield
8b58890975 Updatected rc number 2, ChangeLog and AUTHORS file for OSG-3.2-rc2 release 2013-07-22 13:40:53 +00:00
Robert Osfield
871521cfea From Andreas Ekstrand, "Attached is a small modification of the Collada writer that protects from crashes due to valArray being NULL in some situations." 2013-07-22 13:31:32 +00:00
Robert Osfield
f19018a03d Added FRAME_BUFFER_OBJECT enum 2013-07-22 10:07:21 +00:00
Robert Osfield
2709a5e946 From Christian Ruzicka, "with the current touch implementation on iOS the touches are not forwarded to parent views because the base implementation is not called. Also see the "Best Practices" in the iOS documentation for event handling:
http://developer.apple.com/library/ios/#documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/multitouch_background/multitouch_background.html

"If you handle events in a subclass of any other UIKit responder class:
- You do not have to implement all of the event handling methods.
- In the methods you do implement, be sure to call the superclass implementation. For example, [super touchesBegan:touches withEvent:event]."

I added the missing lines and tested it with OSG 3.1.9 and iOS SDK 6.1."
2013-07-19 21:03:28 +00:00
Robert Osfield
52d5d80508 Added default setting of BIND_PER_VERTEX when applying Geometry::setTexCoordArray() 2013-07-19 20:59:14 +00:00
Robert Osfield
86e465d5d8 Updated OpenThreads version to be in sync with OSG version. 2013-07-19 17:00:08 +00:00
Robert Osfield
50ed5ebd1c Branch OpenSceneGraph-3.2 2013-07-19 14:08:08 +00:00
1212 changed files with 83547 additions and 144812 deletions

94
.gitignore vendored
View File

@@ -1,94 +0,0 @@
doc/all_Doxyfile
doc/auto_Doxyfile
doc/core_Doxyfile
doc/openscenegraph.doxyfile
doc/openthreads.doxyfile
doc/OpenSceneGraphReferenceDocs/
doc/OpenThreadsReferenceDocs/
cmake_uninstall.cmake
include/OpenThreads/Config
include/OpenThreads/Version
include/osg/Config
include/osg/GL
include/osg/Version
include/osgQt/Version
src/osgQt/__
lib/
bin/
*.pc
*.conf
CMakeCache.txt
CMakeFiles
CMakeScripts
Makefile
cmake_install.cmake
install_manifest*.txt
# Compiled Object files
*.slo
*.lo
*.o
*.obj
# Precompiled Headers
*.gch
*.pch
# Compiled Dynamic libraries
*.so
*.dylib
*.dll
# Fortran module files
*.mod
# Compiled Static libraries
*.lai
*.la
*.a
*.lib
# Executables
*.exe
*.out
*.app
# Platform Specifics - auto generated files
PlatformSpecifics/Windows/*.rc
# Visual studio - project files
*.sln
*.suo
*.vcxproj
*.vcxproj.filters
*.vcxproj.user
# Visual Studio - Build Results
[Dd]ebug/
[Rr]elease/
[Mm]in[Ss]ize[Rr]el/
[Rr]el[Ww]ith[Dd]eb[Ii]nfo/
# Visual Studio - Browsing Database File
*.sdf
*.opensdf
#osx xcode
DerivedData/
*.DS_Store
*.build
*.xcodeproj
#CPACK related files
CPackConfig-*.cmake
_CPack_Packages/
#packages
*.tar.gz
*.zip

View File

@@ -1,36 +0,0 @@
matrix:
fast_finish: true
include:
#Linux build
- os: linux
dist: trusty
language: cpp
env:
#- LLVM_VERSION=3.8
sudo: false
cache:
apt: true
directories:
- $HOME/.ccache
compiler:
#- clang
- g++
addons:
apt:
sources:
#- llvm-toolchain-precise-3.8
- ubuntu-toolchain-r-test
packages:
#- clang-3.8
- g++
- cmake
# OSX build
- os: osx
language: cpp
script:
- mkdir build
- cd build
- travis_wait 60 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../product -DBUILD_OSG_EXAMPLES=ON ..
- make install -j3

View File

@@ -1,82 +1,80 @@
OpenSceneGraph Library 3.4.1 OpenSceneGraph Library 3.2.1
562 Contributors: 519 Contributors:
Firstname Surname Firstname Surname
----------------- -----------------
Robert Osfield Robert Osfield
Don Burns
Stephan Huber Stephan Huber
Paul Martz Paul Martz
Farshid Lashkari
Mathias Fr<46>hlich Mathias Fr<46>hlich
Farshid Lashkari
Marco Jez Marco Jez
Wang Rui Wang Rui
Jean-S<>bastien Guay Jean-S<>bastien Guay
Ulrich Hertlein Ulrich Hertlein
Mike Weiblen Mike Weiblen
Sukender
Eric Wing Eric Wing
Sukender
Cedric Pinson Cedric Pinson
Brede Johansen Brede Johansen
Bob Kuehne Bob Kuehne
Wojciech Lewandowski
Michael Platings Michael Platings
Geoff Michel Geoff Michel
Wojciech Lewandowski
Eric Sokolowsky Eric Sokolowsky
Laurens Voerman
David Callu David Callu
Laurens Voerman
Colin McDonald Colin McDonald
Trajce Nikolov Trajce Nikolov
Tim Moore Tim Moore
Martin Lavery Martin Lavery
Mattias Helsing
Jason Beverage
Tree Tree
Pjotr Svetachov
Luigi Calori Luigi Calori
Alberto Luaces
Mike Wittman Mike Wittman
Jan Peciva Jason Beverage
Chris Hanson Chris Hanson
Roland Smeenk Roland Smeenk
Roger James Roger James
Jeremy Moles Jeremy Moles
Jannik Heller Jan Peciva
Mattias Helsing
J.P. Delport J.P. Delport
Andy Skinner Alberto Luaces
Magnus Kessler Magnus Kessler
David Fries David Fries
Andy Skinner
Tom Jolley Tom Jolley
Paul Melis Paul Melis
Luc Frauciel Luc Frauciel
Aurelien Albert
Pavel Moloshtan Pavel Moloshtan
Brad Christiansen Brad Christiansen
Torben Dannhauer
Terry Welsh
Olaf Flebbe Olaf Flebbe
Mathieu Marache Mathieu Marache
Lionel Lagarde
Jason Daly Jason Daly
Aurelien Albert
Art Tevs Art Tevs
Philip Lowman Philip Lowman
Per Fahlberg Per Fahlberg
Norman Vine Norman Vine
Chris Denham Terry Welsh
Sherman Wilcox
Serge Lages Serge Lages
Romano Jos<6F> Magacho da Silva Romano Jos<6F> Magacho da Silva
Mourad Boufarguine Lionel Lagarde
Chris Denham
Alberto Farre Alberto Farre
Glenn Waldron Torben Dannhauer
Sherman Wilcox
Robert Michael
Mourad Boufarguine
Andr<EFBFBD> Garneau Andr<EFBFBD> Garneau
Adrian Egli Adrian Egli
Sebastian Messerschmidt
Randall Hopper
Kristofer Tingdahl
Jan Ciger
Ruben Lopez Ruben Lopez
Robert Michael Randall Hopper
Pjotr Svetachov
Jan Ciger
Glenn Waldron
Gideon May Gideon May
Don Tidrow Don Tidrow
Stephane Lamoliatte Stephane Lamoliatte
@@ -86,21 +84,19 @@ Joakim Simonsson
David Spilling David Spilling
Daniel Sj<53>lie Daniel Sj<53>lie
Bryan Thrall Bryan Thrall
Andreas Ekstrand
Rafa Gaitan
Mike Connell
Fabien Lavignotte Fabien Lavignotte
Thomas Hogarth Andreas Ekstrand
Riccardo Corsi Riccardo Corsi
Mike Connell
Melchior Franz Melchior Franz
Konstantin Matveyev
Johannes Baeuerle Johannes Baeuerle
Thomas Hogarth
Rafa Gaitan
Neil Hughes Neil Hughes
Martin Beckett Martin Beckett
Marc Helbling
Jordi Torres
Joran Jessurun Joran Jessurun
Gino van den Bergen Gino van den Bergen
Frederic Marmond
David Guthrie David Guthrie
Csaba Halasz Csaba Halasz
Cory Riddell Cory Riddell
@@ -109,8 +105,8 @@ Boris Bralo
Yefei He Yefei He
Sondra Iverson Sondra Iverson
Simon Julier Simon Julier
Sebastian Messerschmidt
Rune Schmidt Jensen Rune Schmidt Jensen
Ravi Mathur
Rainer Oder Rainer Oder
Nico Kruithof Nico Kruithof
Martin Aumueller Martin Aumueller
@@ -118,24 +114,22 @@ Mario Valle
Lukasz Izdebski Lukasz Izdebski
Jorge Izquierdo Ciges Jorge Izquierdo Ciges
Gordon Tomlinson Gordon Tomlinson
Frederic Marmond
Frederic Bouvier Frederic Bouvier
Carlo Camporesi Carlo Camporesi
Bj<EFBFBD>rn Blissing Ben Discoe
Alexander Sinditskiy
Thibault Genessay Thibault Genessay
Sasa Bistrovic Sasa Bistrovic
Ravi Mathur
Ralf Habacker Ralf Habacker
Neil Groves Neil Groves
Mikhail Izmestev Mikhail Izmestev
Markus Trenkwalder Markus Trenkwalder
Loic Dachary Loic Dachary
Joseph Steel Joseph Steel
Jordi Torres
John Shue John Shue
Hartwig Wiesmann
Brad Colbert Brad Colbert
Ben Discoe Alexander Sinditskiy
Vladimir Chebaev
Vivek Rajan Vivek Rajan
Uwe Woessner Uwe Woessner
Tony Horrobin Tony Horrobin
@@ -143,7 +137,6 @@ Thom DeCarlo
Tatsuhiro Nishioka Tatsuhiro Nishioka
Tanguy Fautr<74> Tanguy Fautr<74>
Sean Spicer Sean Spicer
Ryan Kawicki
Richard Schmidt Richard Schmidt
Peter Hrenka Peter Hrenka
Paul de Repentigny Paul de Repentigny
@@ -155,18 +148,21 @@ Martins Innus
Maciej Krol Maciej Krol
Lilin Xiong Lilin Xiong
Leandro Motta Barros Leandro Motta Barros
Julien Valentin
Johan Nouvel Johan Nouvel
Javier Taibo Hartwig Wiesmann
Donn Mielcarek Donn Mielcarek
Corbin Holtz Corbin Holtz
Blasius Czink Blasius Czink
Bj<EFBFBD>rn Blissing
Alexander Irion Alexander Irion
Toshiyuki Takahei Toshiyuki Takahei
Sebastien Grignard Sebastien Grignard
Ryan Kawicki
Rudolf Wiedemann Rudolf Wiedemann
Robert Milharcic
Maria Ten Maria Ten
Liang Aibin Liang Aibin
Kristofer Tingdahl
Katharina Plugge Katharina Plugge
John Vidar Larring John Vidar Larring
John Kelso John Kelso
@@ -181,26 +177,20 @@ Bruce Clay
Bradley Anderegg Bradley Anderegg
Andreas Goebel Andreas Goebel
Alok Priyadarshi Alok Priyadarshi
Ali Botorabi Alberto Barbati
Alan Dickinson Alan Dickinson
Wee See
Vladimir Shabanov Vladimir Shabanov
Vladimir Chebaev
Tugkan Calapoglu Tugkan Calapoglu
Tim Daoust Tim Daoust
Sylvain Marie
Sohey Yamamoto Sohey Yamamoto
Sergey Leontyev Sergey Leontyev
Santosh Gaikwad Santosh Gaikwad
Ryan Pavlik Ryan Pavlik
Robert Milharcic
Rene Molenaar Rene Molenaar
Piotr Domagalski Piotr Domagalski
Philippe Renon
Phil Atkin Phil Atkin
Pawel Ksiezopolski
Patrick Neary
Nathan Monteleone Nathan Monteleone
Miha Rav<61>elj
Miguel Escriva Miguel Escriva
Mattias Linde Mattias Linde
Mark Sciabica Mark Sciabica
@@ -210,14 +200,11 @@ Lars Nilsson
Konstantin Sinitsyn Konstantin Sinitsyn
Ken Sewell Ken Sewell
Julian Ortiz Julian Ortiz
Julen Garcia
John Kaniarz John Kaniarz
Johannes Scholz
Jim Vaughan Jim Vaughan
Jeremy Bell Jeremy Bell
Jaromir Vitek Jaromir Vitek
James French James French
Jaap Glas
Guillaume Millet Guillaume Millet
Gary Quinn Gary Quinn
Garrett Potts Garrett Potts
@@ -226,48 +213,45 @@ Fabio Mierlo
Doug McCorkle Doug McCorkle
Donald Cipperly Donald Cipperly
Don Leich Don Leich
Don Burns
Dietmar Funck Dietmar Funck
Colin Cochran Colin Cochran
Christian Ruzicka
Christian Buchner Christian Buchner
Charles Cole Charles Cole
Blake Williams Blake Williams
Bj<EFBFBD>rn Hein
Aur<EFBFBD>lien Chatelain
Antoine Hue Antoine Hue
Andrew Bettison Andrew Bettison
Andreas Henne
Anders Backman Anders Backman
Ali Botorabi
Alexander Wiebel Alexander Wiebel
Alessandro Terenzi Alessandro Terenzi
Alberto Barbati
Zach Deedler Zach Deedler
Yuzhong Shen Yuzhong Shen
Wee See
Warren Macchi Warren Macchi
Vincent Bourdier Vincent Bourdier
Terrex Terrex
Tassilo Glander Tassilo Glander
Sylvain Marie
Steve Lunsford Steve Lunsford
Stephane Simon Stephane Simon
Stephan Eilemann Stephan Eilemann
Stanislav Blinov Stanislav Blinov
Sergey Polischuk Sergey Polischuk
Roni Zanolli
Raymond de Vries Raymond de Vries
Ralf Kern Ralf Kern
Piotr Gwiazdowski Piotr Gwiazdowski
Pierre Haritchabalet Pierre Haritchabalet
Perry Miller Perry Miller
Pawel Ksiezopolski
Paul Palumbo Paul Palumbo
Paul Obermeier Paul Obermeier
Nguyen Van Truong Nguyen Van Truong
Nathan Cournia Nathan Cournia
Morten Haukness Morten Haukness
Morn<EFBFBD> Pistorius Morn<EFBFBD> Pistorius
Michael Mc Donnell
Michael Henheffer Michael Henheffer
Michael Guerrero Michael Guerrero
Maya Leonard
Max Bandazian Max Bandazian
Mathias Fiedler Mathias Fiedler
Mathew May Mathew May
@@ -279,15 +263,18 @@ Marius Heise
Marcin Hajder Marcin Hajder
Marcel Pursche Marcel Pursche
Lilith Bryant Lilith Bryant
Konstantin Matveyev
Kevin Moiule Kevin Moiule
Keith Steffen Keith Steffen
Julen Garcia
Joseph Winston Joseph Winston
John Aughey John Aughey
Johannes Scholz
Joachim Pouderoux Joachim Pouderoux
Jean-Christophe Lombardo Jean-Christophe Lombardo
Jan Klimke Javier Taibo
James Turner
James Moliere James Moliere
Jaap Glas
Igor Kravtchenko Igor Kravtchenko
Himar Carmona Himar Carmona
He Sicong He Sicong
@@ -297,35 +284,31 @@ Guillaume Taze
Guillaume Chouvenc Guillaume Chouvenc
Giuseppe Donvito Giuseppe Donvito
Gill Peacegood Gill Peacegood
Giampaolo Vigan<61>
Gerrick Bivins Gerrick Bivins
George Tarantilis George Tarantilis
Ferdi Smit Ferdi Smit
Eric Buehler
Eduardo Poyart Eduardo Poyart
Edgar Ellis Edgar Ellis
Dmitry Marakasov
Dimi Christopoulos Dimi Christopoulos
Diane Delall<EFBFBD>e Diane Delallée
David Longest David Longest
David Ergo David Ergo
Daniel Trstenjak Daniel Trstenjak
Craig Bosma Craig Bosma
Claus Scheiblauer Claus Scheiblauer
Christophe Loustaunau Christophe Loustaunau
Christian Kehl Christian Ruzicka
Bradley Baker Searles
Brad Anderegg Brad Anderegg
Bj<EFBFBD>rn Hein
Aric Aumann Aric Aumann
Anish Thomas
Andrew Sampson Andrew Sampson
Andrew Lorino Andrew Lorino
Alexandre Amalric Alexandre Amalric
Aitor Moreno
Zbigniew Sroczynski Zbigniew Sroczynski
Yuri Vilmanis Yuri Vilmanis
Xin Li Xin Li
Wang Lam Wang Lam
Wand Rui
Walter J. Altice Walter J. Altice
Volker Walkiewicz Volker Walkiewicz
Vladimir Vukicevic Vladimir Vukicevic
@@ -339,21 +322,17 @@ Valeriy Dubov
Vaclav Bilek Vaclav Bilek
Tyge L<>vset Tyge L<>vset
Troy Yee Troy Yee
Torben Dannahauer
Tony Vasile
Tomas Hogarth Tomas Hogarth
Tomas Hnilica Tomas Hnilica
Todd Furlong Todd Furlong
Tobias Ottenweller Tobias Ottenweller
Tino Schwarze Tino Schwarze
Tim George
Thorsten Brehm Thorsten Brehm
Thomas Weidner Thomas Weidner
Tan Dunning Tan Dunning
Tamer Fahmy Tamer Fahmy
Stewart Andreason Stewart Andreason
Steven Thomas Steven Thomas
Stephan Wenglorz
Simon Hammett Simon Hammett
Simon Carmody Simon Carmody
Simon Buckley Simon Buckley
@@ -363,7 +342,6 @@ Shane Arnott
Sergey Kurdakov Sergey Kurdakov
Sebastien Kuntz Sebastien Kuntz
Ruth Lang Ruth Lang
Ruben The
Ruben Smelik Ruben Smelik
Ross Anderson Ross Anderson
Ronny Krueger Ronny Krueger
@@ -390,11 +368,9 @@ Philip Lamb
Petr Salinger Petr Salinger
Peter Bear Peter Bear
Peter Amstutz Peter Amstutz
Per Nordqvist
Paul Idstein Paul Idstein
Paul Fredrikson Paul Fredrikson
Paul Fotheringham Paul Fotheringham
Paul Cheyrou-Lagreze
Pau Garcia Pau Garcia
Patrick Hartling Patrick Hartling
Parag Chaudhur Parag Chaudhur
@@ -405,23 +381,19 @@ Oren Fromberg
Oliver Neumann Oliver Neumann
Ole-Morten Duesund Ole-Morten Duesund
Nicolas Brodu Nicolas Brodu
Nick Thu
Nick Black Nick Black
Mojtaba Fathi Mojtaba Fathi
Mirko Viviani Mirko Viviani
Mikkel Gj<EFBFBD>l Mikkel Gjøl
Mike Krus Mike Krus
Mike Garrity Mike Garrity
Mick Thu Miha Ravsel
Michal Durkovic
Michael Schanne Michael Schanne
Michael Polak Michael Polak
Michael Morrison Michael Morrison
Michael Logan Michael Logan
Michael Kapelko Michael Kapelko
Michael Bach Jensen Michael Bach Jensen
Maya Thu
Maya Leonard
Max Rhiener Max Rhiener
Max Behensky Max Behensky
Mauricio Hofmam Mauricio Hofmam
@@ -437,13 +409,12 @@ Martin Innus
Martin Beck Martin Beck
Marius Kintel Marius Kintel
Mario Guimaraes Mario Guimaraes
Marcus Hein
Marco Thu
Marco Sciabica Marco Sciabica
Marco Lehmann Marco Lehmann
Marc Helbling
Maik Keller
Lukas Diduch Lukas Diduch
Louis Hamilton Louis Hamilton
Likasz Izebski
Lewis Harmon Lewis Harmon
Leigh Stivers Leigh Stivers
Laurence Muller Laurence Muller
@@ -460,24 +431,20 @@ Juergen Rensen
Juan Manuel Alvarez Juan Manuel Alvarez
Juan Hernando Juan Hernando
Josh Portway Josh Portway
Jonathan Greig
John Tan John Tan
John Hedström
John Grant John Grant
John Farrier
John Donovan John Donovan
John Davis John Davis
John Cummings John Cummings
John Argentieri John Argentieri
Joe Thompson
Joan Abadie Joan Abadie
Jim Brooks Jim Brooks
Jeroen den Dekker Jeroen den Dekker
Jeffrey Kinross
Jay Zuckerman Jay Zuckerman
Jason Howlett Jason Howlett
Jason Ballenger Jason Ballenger
Jamie Robertson Jan Klimke
James Turner
James Killian James Killian
James Athey James Athey
J.E. Hoffmann J.E. Hoffmann
@@ -488,10 +455,8 @@ Hartmut Seichter
Gunter Huber Gunter Huber
Gregory Jaegy Gregory Jaegy
Graeme Harkness Graeme Harkness
Github It
Gian Lorenzetto Gian Lorenzetto
George Papagiannakis George Papagiannakis
Geoff Thu
Galen Faidley Galen Faidley
Frida Schlaug Frida Schlaug
Frederic Smith Frederic Smith
@@ -506,8 +471,6 @@ Ferdinand Cornelissen
Fajran Iman Fajran Iman
Fabien Dachicourt Fabien Dachicourt
Erik Johnson Erik Johnson
Eric Thu
Eric Buehler
Eduardo Alberto Eduardo Alberto
Edmond Gheury Edmond Gheury
Ed Ralston Ed Ralston
@@ -515,7 +478,7 @@ Duvan Cope
Duncan Cavens Duncan Cavens
Drew Whitehouse Drew Whitehouse
Douglas A. Pouk Douglas A. Pouk
Dmitriy Ogalcev Dmitry Marakasov
Dean Iverson Dean Iverson
David Jung David Jung
Danny Valente Danny Valente
@@ -523,10 +486,7 @@ Daniel Stien
Dan Minor Dan Minor
C<EFBFBD>sar L. B. Silveira C<EFBFBD>sar L. B. Silveira
Cyril Brulebois Cyril Brulebois
Cory Slep
Cl<EFBFBD>ment B<>sch
Clay Fowler Clay Fowler
Claus Steuer
Chuck Sembroski Chuck Sembroski
Christopher Blaesius Christopher Blaesius
Christopher Baker Christopher Baker
@@ -539,8 +499,8 @@ Carlos Garcea
Bryce Eldridge Bryce Eldridge
Bruno Herbelin Bruno Herbelin
Brian Keener Brian Keener
Brede Thu
Brandon Hamm Brandon Hamm
Bora Utka
Bill Prendergast Bill Prendergast
Bernardt Duvenhage Bernardt Duvenhage
Benoit Laniel Benoit Laniel
@@ -548,21 +508,18 @@ Benjamin Wasty
Ben van Basten Ben van Basten
Bart Gallet Bart Gallet
Axel Volley Axel Volley
Arjun Ramamurthy
Anthousis Andreadis Anthousis Andreadis
Anish Thomas
Andy Preece Andy Preece
Andrew Reyonolds Andrew Reyonolds
Andreas Roth Andreas Roth
Andreas Jochens Andreas Jochens
Andre Normann Andre Normann
Alois Wismer
Almalric Alexandre Almalric Alexandre
Allen Bierbaum Allen Bierbaum
Alexey Pavlov
Alberto Jaspe Alberto Jaspe
Alan Purvis Alan Purvis
Alan Ott Alan Ott
Alan Harris Alan Harris
Adrien Grandemange Adrien Grandemange
Adrian Clark
Adam Richard Adam Richard

View File

@@ -22,42 +22,37 @@ if(COMMAND cmake_policy)
# tell CMake to prefer CMake's own CMake modules when available # tell CMake to prefer CMake's own CMake modules when available
# only available from cmake-2.8.4 # only available from cmake-2.8.4
if(${CMAKE_MAJOR_VERSION} GREATER 2 OR if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 3)
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 8) OR
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 3))
cmake_policy(SET CMP0017 NEW) cmake_policy(SET CMP0017 NEW)
endif() endif()
# cmake-2.6.1 introduces policy cmp0008 decide how to treat full path libraries that do not appear to be valid library file names # cmake-2.6.1 introduces policy cmp0008 decide how to treat full path libraries that do not appear to be valid library file names
# quote from cvslog "Such libraries worked by accident in the VS IDE and Xcode generators in CMake 2.4 and below." # quote from cvslog "Such libraries worked by accident in the VS IDE and Xcode generators in CMake 2.4 and below."
if(${CMAKE_MAJOR_VERSION} GREATER 2 OR if(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 4 AND ${CMAKE_PATCH_VERSION} GREATER 0)
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 6) OR
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 6 AND ${CMAKE_PATCH_VERSION} GREATER 0))
cmake_policy(SET CMP0008 OLD) cmake_policy(SET CMP0008 OLD)
endif() endif()
# disable autolinking to qtmain as we have our own main() functions (new in Qt 5.1) # disable autolinking to qtmain as we have our own main() functions (new in Qt 5.1)
if(${CMAKE_MAJOR_VERSION} GREATER 2 OR if((${CMAKE_MAJOR_VERSION} EQUAL 2 OR ${CMAKE_MAJOR_VERSION} GREATER 2) AND
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} GREATER 8) OR (${CMAKE_MINOR_VERSION} EQUAL 8 OR ${CMAKE_MINOR_VERSION} GREATER 8) AND
(${CMAKE_MAJOR_VERSION} EQUAL 2 AND ${CMAKE_MINOR_VERSION} EQUAL 8 AND ${CMAKE_PATCH_VERSION} GREATER 10)) ${CMAKE_PATCH_VERSION} GREATER 10)
cmake_policy(SET CMP0020 OLD) cmake_policy(SET CMP0020 OLD)
endif() endif()
# nicer version check - but needs at least CMake 2.6.2? Worth upgrading the requirements? # nicer version check - but needs at least CMake 2.6.2? Worth upgrading the requirements?
#if("${CMAKE_VERSION}" VERSION_GREATER 2.8.10) #if("${CMAKE_VERSION}" VERSION_GREATER 2.8.10)
# or even easier (available in cmake-2.6)
#if(POLICY CMPxyzw)
endif() endif()
PROJECT(OpenSceneGraph) PROJECT(OpenSceneGraph)
SET(OPENSCENEGRAPH_MAJOR_VERSION 3) SET(OPENSCENEGRAPH_MAJOR_VERSION 3)
SET(OPENSCENEGRAPH_MINOR_VERSION 4) SET(OPENSCENEGRAPH_MINOR_VERSION 2)
SET(OPENSCENEGRAPH_PATCH_VERSION 1) SET(OPENSCENEGRAPH_PATCH_VERSION 1)
SET(OPENSCENEGRAPH_SOVERSION 131) SET(OPENSCENEGRAPH_SOVERSION 100)
# set to 0 when not a release candidate, non zero means that any generated # set to 0 when not a release candidate, non zero means that any generated
# git tags will be treated as release candidates of given number # svn tags will be treated as release candidates of given number
SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0) SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0)
SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION}) SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION})
@@ -85,16 +80,78 @@ SET(OpenThreads_SOURCE_DIR ${OpenSceneGraph_SOURCE_DIR})
# Maybe this can be used override existing behavior if needed? # Maybe this can be used override existing behavior if needed?
SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}") SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
# Change the default build type to Release ## Option to enable Android build using AndroidNDK
IF(NOT CMAKE_BUILD_TYPE) OPTION(OSG_BUILD_PLATFORM_ANDROID OFF)
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) IF(OSG_BUILD_PLATFORM_ANDROID)
ENDIF(NOT CMAKE_BUILD_TYPE)
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)
IF(ANDROID)
INCLUDE(OsgAndroidMacroUtils) INCLUDE(OsgAndroidMacroUtils)
SET(ANDROID TRUE)
IF(NOT ANDROID_PLATFORM)
MESSAGE("Warning Android Platform version NOT defined, Default selected version: 5")
SET(ANDROID_PLATFORM 5)
ENDIF()
IF(NOT ANDROID_ABI)
MESSAGE("Warning Android ABI version NOT defined, Default selection: armeabi armeabi-v7a")
SET(ANDROID_ABI "armeabi armeabi-v7a")
ENDIF()
IF(NOT ANDROID_STL)
MESSAGE("Warning Android STL NOT defined, Default selection: gnustl_static")
SET(ANDROID_STL "gnustl_static")
ENDIF()
IF(ANDROID_DEBUG)
MESSAGE("Warning Android Build is in debug mode")
SET(ANDROID_RELEASE_OPTIM "debug")
ELSE()
MESSAGE("Warning Android Build is in release mode")
SET(ANDROID_RELEASE_OPTIM "release")
ENDIF()
IF(ANDROID_NEON)
MESSAGE("Warning Android NEON optimizations enabled, this will not be available on all armeabi-v7a devices ie. Tegra2")
SET(ANDROID_OPTIM_NEON true)
ELSE()
SET(ANDROID_OPTIM_NEON false)
ENDIF()
IF(ANDROID_ARM32)
MESSAGE("Warning ARM 32bit instruction set will be used")
SET(ANDROID_OPTIM_ARM32 true)
ELSE()
SET(ANDROID_OPTIM_ARM32 false)
ENDIF()
FIND_PACKAGE(AndroidNDK REQUIRED)
SET(OSG_ANDROID_TEMPLATES "${CMAKE_SOURCE_DIR}/PlatformSpecifics/Android")
SET(J "4" CACHE STRING "how many processes for make -j <J>")
ADD_CUSTOM_COMMAND(
OUTPUT Android-OpenSceneGraph
DEPENDS ${CMAKE_BINARY_DIR}/Android.mk
COMMAND "${ANDROID_NDK}/ndk-build"
ARGS --directory=${CMAKE_BINARY_DIR} NDK_APPLICATION_MK=Application.mk -j${J} NDK_LOG=1
)
ADD_CUSTOM_TARGET(ndk ALL echo
DEPENDS Android-OpenSceneGraph
)
install(DIRECTORY include/ DESTINATION include/
PATTERN ".svn" EXCLUDE
)
install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ DESTINATION include/
)
install(DIRECTORY ${CMAKE_BINARY_DIR}/obj/ DESTINATION obj/
PATTERN ".svn" EXCLUDE
PATTERN "objs" EXCLUDE
)
ADD_DEFINITIONS(-DANDROID)
ENDIF() ENDIF()
# Okay, here's the problem: On some platforms, linking against OpenThreads # Okay, here's the problem: On some platforms, linking against OpenThreads
# is not enough and explicit linking to the underlying thread library # is not enough and explicit linking to the underlying thread library
# is also required (e.g. FreeBSD). But OpenThreads may be built with different # is also required (e.g. FreeBSD). But OpenThreads may be built with different
@@ -114,15 +171,27 @@ IF(CMAKE_SYSTEM MATCHES IRIX)
SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "") SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
ENDIF() ENDIF()
OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making git branches, tags, updating ChangeLog." OFF) OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF)
IF (OSG_MAINTAINER) IF (OSG_MAINTAINER)
#SET(OPENSCENEGRAPH_SVN "trunk")
SET(OPENSCENEGRAPH_SVN "branches")
SET(OPENSCENEGRAPH_BRANCH OpenSceneGraph-${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}) SET(OPENSCENEGRAPH_BRANCH OpenSceneGraph-${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION})
# #
# Provide target for tagging a release # Provide target for tagging a release
# #
SET(GITCOMMAND git) SET(SVNCOMMAND svn)
SET(SVNTRUNKDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk)
SET(SVNTAGDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/tags)
SET(SVNBRANCHDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/branches)
IF (OPENSCENEGRAPH_SVN STREQUAL "trunk")
SET(SVNSOURCEDIR ${SVNTRUNKDIR})
ELSE()
SET(SVNSOURCEDIR ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH})
ENDIF()
IF (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0) IF (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}) SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION})
@@ -130,38 +199,31 @@ IF (OSG_MAINTAINER)
SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}-rc${OPENSCENEGRAPH_RELEASE_CANDIDATE}) SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}-rc${OPENSCENEGRAPH_RELEASE_CANDIDATE})
ENDIF() ENDIF()
SET(RELEASE_MESSAGE "Release ${RELEASE_NAME}")
SET(BRANCH_MESSAGE "Branch ${OPENSCENEGRAPH_BRANCH}")
ADD_CUSTOM_TARGET(tag-test ADD_CUSTOM_TARGET(tag-test
COMMAND echo ${GITCOMMAND} tag -a ${RELEASE_NAME} -m ${RELEASE_MESSAGE} COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
COMMAND echo ${GITCOMMAND} push origin ${RELEASE_NAME}
) )
ADD_CUSTOM_TARGET(tag-run ADD_CUSTOM_TARGET(tag-run
COMMAND ${GITCOMMAND} tag -a ${RELEASE_NAME} -m ${RELEASE_MESSAGE} COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
COMMAND ${GITCOMMAND} push origin ${RELEASE_NAME}
) )
ADD_CUSTOM_TARGET(branch-test ADD_CUSTOM_TARGET(branch-test
COMMAND echo ${GITCOMMAND} branch ${OPENSCENEGRAPH_BRANCH} -m ${BRANCH_MESSAGE} COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
COMMAND echo ${GITCOMMAND} push origin ${OPENSCENEGRAPH_BRANCH}
) )
ADD_CUSTOM_TARGET(branch-run ADD_CUSTOM_TARGET(branch-run
COMMAND ${GITCOMMAND} branch ${OPENSCENEGRAPH_BRANCH} -m ${BRANCH_MESSAGE} COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
COMMAND ${GITCOMMAND} push origin ${OPENSCENEGRAPH_BRANCH}
) )
# #
# Provide target for generating ChangeLog # Provide target for generating ChangeLog
# #
SET(GITLOGFORMAT "%aD%nChecked in by : %an%n%s%b%n") SET(GENERATELOGS svn2cl)
SET(GENERATELOGS git log --pretty=format:${GITLOGFORMAT})
ADD_CUSTOM_TARGET(ChangeLog ADD_CUSTOM_TARGET(ChangeLog
COMMAND ${GENERATELOGS} > ChangeLog COMMAND ${SVNCOMMAND} update
COMMAND ${GENERATELOGS} ${SVNSOURCEDIR}
) )
ENDIF(OSG_MAINTAINER) ENDIF(OSG_MAINTAINER)
@@ -172,12 +234,8 @@ IF(APPLE)
EXECUTE_PROCESS(COMMAND "/usr/bin/sw_vers" "-productVersion" EXECUTE_PROCESS(COMMAND "/usr/bin/sw_vers" "-productVersion"
OUTPUT_VARIABLE OSG_OSX_SDK_NAME OUTPUT_VARIABLE OSG_OSX_SDK_NAME
OUTPUT_STRIP_TRAILING_WHITESPACE) OUTPUT_STRIP_TRAILING_WHITESPACE)
STRING(REPLACE "." ";" MACOS_VERSION_LIST ${OSG_OSX_SDK_NAME}) STRING(SUBSTRING "${OSG_OSX_SDK_NAME}" 0 4 OSG_OSX_SDK_NAME)
LIST(GET MACOS_VERSION_LIST 0 MACOS_VERSION_MAJOR) SET(OSG_OSX_SDK_NAME "macosx${OSG_OSX_SDK_NAME}")
LIST(GET MACOS_VERSION_LIST 1 MACOS_VERSION_MINOR)
LIST(GET MACOS_VERSION_LIST 2 MACOS_VERSION_PATCH)
SET(OSG_OSX_SDK_NAME "macosx${MACOS_VERSION_MAJOR}.${MACOS_VERSION_MINOR}")
# Trying to get CMake to generate an XCode IPhone project, current efforts are to get iphoneos sdk 3.1 working # Trying to get CMake to generate an XCode IPhone project, current efforts are to get iphoneos sdk 3.1 working
# Added option which needs manually setting to select the IPhone SDK for building. We can only have one of the below # Added option which needs manually setting to select the IPhone SDK for building. We can only have one of the below
@@ -228,10 +286,6 @@ ELSE()
ENDIF() ENDIF()
ENDIF() ENDIF()
IF(UNIX AND NOT ANDROID) IF(UNIX AND NOT ANDROID)
# Not sure what this will do on Cygwin and Msys # Not sure what this will do on Cygwin and Msys
# Also, remember OS X X11 is a user installed option so it may not exist. # Also, remember OS X X11 is a user installed option so it may not exist.
@@ -393,228 +447,49 @@ ENDIF()
OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON) OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON)
MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS) MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS)
OPTION(OSG_PROVIDE_READFILE "Set to ON for include/osgDB/ReadFile to provide the osgDB::read*File(() methods. " ON)
OPTION(OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION "Set to ON to use the ref_ptr<> T* operator() output conversion. " ON) OPTION(OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION "Set to ON to use the ref_ptr<> T* operator() output conversion. " ON)
# Map the OPENGL_PROFILE to OSG_GL*_AVAILABLE settings OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." ON)
SET(OPENGL_PROFILE "GL2" CACHE STRING "OpenGL Profile to use, choose from GL1, GL2, GL3, GLES1, GLES2, GLES3") OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." ON)
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." OFF)
IF ((OPENGL_PROFILE STREQUAL "GL1") OR (OPENGL_PROFILE STREQUAL "GL2")) OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." OFF)
OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." ON ) OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." OFF)
ELSE()
OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." OFF )
ENDIF()
IF ((OPENGL_PROFILE STREQUAL "GL2"))
OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." ON )
ELSE()
OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." OFF )
ENDIF()
IF ((OPENGL_PROFILE STREQUAL "GL3") OR (OPENGL_PROFILE STREQUAL "GLCORE"))
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." ON )
ELSE()
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." OFF )
ENDIF()
IF ((OPENGL_PROFILE STREQUAL "GLES1"))
OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." ON )
ELSE()
OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." OFF )
ENDIF()
IF ((OPENGL_PROFILE STREQUAL "GLES2"))
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." ON )
ELSEIF ((OPENGL_PROFILE STREQUAL "GLES3"))
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." ON )
OPTION(OSG_GLES3_AVAILABLE "Set to OFF to disable use of OpenGL ES 3.x functions library." ON )
ELSE()
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." OFF )
OPTION(OSG_GLES3_AVAILABLE "Set to OFF to disable use of OpenGL ES 3.x functions library." OFF )
ENDIF()
OPTION(OSG_GL_LIBRARY_STATIC "Set to ON to statically link with OpenGL/GLES library." OFF) OPTION(OSG_GL_LIBRARY_STATIC "Set to ON to statically link with OpenGL/GLES library." OFF)
SET(OPENGL_egl_LIBRARY CACHE STRING "Set the OpenGL egl library.") SET(OPENGL_egl_LIBRARY CACHE STRING "Set the OpenGL egl library.")
# Map the OSG_GL*_AVAILABLE settings to OSG_GL_* settings # SET(OSG_GL_DISPLAYLISTS_AVAILABLE ${OSG_GL1_AVAILABLE})
IF (OSG_GLES2_AVAILABLE OR OSG_GL3_AVAILABLE) # SET(OSG_GL_MATRICES_AVAILABLE ${OSG_GL1_AVAILABLE})
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." OFF) # SET(OSG_GL_VERTEX_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." OFF) # SET(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." OFF) # SET(OSG_GL_FIXED_FUNCTION_AVAILABLE ${OSG_GL1_AVAILABLE})
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." OFF)
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." OFF)
ELSEIF (OSG_GLES1_AVAILABLE)
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." OFF)
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ON)
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ON)
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ON)
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ON)
ELSE()
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." ON)
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ON)
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ON)
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ON)
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ON)
ENDIF()
IF (OSG_GLES1_AVAILABLE OR OSG_GLES2_AVAILABLE) OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." ${OSG_GL1_AVAILABLE})
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." OFF) OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ${OSG_GL1_AVAILABLE})
ELSE() OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ${OSG_GL1_AVAILABLE})
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." ON) OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ${OSG_GL1_AVAILABLE})
ENDIF() OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ${OSG_GL1_AVAILABLE})
# Map the OSG_GL*_AVAILABLE settings to OpenGL header settings
IF (OSG_GL3_AVAILABLE)
IF (APPLE)
SET(OPENGL_HEADER1 "#include <OpenGL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "#include <OpenGL/gl3.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ELSE()
IF (OPENGL_PROFILE STREQUAL "GLCORE")
IF(WIN32)
FIND_PACKAGE(GLCORE REQUIRED)
ENDIF()
SET(OPENGL_HEADER1 "#include <GL/glcorearb.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ELSE()
SET(OPENGL_HEADER1 "#include <GL3/gl3.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ENDIF()
ENDIF()
ELSEIF(OSG_GLES1_AVAILABLE)
IF (APPLE AND NOT ANDROID)
SET(OPENGL_HEADER1 "#include \"TargetConditionals.h\"" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "#include <OpenGLES/ES1/gl.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ELSE()
SET(OPENGL_HEADER1 "#include <GLES/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ENDIF()
ELSEIF(OSG_GLES2_AVAILABLE)
IF (APPLE AND NOT ANDROID)
SET(OPENGL_HEADER1 "#include \"TargetConditionals.h\"" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "#include <OpenGLES/ES2/gl.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
# TODO: GLES3
ELSE()
SET(OPENGL_HEADER1 "#include <GLES2/gl2.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
# TODO: GLES3
ENDIF()
ELSE()
IF (APPLE)
SET(OPENGL_HEADER1 "#include <OpenGL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ELSE()
SET(OPENGL_HEADER1 "#include <GL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
ENDIF()
ENDIF()
IF (OSG_GL1_AVAILABLE)
SET(OSG_GL1_FEATURES 1)
ELSE()
SET(OSG_GL1_FEATURES 0)
ENDIF()
IF (OSG_GL2_AVAILABLE)
SET(OSG_GL2_FEATURES 1)
ELSE()
SET(OSG_GL2_FEATURES 0)
ENDIF()
IF (OSG_GL3_AVAILABLE)
SET(OSG_GL3_FEATURES 1)
ELSE()
SET(OSG_GL3_FEATURES 0)
ENDIF()
IF (OSG_GLES1_AVAILABLE)
SET(OSG_GLES1_FEATURES 1)
ELSE()
SET(OSG_GLES1_FEATURES 0)
ENDIF()
IF (OSG_GLES2_AVAILABLE)
SET(OSG_GLES2_FEATURES 1)
ELSE()
SET(OSG_GLES2_FEATURES 0)
ENDIF()
IF (OSG_GLES3_AVAILABLE)
SET(OSG_GLES3_FEATURES 1)
ELSE()
SET(OSG_GLES3_FEATURES 0)
ENDIF()
IF(ANDROID)
IF(OSG_GLES1_AVAILABLE)
FIND_PATH(OPENGL_INCLUDE_DIR GLES/gl.h
PATHS
${ANDROID_SYSROOT}/usr/include)
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv1_CM
PATHS
${ANDROID_SYSROOT}/usr/lib)
ELSEIF(OSG_GLES2_AVAILABLE)
FIND_PATH(OPENGL_INCLUDE_DIR GLES2/gl2.h
PATHS
${ANDROID_SYSROOT}/usr/include)
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv2
PATHS
${ANDROID_SYSROOT}/usr/lib)
ENDIF()
ENDIF()
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." ON)
################################################################################ ################################################################################
# Set Config header file # Set Config file
SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config") SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Config.in" CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Config.in"
"${OPENSCENEGRAPH_CONFIG_HEADER}") "${OPENSCENEGRAPH_CONFIG_HEADER}")
SET(OPENSCENEGRAPH_VERSION_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/osg/Version")
################################################################################ CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Version.in"
# Set OpenGL header file "${OPENSCENEGRAPH_VERSION_HEADER}")
INCLUDE (CheckCXXSourceCompiles)
#SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENGL_INCLUDE_DIR})
check_cxx_source_compiles(
"${OPENGL_HEADER1}
${OPENGL_HEADER2}
int main() { GLint64 test; return 0; }"
GL_HEADER_HAS_GLINT64
)
check_cxx_source_compiles(
"${OPENGL_HEADER1}
${OPENGL_HEADER2}
int main() { GLuint64 test; return 0; }"
GL_HEADER_HAS_GLUINT64
)
SET(OPENSCENEGRAPH_OPENGL_HEADER "${PROJECT_BINARY_DIR}/include/osg/GL")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/GL.in"
"${OPENSCENEGRAPH_OPENGL_HEADER}")
# INSTALL_FILES(/include/osg/ FILES "${OPENSCENEGRAPH_CONFIG_HEADER}") # INSTALL_FILES(/include/osg/ FILES "${OPENSCENEGRAPH_CONFIG_HEADER}")
################################################################################
# Set Version header file
SET(OPENSCENEGRAPH_VERSION_HEADER "${PROJECT_BINARY_DIR}/include/osg/Version")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Version.in"
"${OPENSCENEGRAPH_VERSION_HEADER}")
################################################################################ ################################################################################
# Set Version Info resource file # Set Version Info resource file
IF(MSVC) IF(MSVC)
SET(OPENSCENEGRAPH_VERSIONINFO_RC "${PROJECT_BINARY_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc") SET(OPENSCENEGRAPH_VERSIONINFO_RC "${PROJECT_BINARY_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc")
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc.in" CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc.in"
@@ -636,13 +511,6 @@ IF(WIN32 AND NOT ANDROID)
INCLUDE(Find3rdPartyDependencies) INCLUDE(Find3rdPartyDependencies)
ENDIF() ENDIF()
OPTION(OSG_USE_LOCAL_LUA_SOURCE "Enable to use local Lua source when building the lua plugin" ON)
#
# If you want to prevent CMake from picking up on any of the following optional 3rd Party dependencies in CMake 2.8 onwards
# you can use the following style of command line option when invoking Cmake (here illustrating ignoring PythonLibs) :
# cmake -DCMAKE_DISABLE_FIND_PACKAGE_PythonLibs=1 .
#
IF(ANDROID) IF(ANDROID)
ANDROID_3RD_PARTY() ANDROID_3RD_PARTY()
ELSE() ELSE()
@@ -663,10 +531,7 @@ ELSE()
FIND_PACKAGE(LibVNCServer) FIND_PACKAGE(LibVNCServer)
FIND_PACKAGE(OurDCMTK) FIND_PACKAGE(OurDCMTK)
FIND_PACKAGE(FFmpeg) FIND_PACKAGE(FFmpeg)
FIND_PACKAGE(GStreamer COMPONENTS app pbutils)
FIND_PACKAGE(GLIB COMPONENTS gobject)
FIND_PACKAGE(DirectShow) FIND_PACKAGE(DirectShow)
FIND_PACKAGE(SDL2)
FIND_PACKAGE(SDL) FIND_PACKAGE(SDL)
FIND_PACKAGE(Poppler-glib) FIND_PACKAGE(Poppler-glib)
FIND_PACKAGE(RSVG) FIND_PACKAGE(RSVG)
@@ -677,19 +542,6 @@ ELSE()
FIND_PACKAGE(Asio) FIND_PACKAGE(Asio)
ENDIF() ENDIF()
FIND_PACKAGE(ZeroConf) FIND_PACKAGE(ZeroConf)
FIND_PACKAGE(LIBLAS)
IF (NOT(OSG_USE_LOCAL_LUA_SOURCE))
FIND_PACKAGE(Lua52)
IF (NOT (LUA_LIBRARIES AND LUA_INCLUDE_DIR))
FIND_PACKAGE(Lua51)
ENDIF()
ENDIF()
# V8 and Python plugins are tests for linking against these libraries but aren't functionality beyond this.
# FIND_PACKAGE(V8)
# FIND_PACKAGE(PythonLibs)
ENDIF() ENDIF()
IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION LESS 8) IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION LESS 8)
@@ -708,11 +560,11 @@ IF(OSG_USE_QT AND NOT ANDROID)
IF (DESIRED_QT_VERSION) IF (DESIRED_QT_VERSION)
IF (DESIRED_QT_VERSION MATCHES 5) IF (DESIRED_QT_VERSION MATCHES 5)
FIND_PACKAGE(Qt5Widgets) FIND_PACKAGE(Qt5Widgets)
ELSEIF (DESIRED_QT_VERSION MATCHES 4) ELSEIF (DESIRED_QT_VERSION MATCHES 4)
FIND_PACKAGE(Qt4) FIND_PACKAGE(Qt4)
ELSE() ELSE()
FIND_PACKAGE(Qt3) FIND_PACKAGE(Qt3)
ENDIF() ENDIF()
ELSE() ELSE()
@@ -744,13 +596,6 @@ IF(OSG_USE_QT AND NOT ANDROID)
#If we have found Qt5, let's try to top off by getting the webkit as well #If we have found Qt5, let's try to top off by getting the webkit as well
IF ( Qt5Widgets_FOUND ) IF ( Qt5Widgets_FOUND )
FIND_PACKAGE(Qt5WebKitWidgets QUIET) FIND_PACKAGE(Qt5WebKitWidgets QUIET)
IF(COMMAND cmake_policy)
IF(${CMAKE_MAJOR_VERSION} GREATER 2)
# Qt5 qt5_use_modules usage was causing "Policy CMP0043 is not set: Ignore COMPILE_DEFINITIONS_<Config> properties." warnings
cmake_policy(SET CMP0043 NEW)
ENDIF()
ENDIF()
ENDIF() ENDIF()
ENDIF() ENDIF()
@@ -950,10 +795,6 @@ IF(CMAKE_COMPILER_IS_GNUCXX)
# returns too many hits. # returns too many hits.
# FYI, if we do implement GNUCC, then -Wmissing-prototypes in another # FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
# interesting C-specific flag. # interesting C-specific flag.
# Also, there is a bug in gcc 4.0. Under C++, -pedantic will create
# errors instead of warnings for certain issues, including superfluous
# semicolons and commas, and the use of long long. -fpermissive seems
# to be the workaround.
SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused) SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused)
# Previous included -Wformat=2 in OSG_AGGRESSIVE_WARNING_FLAGS but had to remove it due to standard library errors # Previous included -Wformat=2 in OSG_AGGRESSIVE_WARNING_FLAGS but had to remove it due to standard library errors
@@ -973,32 +814,10 @@ ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# remain unset. # remain unset.
IF (APPLE) IF (APPLE)
SET(OSG_CXX_LANGUAGE_STANDARD "C++11" CACHE STRING "set the c++ language standard (C++98 / GNU++98 / C++11) for OSG" ) # set standard lib, clang defaults to c++0x
MARK_AS_ADVANCED(OSG_CXX_LANGUAGE_STANDARD) set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
# remove existing flags set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
REMOVE_CXX_FLAG(-std=c++98) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -stdlib=libstdc++ -Wno-overloaded-virtual -Wno-conversion")
REMOVE_CXX_FLAG(-std=gnu++98)
REMOVE_CXX_FLAG(-std=c++11)
REMOVE_CXX_FLAG(-stdlib=libstdc++)
REMOVE_CXX_FLAG(-stdlib=libc++)
IF(${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "c++98" OR ${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "C++98")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -stdlib=libstdc++")
ELSE()
IF(${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "gnu++98" OR ${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "GNU++98")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++98")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98 -stdlib=libstdc++")
ELSE()
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
ENDIF()
ENDIF()
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-overloaded-virtual -Wno-conversion")
set(WARNING_CFLAGS "") set(WARNING_CFLAGS "")
ENDIF() ENDIF()
ENDIF() ENDIF()
@@ -1062,21 +881,16 @@ IF(APPLE AND NOT ANDROID)
IF(OSG_BUILD_PLATFORM_IPHONE) IF(OSG_BUILD_PLATFORM_IPHONE)
IF(${IPHONE_VERSION_MIN} LESS "7.0") IF(${IPHONE_VERSION_MIN} LESS "7.0")
SET(CMAKE_OSX_ARCHITECTURES "armv6;armv7" CACHE STRING "Build architectures for iOS" FORCE) SET(CMAKE_OSX_ARCHITECTURES "armv6;armv7" CACHE STRING "Build architectures for iOS" FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN} -mno-thumb -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
ELSE() ELSE()
SET(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64" CACHE STRING "Build architectures for iOS" FORCE) SET(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64" CACHE STRING "Build architectures for iOS" FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN} -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
ENDIF() ENDIF()
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN}" FORCE)
ELSE() ELSE()
#simulator uses i386 architectures #simulator uses i386 architectures
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for iOS Simulator" FORCE) SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for iOS Simulator" FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -arch i386 -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE) SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -arch i386 -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=${IPHONE_VERSION_MIN}" FORCE)
ENDIF() ENDIF()
#here we set the specific iphone sdk version. We can only set either device or simulator sdk. So if you want both you currently have to have two seperate projects #here we set the specific iphone sdk version. We can only set either device or simulator sdk. So if you want both you currently have to have two seperate projects
@@ -1104,7 +918,7 @@ IF(APPLE AND NOT ANDROID)
# FORCE is used because the options are not reflected in the UI otherwise. # FORCE is used because the options are not reflected in the UI otherwise.
# Seems like a good place to add version specific compiler flags too. # Seems like a good place to add version specific compiler flags too.
IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE) IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.10") IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for OSX" FORCE) SET(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX "imageio" CACHE STRING "Forced imageio default image plugin for OSX" FORCE)
# 64 Bit Works, i386,ppc is not supported any more # 64 Bit Works, i386,ppc is not supported any more
SET(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE) SET(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE)
@@ -1341,4 +1155,10 @@ ADD_CUSTOM_TARGET(uninstall
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
# #
IF(ANDROID)
message(STATUS "Creating Android Makefile Master files" )
configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.master.in" "${CMAKE_BINARY_DIR}/Android.mk")
configure_file("${OSG_ANDROID_TEMPLATES}/Application.mk.master.in" "${CMAKE_BINARY_DIR}/Application.mk")
configure_file("${OSG_ANDROID_TEMPLATES}/AndroidManifest.xml.master.in" "${CMAKE_BINARY_DIR}/AndroidManifest.xml")
ENDIF(ANDROID)

View File

@@ -143,15 +143,6 @@ ELSE()
NOT _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC) NOT _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1) SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1)
ENDIF() ENDIF()
# MinGW can set both WIN32_INTERLOCKED and GCC_BUILTINS to true which results in compliation errors
IF (_OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED)
# In this case we prefer the GCC_BUILTINS
SET(_OPENTHREADS_ATOMIC_USE_GCC_BUILTINS 1)
SET(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED 0)
ENDIF()
ENDIF() ENDIF()
ENDIF() ENDIF()

View File

@@ -49,13 +49,7 @@ MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBU
MESSAGE("-- Warning Debug ${DEPNAME} not found, using: ${${DEPNAME}_LIBRARY}") MESSAGE("-- Warning Debug ${DEPNAME} not found, using: ${${DEPNAME}_LIBRARY}")
SET(${DEPNAME}_LIBRARY_DEBUG "${${DEPNAME}_LIBRARY}") SET(${DEPNAME}_LIBRARY_DEBUG "${${DEPNAME}_LIBRARY}")
ENDIF(NOT ${DEPNAME}_LIBRARY_DEBUG) ENDIF(NOT ${DEPNAME}_LIBRARY_DEBUG)
SET(${DEPNAME}_LIBRARIES debug ${${DEPNAME}_LIBRARY_DEBUG} optimized ${${DEPNAME}_LIBRARY} )
ENDIF(${DEPNAME}_INCLUDE_DIR AND ${DEPNAME}_LIBRARY) ENDIF(${DEPNAME}_INCLUDE_DIR AND ${DEPNAME}_LIBRARY)
ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX) ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX)
@@ -64,8 +58,8 @@ ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST D
################################################################################################ ################################################################################################
MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN) MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
FIND_DEPENDENCY(TIFF tiff.h "libtiff;tiff" ${OSG_3RDPARTY_BIN} "D" "") FIND_DEPENDENCY(TIFF tiff.h libtiff ${OSG_3RDPARTY_BIN} "D" "_i")
FIND_DEPENDENCY(FREETYPE ft2build.h "freetype;freetype2311MT;freetype234;freetype234MT;freetype235;freetype237;freetype238;freetype244;freetype250;freetype27;" ${OSG_3RDPARTY_BIN} "d" "") FIND_DEPENDENCY(FREETYPE ft2build.h "freetype;freetype2311MT;freetype234;freetype234MT;freetype235;freetype237;freetype238;freetype244;freetype250;" ${OSG_3RDPARTY_BIN} "d" "")
IF(FREETYPE_FOUND) IF(FREETYPE_FOUND)
#forcing subsequent FindFreeType stuff to not search for other variables.... kind of a hack #forcing subsequent FindFreeType stuff to not search for other variables.... kind of a hack
SET(FREETYPE_INCLUDE_DIR_ft2build ${FREETYPE_INCLUDE_DIR} CACHE PATH "" FORCE) SET(FREETYPE_INCLUDE_DIR_ft2build ${FREETYPE_INCLUDE_DIR} CACHE PATH "" FORCE)
@@ -73,7 +67,7 @@ MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
MARK_AS_ADVANCED(FREETYPE_INCLUDE_DIR_ft2build FREETYPE_INCLUDE_DIR_freetype2) MARK_AS_ADVANCED(FREETYPE_INCLUDE_DIR_ft2build FREETYPE_INCLUDE_DIR_freetype2)
SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}") SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
ENDIF(FREETYPE_FOUND) ENDIF(FREETYPE_FOUND)
FIND_DEPENDENCY(CURL curl/curl.h "libcurl;curllib;libcurl_imp" ${OSG_3RDPARTY_BIN} "D" "") FIND_DEPENDENCY(CURL curl/curl.h "libcurl;curllib" ${OSG_3RDPARTY_BIN} "D" "")
FIND_DEPENDENCY(JPEG jpeglib.h "libjpeg;jpeg" ${OSG_3RDPARTY_BIN} "D" "") FIND_DEPENDENCY(JPEG jpeglib.h "libjpeg;jpeg" ${OSG_3RDPARTY_BIN} "D" "")
FIND_DEPENDENCY(GDAL gdal.h "gdal;gdal16" ${OSG_3RDPARTY_BIN} "d" "_i") FIND_DEPENDENCY(GDAL gdal.h "gdal;gdal16" ${OSG_3RDPARTY_BIN} "d" "_i")
FIND_DEPENDENCY(GLUT GL/glut.h glut32 ${OSG_3RDPARTY_BIN} "D" "") FIND_DEPENDENCY(GLUT GL/glut.h glut32 ${OSG_3RDPARTY_BIN} "D" "")
@@ -92,13 +86,11 @@ MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR) MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR)
ENDIF(PNG_FOUND) ENDIF(PNG_FOUND)
ENDIF(ZLIB_FOUND) ENDIF(ZLIB_FOUND)
FIND_DEPENDENCY(LIBXML2 libxml2 "libxml2" ${OSG_3RDPARTY_BIN} "D" "")
# CMakes default module to find libxml2 will not find the in
FIND_DEPENDENCY(LIBXML2 libxml/xpath.h "libxml2" ${OSG_3RDPARTY_BIN} "D" "")
IF(LIBXML2_FOUND) IF(LIBXML2_FOUND)
# The CMAKE find libxml module uses LIBXML2_LIBRARIES -> fill it.... kind of a hack # The CMAKE find libxml module uses LIBXML2_LIBRARIES -> fill it.... kind of a hack
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY} CACHE FILEPATH "LibXML2 library for collada" FORCE) SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY} CACHE FILEPATH "" FORCE)
# SET(LIBXML2_XMLLINT_EXECUTABLE ${OSG_3RDPARTY_BIN}/bin/xmllint.exe CACHE FILEPATH "Path to xmllint executable" FORCE) SET(LIBXML2_XMLLINT_EXECUTABLE ${OSG_3RDPARTY_BIN}/bin/xmllint.exe CACHE FILEPATH "Path to xmllint executable" FORCE)
ENDIF(LIBXML2_FOUND) ENDIF(LIBXML2_FOUND)
#FIND_DEPENDENCY(DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX EXSUFFIX) #FIND_DEPENDENCY(DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX EXSUFFIX)
FIND_Package(NVTT) FIND_Package(NVTT)
@@ -112,7 +104,7 @@ ENDMACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
# this is code for handling optional 3RDPARTY usage # this is code for handling optional 3RDPARTY usage
################################################################################################ ################################################################################################
OPTION(USE_3RDPARTY_BIN "Set to ON to use Mike or Torbens prebuilt dependencies situated side of OpenSceneGraph source. Use OFF for avoiding." ON) OPTION(USE_3RDPARTY_BIN "Set to ON to use Mike prebuilt dependencies situated side of OpenSceneGraph source. Use OFF for avoiding." ON)
IF(USE_3RDPARTY_BIN) IF(USE_3RDPARTY_BIN)
# Check Architecture # Check Architecture

View File

@@ -30,7 +30,7 @@ ELSE()
# AVFoundation exists since 10.7, but only 10.8 has all features necessary for OSG # AVFoundation exists since 10.7, but only 10.8 has all features necessary for OSG
# so check the SDK-setting # so check the SDK-setting
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.10" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.11") IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
# nothing special here ;-) # nothing special here ;-)
ELSE() ELSE()
MESSAGE("AVFoundation disabled for SDK < 10.8") MESSAGE("AVFoundation disabled for SDK < 10.8")

View File

@@ -14,9 +14,7 @@ FIND_PATH(ASIO_INCLUDE_DIR
) )
SET(ASIO_FOUND "NO") SET(ASIO_FOUND "NO")
IF(ASIO_INCLUDE_DIR) FIND_PACKAGE( Boost 1.37 )
FIND_PACKAGE( Boost 1.37 ) IF(Boost_FOUND AND ASIO_INCLUDE_DIR)
IF(Boost_FOUND) SET(ASIO_FOUND "YES")
SET(ASIO_FOUND "YES")
ENDIF()
ENDIF() ENDIF()

View File

@@ -18,9 +18,9 @@
SET( COLLADA_ENV_VAR_AVAILABLE $ENV{COLLADA_DIR} ) SET( COLLADA_ENV_VAR_AVAILABLE $ENV{COLLADA_DIR} )
IF ( COLLADA_ENV_VAR_AVAILABLE ) IF ( COLLADA_ENV_VAR_AVAILABLE )
SET(COLLADA_DOM_ROOT "$ENV{COLLADA_DIR}/dom" CACHE PATH "Location of Collada DOM directory" FORCE) SET(COLLADA_DOM_ROOT "$ENV{COLLADA_DIR}/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
ELSE () ELSE ( COLLADA_ENV_VAR_AVAILABLE )
SET(COLLADA_DOM_ROOT "${ACTUAL_3DPARTY_DIR}/include/1.4/dom" CACHE PATH "Location of Collada DOM directory" FORCE) SET(COLLADA_DOM_ROOT "${ACTUAL_3DPARTY_DIR}/include/1.4/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
ENDIF() ENDIF( COLLADA_ENV_VAR_AVAILABLE )
@@ -28,8 +28,6 @@ IF(APPLE)
SET(COLLADA_BUILDNAME "mac") SET(COLLADA_BUILDNAME "mac")
ELSEIF(MINGW) ELSEIF(MINGW)
SET(COLLADA_BUILDNAME "mingw") SET(COLLADA_BUILDNAME "mingw")
ELSEIF(MSVC14)
SET(COLLADA_BUILDNAME "vc14")
ELSEIF(MSVC12) ELSEIF(MSVC12)
SET(COLLADA_BUILDNAME "vc12") SET(COLLADA_BUILDNAME "vc12")
ELSEIF(MSVC11) ELSEIF(MSVC11)
@@ -55,16 +53,10 @@ FIND_PATH(COLLADA_INCLUDE_DIR dae.h
/usr/local/include /usr/local/include
/usr/local/include/colladadom /usr/local/include/colladadom
/usr/local/include/collada-dom /usr/local/include/collada-dom
/usr/local/include/collada-dom2.4
/usr/local/include/collada-dom2.2
/opt/local/include/collada-dom /opt/local/include/collada-dom
/opt/local/include/collada-dom2.4
/opt/local/include/collada-dom2.2
/usr/include/ /usr/include/
/usr/include/colladadom /usr/include/colladadom
/usr/include/collada-dom /usr/include/collada-dom
/usr/include/collada-dom2.4
/usr/include/collada-dom2.2
/sw/include # Fink /sw/include # Fink
/opt/local/include # DarwinPorts /opt/local/include # DarwinPorts
/opt/csw/include # Blastwave /opt/csw/include # Blastwave
@@ -74,10 +66,9 @@ FIND_PATH(COLLADA_INCLUDE_DIR dae.h
) )
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
NAMES collada_dom collada14dom Collada14Dom libcollada14dom21 libcollada14dom22 collada-dom2.4-dp collada-dom2.4-dp-vc120-mt NAMES collada_dom collada14dom Collada14Dom libcollada14dom21 libcollada14dom22
PATHS PATHS
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4 ${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4
${COLLADA_DOM_ROOT}
$ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4 $ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4
$ENV{COLLADA_DIR}/lib $ENV{COLLADA_DIR}/lib
$ENV{COLLADA_DIR}/lib-dbg $ENV{COLLADA_DIR}/lib-dbg
@@ -98,10 +89,9 @@ FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
) )
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
NAMES collada_dom-d collada14dom-d Collada14Dom-d libcollada14dom21-d libcollada14dom22-d collada-dom2.4-dp-d collada-dom2.4-dp-vc120-mt-d NAMES collada_dom-d collada14dom-d Collada14Dom-d libcollada14dom21-d libcollada14dom22-d
PATHS PATHS
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4-d ${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4-d
${COLLADA_DOM_ROOT}
$ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4-d $ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4-d
$ENV{COLLADA_DIR}/lib $ENV{COLLADA_DIR}/lib
$ENV{COLLADA_DIR}/lib-dbg $ENV{COLLADA_DIR}/lib-dbg
@@ -186,16 +176,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
FIND_PACKAGE(ZLIB) FIND_PACKAGE(ZLIB)
IF (ZLIB_FOUND) IF (ZLIB_FOUND)
IF (ZLIB_LIBRARY_RELEASE) SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY_RELEASE}" CACHE FILEPATH "" FORCE)
ELSE(ZLIB_LIBRARY_RELEASE)
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
ENDIF(ZLIB_LIBRARY_RELEASE)
IF (ZLIB_LIBRARY_DEBUG)
SET(COLLADA_ZLIB_LIBRARY_DEBUG "${ZLIB_LIBRARY_DEBUG}" CACHE FILEPATH "" FORCE)
ELSE(ZLIB_LIBRARY_DEBUG)
SET(COLLADA_ZLIB_LIBRARY_DEBUG "${COLLADA_ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
ENDIF(ZLIB_LIBRARY_DEBUG)
ELSE(ZLIB_FOUND) ELSE(ZLIB_FOUND)
IF(WIN32) IF(WIN32)
FIND_LIBRARY(COLLADA_ZLIB_LIBRARY FIND_LIBRARY(COLLADA_ZLIB_LIBRARY
@@ -261,7 +242,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
) )
FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY
NAMES libboost_filesystem boost_filesystem boost_filesystem-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_55 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_58 boost_filesystem-${COLLADA_BUILDNAME}0-mt-1_62 NAMES libboost_filesystem boost_filesystem boost_filesystem-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_55
PATHS PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME} ${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw ${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
@@ -269,7 +250,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
) )
FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG
NAMES libboost_filesystem-d boost_filesystem-d boost_filesystem-mt-d libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_55 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_58 boost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_62 NAMES libboost_filesystem-d boost_filesystem-d boost_filesystem-mt-d libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_55
PATHS PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME} ${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw ${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
@@ -277,7 +258,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
) )
FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY
NAMES libboost_system boost_system boost_system-mt libboost_system-${COLLADA_BUILDNAME}0-mt libboost_system-${COLLADA_BUILDNAME}0-mt-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-1_55 libboost_system-${COLLADA_BUILDNAME}0-mt-1_58 boost_system-${COLLADA_BUILDNAME}0-mt-1_62 NAMES libboost_system boost_system boost_system-mt libboost_system-${COLLADA_BUILDNAME}0-mt libboost_system-${COLLADA_BUILDNAME}0-mt-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-1_55
PATHS PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME} ${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw ${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
@@ -285,7 +266,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
) )
FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG
NAMES libboost_system-d boost_system-d boost_system-mt-d libboost_system-${COLLADA_BUILDNAME}0-mt-gd libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_55 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_58 boost_system-${COLLADA_BUILDNAME}0-mt-gd-1_62 NAMES libboost_system-d boost_system-d boost_system-mt-d libboost_system-${COLLADA_BUILDNAME}0-mt-gd libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_55
PATHS PATHS
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME} ${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw ${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
@@ -296,20 +277,6 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
SET(COLLADA_FOUND "NO") SET(COLLADA_FOUND "NO")
IF(COLLADA_DYNAMIC_LIBRARY OR COLLADA_STATIC_LIBRARY) IF(COLLADA_DYNAMIC_LIBRARY OR COLLADA_STATIC_LIBRARY)
IF (COLLADA_INCLUDE_DIR) IF (COLLADA_INCLUDE_DIR)
SET(COLLADA_FOUND "YES") SET(COLLADA_FOUND "YES")
ENDIF(COLLADA_INCLUDE_DIR)
FIND_PATH(COLLADA_INCLUDE_DOMANY_DIR 1.4/dom/domAny.h ENDIF(COLLADA_DYNAMIC_LIBRARY OR COLLADA_STATIC_LIBRARY)
${COLLADA_INCLUDE_DIR}
)
IF (COLLADA_INCLUDE_DOMANY_DIR)
SET(COLLADA_DOM_2_4_OR_LATER TRUE)
ELSEIF()
SET(COLLADA_DOM_2_4_OR_LATER FALSE)
ENDIF()
ENDIF()
ENDIF()

View File

@@ -18,10 +18,8 @@ ELSEIF(MSVC90)
SET(FBX_LIBDIR "vs2008") SET(FBX_LIBDIR "vs2008")
ELSEIF(MSVC10) ELSEIF(MSVC10)
SET(FBX_LIBDIR "vs2010") SET(FBX_LIBDIR "vs2010")
ELSEIF(MSVC11) ELSEIF(MSVC11 OR MSVC_VERSION>1700)
SET(FBX_LIBDIR "vs2012") SET(FBX_LIBDIR "vs2012")
ELSEIF(MSVC12 OR MSVC_VERSION>1800)
SET(FBX_LIBDIR "vs2013")
ENDIF() ENDIF()
IF(APPLE) IF(APPLE)
@@ -34,8 +32,6 @@ ELSE()
SET(FBX_LIBDIR ${FBX_LIBDIR}/x86) SET(FBX_LIBDIR ${FBX_LIBDIR}/x86)
ENDIF() ENDIF()
#try to use 2015.1 or 2014.2 version
IF(APPLE) IF(APPLE)
SET(FBX_LIBNAME "libfbxsdk") SET(FBX_LIBNAME "libfbxsdk")
ELSEIF(CMAKE_COMPILER_IS_GNUCXX) ELSEIF(CMAKE_COMPILER_IS_GNUCXX)
@@ -48,14 +44,9 @@ SET(FBX_LIBNAME_DEBUG ${FBX_LIBNAME}d)
SET( FBX_SEARCH_PATHS SET( FBX_SEARCH_PATHS
$ENV{FBX_DIR} $ENV{FBX_DIR}
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2015.1" "$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.1"
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2015.1" "$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.1"
"/Applications/Autodesk/FBX/FBX SDK/2015.1" /Applications/Autodesk/FBXSDK20141
/Applications/Autodesk/FBXSDK20151
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.2"
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.2"
"/Applications/Autodesk/FBX/FBX SDK/2014.2"
/Applications/Autodesk/FBXSDK20142
) )
# search for headers & debug/release libraries # search for headers & debug/release libraries
@@ -83,22 +74,21 @@ ELSE()
ENDIF() ENDIF()
IF(NOT FBX_FOUND) IF(NOT FBX_FOUND)
#try to use 2014.1 version #try to use 2013.3 version
IF(APPLE) IF(APPLE)
SET(FBX_LIBNAME "fbxsdk-2014.1") SET(FBX_LIBNAME "fbxsdk-2013.3-static")
ELSEIF(CMAKE_COMPILER_IS_GNUCXX) ELSEIF(CMAKE_COMPILER_IS_GNUCXX)
SET(FBX_LIBNAME "fbxsdk-2014.1") SET(FBX_LIBNAME "fbxsdk-2013.3-static")
ELSE() ELSE()
SET(FBX_LIBNAME "fbxsdk-2014.1") SET(FBX_LIBNAME "fbxsdk-2013.3-md")
ENDIF() ENDIF()
SET(FBX_LIBNAME_DEBUG ${FBX_LIBNAME}d) SET(FBX_LIBNAME_DEBUG ${FBX_LIBNAME}d)
SET( FBX_SEARCH_PATHS SET( FBX_SEARCH_PATHS
$ENV{FBX_DIR} $ENV{FBX_DIR}
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.1" $ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2013.3
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.1" $ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2013.3
"/Applications/Autodesk/FBX/FBX SDK/2014.1"
/Applications/Autodesk/FBXSDK20141 /Applications/Autodesk/FBXSDK20141
) )
@@ -120,42 +110,3 @@ IF(NOT FBX_FOUND)
ENDIF() ENDIF()
ENDIF() ENDIF()
IF(NOT FBX_FOUND)
#try to use 2013.3 version
IF(APPLE)
SET(FBX_LIBNAME "fbxsdk-2013.3-static")
ELSEIF(CMAKE_COMPILER_IS_GNUCXX)
SET(FBX_LIBNAME "fbxsdk-2013.3-static")
ELSE()
SET(FBX_LIBNAME "fbxsdk-2013.3-md")
ENDIF()
SET(FBX_LIBNAME_DEBUG ${FBX_LIBNAME}d)
SET( FBX_SEARCH_PATHS
$ENV{FBX_DIR}
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2013.3"
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2013.3"
"/Applications/Autodesk/FBX/FBX SDK/2013.3"
/Applications/Autodesk/FBXSDK20133
)
# search for headers & debug/release libraries
FIND_PATH(FBX_INCLUDE_DIR "fbxsdk.h"
PATHS ${FBX_SEARCH_PATHS}
PATH_SUFFIXES "include")
FIND_LIBRARY( FBX_LIBRARY ${FBX_LIBNAME}
PATHS ${FBX_SEARCH_PATHS}
PATH_SUFFIXES "lib/${FBX_LIBDIR}")
FIND_LIBRARY( FBX_LIBRARY_DEBUG ${FBX_LIBNAME_DEBUG}
PATHS ${FBX_SEARCH_PATHS}
PATH_SUFFIXES "lib/${FBX_LIBDIR}")
IF(FBX_LIBRARY AND FBX_LIBRARY_DEBUG AND FBX_INCLUDE_DIR)
SET(FBX_FOUND "YES")
ELSE()
SET(FBX_FOUND "NO")
ENDIF()
ENDIF()

View File

@@ -14,8 +14,8 @@
#In OSG ffmpeg plugin, we used "#include <header.h>" for compatibility with old version of ffmpeg #In OSG ffmpeg plugin, we used "#include <header.h>" for compatibility with old version of ffmpeg
#With the new version of FFmpeg, a file named "time.h" was added that breaks compatability with the old version of ffmpeg. #With the new version of FFmpeg, a file named "time.h" was added that breaks compatability with the old version of ffmpeg.
#We have to search the path which contain the header.h (useful for old version) #We have to search the path which contain the header.h (usefull for old version)
#and search the path which contain the libname/header.h (useful for new version) #and search the path which contain the libname/header.h (usefull for new version)
#Then we need to include ${FFMPEG_libname_INCLUDE_DIRS} (in old version case, use by ffmpeg header and osg plugin code) #Then we need to include ${FFMPEG_libname_INCLUDE_DIRS} (in old version case, use by ffmpeg header and osg plugin code)
# (in new version case, use by ffmpeg header) # (in new version case, use by ffmpeg header)
@@ -32,8 +32,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
PATHS PATHS
${FFMPEG_ROOT}/include ${FFMPEG_ROOT}/include
$ENV{FFMPEG_DIR}/include $ENV{FFMPEG_DIR}/include
${FFMPEG_ROOT}
$ENV{FFMPEG_DIR}
~/Library/Frameworks ~/Library/Frameworks
/Library/Frameworks /Library/Frameworks
/usr/local/include /usr/local/include
@@ -51,8 +49,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
PATHS PATHS
${FFMPEG_ROOT}/include ${FFMPEG_ROOT}/include
$ENV{FFMPEG_DIR}/include $ENV{FFMPEG_DIR}/include
${FFMPEG_ROOT}
$ENV{FFMPEG_DIR}
~/Library/Frameworks ~/Library/Frameworks
/Library/Frameworks /Library/Frameworks
/usr/local/include /usr/local/include
@@ -71,8 +67,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
PATHS PATHS
${FFMPEG_ROOT}/lib ${FFMPEG_ROOT}/lib
$ENV{FFMPEG_DIR}/lib $ENV{FFMPEG_DIR}/lib
${FFMPEG_ROOT}/lib${shortname}
$ENV{FFMPEG_DIR}/lib${shortname}
~/Library/Frameworks ~/Library/Frameworks
/Library/Frameworks /Library/Frameworks
/usr/local/lib /usr/local/lib
@@ -129,14 +123,11 @@ FFMPEG_FIND(LIBAVFORMAT avformat avformat.h)
FFMPEG_FIND(LIBAVDEVICE avdevice avdevice.h) FFMPEG_FIND(LIBAVDEVICE avdevice avdevice.h)
FFMPEG_FIND(LIBAVCODEC avcodec avcodec.h) FFMPEG_FIND(LIBAVCODEC avcodec avcodec.h)
FFMPEG_FIND(LIBAVUTIL avutil avutil.h) FFMPEG_FIND(LIBAVUTIL avutil avutil.h)
FFMPEG_FIND(LIBSWRESAMPLE swresample swresample.h)
FFMPEG_FIND(LIBAVRESAMPLE avresample avresample.h)
FFMPEG_FIND(LIBSWSCALE swscale swscale.h) # not sure about the header to look for here. FFMPEG_FIND(LIBSWSCALE swscale swscale.h) # not sure about the header to look for here.
SET(FFMPEG_FOUND "NO") SET(FFMPEG_FOUND "NO")
# Note we don't check FFMPEG_LIBSWSCALE_FOUND here, it's optional. # Note we don't check FFMPEG_LIBSWSCALE_FOUND here, it's optional.
IF (FFMPEG_LIBAVFORMAT_FOUND AND FFMPEG_LIBAVDEVICE_FOUND AND FFMPEG_LIBAVCODEC_FOUND AND FFMPEG_LIBAVUTIL_FOUND AND STDINT_OK IF (FFMPEG_LIBAVFORMAT_FOUND AND FFMPEG_LIBAVDEVICE_FOUND AND FFMPEG_LIBAVCODEC_FOUND AND FFMPEG_LIBAVUTIL_FOUND AND STDINT_OK)
AND ( FFMPEG_LIBSWRESAMPLE_FOUND OR FFMPEG_LIBAVRESAMPLE_FOUND ) )
SET(FFMPEG_FOUND "YES") SET(FFMPEG_FOUND "YES")

View File

@@ -9,15 +9,6 @@
# #
# Created by Robert Osfield. # Created by Robert Osfield.
# prefer FindFLTK from cmake distribution
if(EXISTS ${CMAKE_ROOT}/Modules/FindFLTK.cmake)
include(${CMAKE_ROOT}/Modules/FindFLTK.cmake)
if(FLTK_FOUND)
return()
endif()
endif()
FIND_PATH(FLTK_INCLUDE_DIR Fl/Fl.H Fl/Fl.h FIND_PATH(FLTK_INCLUDE_DIR Fl/Fl.H Fl/Fl.h
$ENV{FLTK_DIR}/include $ENV{FLTK_DIR}/include
$ENV{FLTK_DIR} $ENV{FLTK_DIR}

View File

@@ -1,64 +1,16 @@
#.rst: # - Locate FreeType library
# FindFreetype
# ------------
#
# Locate FreeType library
#
# This module defines # This module defines
# FREETYPE_LIBRARY, the library to link against
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
# FREETYPE_INCLUDE_DIRS, where to find headers.
# This is the concatenation of the paths:
# FREETYPE_INCLUDE_DIR_ft2build
# FREETYPE_INCLUDE_DIR_freetype2
# #
# :: # $FREETYPE_DIR is an environment variable that would
# # correspond to the ./configure --prefix=$FREETYPE_DIR
# FREETYPE_LIBRARIES, the library to link against # used in building FREETYPE.
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
# FREETYPE_INCLUDE_DIRS, where to find headers.
# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8)
# This is the concatenation of the paths:
# FREETYPE_INCLUDE_DIR_ft2build
# FREETYPE_INCLUDE_DIR_freetype2
#
#
#
# $FREETYPE_DIR is an environment variable that would correspond to the
# ./configure --prefix=$FREETYPE_DIR used in building FREETYPE.
#=============================================================================
# Copyright 2000-2016 Kitware, Inc.
# Copyright 2000-2011 Insight Software Consortium
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
# nor the names of their contributors may be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
# Created by Eric Wing. # Created by Eric Wing.
# Modifications by Alexander Neundorf.
# This file has been renamed to "FindFreetype.cmake" instead of the correct
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
# Ugh, FreeType seems to use some #include trickery which # Ugh, FreeType seems to use some #include trickery which
# makes this harder than it should be. It looks like they # makes this harder than it should be. It looks like they
@@ -68,121 +20,112 @@
# Then from there, they need to set a bunch of #define's # Then from there, they need to set a bunch of #define's
# so you can do something like: # so you can do something like:
# #include FT_FREETYPE_H # #include FT_FREETYPE_H
# Unfortunately, using CMake's mechanisms like include_directories() # Unfortunately, using CMake's mechanisms like INCLUDE_DIRECTORIES()
# wants explicit full paths and this trickery doesn't work too well. # wants explicit full paths and this trickery doesn't work too well.
# I'm going to attempt to cut out the middleman and hope # I'm going to attempt to cut out the middleman and hope
# everything still works. # everything still works.
FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
# Adapted for OpenSceneGraph until the updates here for finding the debug Windows library freetyped are released with CMake
set(FREETYPE_FIND_ARGS
HINTS
ENV FREETYPE_DIR
PATHS PATHS
/usr/X11R6 $ENV{FREETYPE_DIR}
/usr/local/X11R6 NO_DEFAULT_PATH
/usr/local/X11 PATH_SUFFIXES include
/usr/freeware )
ENV GTKMM_BASEPATH FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
[HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path] PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
[HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path] NO_DEFAULT_PATH
PATH_SUFFIXES include
)
FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
PATHS
/usr/local
/usr
/usr/local/X11R6
/usr/local/X11
/usr/X11R6
/usr/X11
/sw
/opt/local
/opt/csw
/opt
/usr/freeware
PATH_SUFFIXES include include/freetype2
) )
find_path( FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
FREETYPE_INCLUDE_DIR_ft2build $ENV{FREETYPE_DIR}/include/freetype2
ft2build.h NO_DEFAULT_PATH
${FREETYPE_FIND_ARGS} )
PATH_SUFFIXES FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
include/freetype2 PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
include NO_DEFAULT_PATH
freetype2 PATH_SUFFIXES include/freetype2
)
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
/usr/local/include/freetype2
/usr/include/freetype2
/usr/local/X11R6/include/freetype2
/usr/local/X11/include/freetype2
/usr/X11R6/include/freetype2
/usr/X11/include/freetype2
/sw/include/freetype2
/opt/local/include/freetype2
/opt/csw/include/freetype2
/opt/include/freetype2
/usr/freeware/include/freetype2
) )
find_path( FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 config/ftheader.h
FREETYPE_INCLUDE_DIR_freetype2 /usr/local/include/freetype2
NAMES /usr/include/freetype2
freetype/config/ftheader.h /usr/local/X11R6/include/freetype2
config/ftheader.h /usr/local/X11/include/freetype2
${FREETYPE_FIND_ARGS} /usr/X11R6/include/freetype2
PATH_SUFFIXES /usr/X11/include/freetype2
include/freetype2 /sw/include/freetype2
include /opt/local/include/freetype2
freetype2 /opt/csw/include/freetype2
/opt/include/freetype2
/usr/freeware/include/freetype2
) )
if(NOT FREETYPE_LIBRARY) FIND_LIBRARY(FREETYPE_LIBRARY
find_library(FREETYPE_LIBRARY_RELEASE NAMES freetype libfreetype freetype219
NAMES PATHS
freetype $ENV{FREETYPE_DIR}
libfreetype NO_DEFAULT_PATH
freetype219 PATH_SUFFIXES lib64 lib
${FREETYPE_FIND_ARGS} )
PATH_SUFFIXES FIND_LIBRARY(FREETYPE_LIBRARY
lib NAMES freetype libfreetype freetype219
) PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
find_library(FREETYPE_LIBRARY_DEBUG NO_DEFAULT_PATH
NAMES PATH_SUFFIXES lib64 lib
freetyped )
libfreetyped FIND_LIBRARY(FREETYPE_LIBRARY
freetype219d NAMES freetype libfreetype freetype219
${FREETYPE_FIND_ARGS} PATHS
PATH_SUFFIXES /usr/local
lib /usr
) /usr/local/X11R6
include(SelectLibraryConfigurations) #OSG Look in CMake Modules dir /usr/local/X11
select_library_configurations(FREETYPE) /usr/X11R6
endif() /usr/X11
/sw
unset(FREETYPE_FIND_ARGS) /opt/local
/opt/csw
# set the user variables /opt
if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2) /usr/freeware
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}") PATH_SUFFIXES lib64 lib
list(REMOVE_DUPLICATES FREETYPE_INCLUDE_DIRS)
endif()
set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
if(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
endif()
if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
file(STRINGS "${FREETYPE_H}" freetype_version_str
REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
unset(FREETYPE_VERSION_STRING)
foreach(VPART MAJOR MINOR PATCH)
foreach(VLINE ${freetype_version_str})
if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
if(FREETYPE_VERSION_STRING)
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
else()
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
endif()
unset(FREETYPE_VERSION_PART)
endif()
endforeach()
endforeach()
endif()
# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs) #OSG Look in CMake Modules dir
find_package_handle_standard_args(
Freetype
REQUIRED_VARS
FREETYPE_LIBRARY
FREETYPE_INCLUDE_DIRS
VERSION_VAR
FREETYPE_VERSION_STRING
) )
mark_as_advanced( IF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
FREETYPE_INCLUDE_DIR_freetype2 SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
FREETYPE_INCLUDE_DIR_ft2build ENDIF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
)
SET(FREETYPE_FOUND "NO")
IF(FREETYPE_LIBRARY AND FREETYPE_INCLUDE_DIRS)
SET(FREETYPE_FOUND "YES")
ENDIF(FREETYPE_LIBRARY AND FREETYPE_INCLUDE_DIRS)

View File

@@ -19,15 +19,6 @@
# This makes the presumption that you are include gdal.h like # This makes the presumption that you are include gdal.h like
# #include "gdal.h" # #include "gdal.h"
# prefer FindGDAL from cmake distribution
if(EXISTS ${CMAKE_ROOT}/Modules/FindGDAL.cmake)
include(${CMAKE_ROOT}/Modules/FindGDAL.cmake)
if(GDAL_FOUND)
return()
endif()
endif()
FIND_PATH(GDAL_INCLUDE_DIR gdal.h FIND_PATH(GDAL_INCLUDE_DIR gdal.h
PATHS PATHS
$ENV{GDAL_DIR} $ENV{GDAL_DIR}

View File

@@ -1,36 +0,0 @@
# Finds the OpenGL Core Profile (cp) header file.
# Looks for glcorearb.h
#
# This script defines the following:
# GLCORE_FOUND // Set to TRUE if glcorearb.h is found
# GLCORE_INCLUDE_DIR // Parent directory of directory (gl, GL3, or OpenGL) containing the CP header.
# GLCORE_GLCOREARB_HEADER // advanced
#
# GLCORE_ROOT can be set as an environment variable or a CMake variable,
# to the parent directory of the gl, GL3, or OpenGL directory containing the CP header.
#
FIND_PATH( GLCORE_GLCOREARB_HEADER
NAMES GL/glcorearb.h GL3/glcorearb.h OpenGL/glcorearb.h gl/glcorearb.h
HINTS ${GLCORE_ROOT}
PATHS ENV GLCORE_ROOT
)
set( GLCORE_INCLUDE_DIR )
if( GLCORE_GLCOREARB_HEADER )
set( GLCORE_INCLUDE_DIR ${GLCORE_GLCOREARB_HEADER} )
endif()
# handle the QUIETLY and REQUIRED arguments and set
# GLCORE_FOUND to TRUE as appropriate
INCLUDE( FindPackageHandleStandardArgs )
FIND_PACKAGE_HANDLE_STANDARD_ARGS( GLCORE
"Set GLCORE_ROOT as the parent of the directory containing the OpenGL core profile header."
GLCORE_INCLUDE_DIR )
MARK_AS_ADVANCED(
GLCORE_INCLUDE_DIR
GLCORE_GLCOREARB_HEADER
)

View File

@@ -1,142 +0,0 @@
# - Try to find Glib and its components (gio, gobject etc)
# Once done, this will define
#
# GLIB_FOUND - system has Glib
# GLIB_INCLUDE_DIRS - the Glib include directories
# GLIB_LIBRARIES - link these to use Glib
#
# Optionally, the COMPONENTS keyword can be passed to find_package()
# and Glib components can be looked for. Currently, the following
# components can be used, and they define the following variables if
# found:
#
# gio: GLIB_GIO_LIBRARIES
# gobject: GLIB_GOBJECT_LIBRARIES
# gmodule: GLIB_GMODULE_LIBRARIES
# gthread: GLIB_GTHREAD_LIBRARIES
#
# Note that the respective _INCLUDE_DIR variables are not set, since
# all headers are in the same directory as GLIB_INCLUDE_DIRS.
#
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
if (WIN32)
find_library(GLIB_LIBRARIES
NAMES glib-2.0
PATHS C:/gstreamer/1.0/x86_64/lib
)
else ()
find_package(PkgConfig)
pkg_check_modules(PC_GLIB QUIET glib-2.0)
find_library(GLIB_LIBRARIES
NAMES glib-2.0
HINTS ${PC_GLIB_LIBDIR}
${PC_GLIB_LIBRARY_DIRS}
)
endif ()
# Files in glib's main include path may include glibconfig.h, which,
# for some odd reason, is normally in $LIBDIR/glib-2.0/include.
get_filename_component(_GLIB_LIBRARY_DIR ${GLIB_LIBRARIES} PATH)
find_path(GLIBCONFIG_INCLUDE_DIR
NAMES glibconfig.h
HINTS ${PC_LIBDIR} ${PC_LIBRARY_DIRS} ${_GLIB_LIBRARY_DIR}
PATH_SUFFIXES glib-2.0/include
)
if (WIN32)
find_path(GLIB_INCLUDE_DIR
NAMES glib.h
PATHS C:/gstreamer/1.0/x86_64/include
PATH_SUFFIXES glib-2.0
)
else()
find_path(GLIB_INCLUDE_DIR
NAMES glib.h
HINTS ${PC_GLIB_INCLUDEDIR}
${PC_GLIB_INCLUDE_DIRS}
PATH_SUFFIXES glib-2.0
)
endif()
if (GLIBCONFIG_INCLUDE_DIR)
set(GLIB_INCLUDE_DIRS ${GLIB_INCLUDE_DIR} ${GLIBCONFIG_INCLUDE_DIR})
# Version detection
file(READ "${GLIBCONFIG_INCLUDE_DIR}/glibconfig.h" GLIBCONFIG_H_CONTENTS)
string(REGEX MATCH "#define GLIB_MAJOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
set(GLIB_VERSION_MAJOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define GLIB_MINOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
set(GLIB_VERSION_MINOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define GLIB_MICRO_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
set(GLIB_VERSION_MICRO "${CMAKE_MATCH_1}")
set(GLIB_VERSION "${GLIB_VERSION_MAJOR}.${GLIB_VERSION_MINOR}.${GLIB_VERSION_MICRO}")
# Additional Glib components. We only look for libraries, as not all of them
# have corresponding headers and all headers are installed alongside the main
# glib ones.
foreach (_component ${GLIB_FIND_COMPONENTS})
if (${_component} STREQUAL "gio")
find_library(GLIB_GIO_LIBRARIES NAMES gio-2.0 HINTS ${_GLIB_LIBRARY_DIR})
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GIO_LIBRARIES)
elseif (${_component} STREQUAL "gobject")
find_library(GLIB_GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${_GLIB_LIBRARY_DIR})
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GOBJECT_LIBRARIES)
elseif (${_component} STREQUAL "gmodule")
find_library(GLIB_GMODULE_LIBRARIES NAMES gmodule-2.0 HINTS ${_GLIB_LIBRARY_DIR})
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GMODULE_LIBRARIES)
elseif (${_component} STREQUAL "gthread")
find_library(GLIB_GTHREAD_LIBRARIES NAMES gthread-2.0 HINTS ${_GLIB_LIBRARY_DIR})
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GTHREAD_LIBRARIES)
elseif (${_component} STREQUAL "gio-unix")
# gio-unix is compiled as part of the gio library, but the include paths
# are separate from the shared glib ones. Since this is currently only used
# by WebKitGTK+ we don't go to extraordinary measures beyond pkg-config.
pkg_check_modules(GIO_UNIX QUIET gio-unix-2.0)
endif ()
endforeach ()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLIB REQUIRED_VARS GLIB_INCLUDE_DIRS GLIB_LIBRARIES ${ADDITIONAL_REQUIRED_VARS}
VERSION_VAR GLIB_VERSION)
mark_as_advanced(
GLIBCONFIG_INCLUDE_DIR
GLIB_GIO_LIBRARIES
GLIB_GIO_UNIX_LIBRARIES
GLIB_GMODULE_LIBRARIES
GLIB_GOBJECT_LIBRARIES
GLIB_GTHREAD_LIBRARIES
GLIB_INCLUDE_DIR
GLIB_INCLUDE_DIRS
GLIB_LIBRARIES
)
else()
endif ()

View File

@@ -1,174 +0,0 @@
# - Try to find GStreamer and its plugins
# Once done, this will define
#
# GSTREAMER_FOUND - system has GStreamer
# GSTREAMER_INCLUDE_DIRS - the GStreamer include directories
# GSTREAMER_LIBRARIES - link these to use GStreamer
#
# Additionally, gstreamer-base is always looked for and required, and
# the following related variables are defined:
#
# GSTREAMER_BASE_INCLUDE_DIRS - gstreamer-base's include directory
# GSTREAMER_BASE_LIBRARIES - link to these to use gstreamer-base
#
# Optionally, the COMPONENTS keyword can be passed to find_package()
# and GStreamer plugins can be looked for. Currently, the following
# plugins can be searched, and they define the following variables if
# found:
#
# gstreamer-app: GSTREAMER_APP_INCLUDE_DIRS and GSTREAMER_APP_LIBRARIES
# gstreamer-audio: GSTREAMER_AUDIO_INCLUDE_DIRS and GSTREAMER_AUDIO_LIBRARIES
# gstreamer-fft: GSTREAMER_FFT_INCLUDE_DIRS and GSTREAMER_FFT_LIBRARIES
# gstreamer-pbutils: GSTREAMER_PBUTILS_INCLUDE_DIRS and GSTREAMER_PBUTILS_LIBRARIES
# gstreamer-video: GSTREAMER_VIDEO_INCLUDE_DIRS and GSTREAMER_VIDEO_LIBRARIES
#
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
# 2. Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
# Helper macro to find a GStreamer plugin (or GStreamer itself)
# _component_prefix is prepended to the _INCLUDE_DIRS and _LIBRARIES variables (eg. "GSTREAMER_AUDIO")
# _pkgconfig_name is the component's pkg-config name (eg. "gstreamer-1.0", or "gstreamer-video-1.0").
# _header is the component's header, relative to the gstreamer-1.0 directory (eg. "gst/gst.h").
# _library is the component's library name (eg. "gstreamer-1.0" or "gstvideo-1.0")
#macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
# pkg_check_modules(PC_${_component_prefix} QUIET ${_pkgconfig_name})
#
# find_path(${_component_prefix}_INCLUDE_DIRS
# NAMES ${_header}
# HINTS ${PC_${_component_prefix}_INCLUDE_DIRS} ${PC_${_component_prefix}_INCLUDEDIR}
# PATH_SUFFIXES gstreamer-1.0
# )
#
# find_library(${_component_prefix}_LIBRARIES
# NAMES ${_library}
# HINTS ${PC_${_component_prefix}_LIBRARY_DIRS} ${PC_${_component_prefix}_LIBDIR}
# )
#endmacro()
if (WIN32)
macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
find_path(${_component_prefix}_INCLUDE_DIRS
NAMES ${_header}
PATHS C:/gstreamer/1.0/x86_64/include
PATH_SUFFIXES gstreamer-1.0
)
find_library(${_component_prefix}_LIBRARIES
NAMES ${_library}
PATHS C:/gstreamer/1.0/x86_64/lib
)
endmacro()
else ()
find_package(PkgConfig)
macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
pkg_check_modules(${_component_prefix} QUIET ${_pkgconfig_name})
# find_path(${_component_prefix}_INCLUDE_DIRS
# NAMES ${_header}
# HINTS ${PC_${_component_prefix}_INCLUDE_DIRS} ${PC_${_component_prefix}_INCLUDEDIR}
# PATH_SUFFIXES gstreamer-1.0
# )
# find_library(${_component_prefix}_LIBRARIES
# NAMES ${_library}
# HINTS ${PC_${_component_prefix}_LIBRARY_DIRS} ${PC_${_component_prefix}_LIBDIR}
# )
endmacro()
endif ()
# ------------------------
# 1. Find GStreamer itself
# ------------------------
# 1.1. Find headers and libraries
FIND_GSTREAMER_COMPONENT(GSTREAMER gstreamer-1.0 gst/gst.h gstreamer-1.0)
FIND_GSTREAMER_COMPONENT(GSTREAMER_BASE gstreamer-base-1.0 gst/gst.h gstbase-1.0)
# 1.2. Check GStreamer version
if (GSTREAMER_INCLUDE_DIRS)
if (EXISTS "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h")
file(READ "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h" GSTREAMER_VERSION_CONTENTS)
string(REGEX MATCH "#define +GST_VERSION_MAJOR +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
set(GSTREAMER_VERSION_MAJOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define +GST_VERSION_MINOR +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
set(GSTREAMER_VERSION_MINOR "${CMAKE_MATCH_1}")
string(REGEX MATCH "#define +GST_VERSION_MICRO +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
set(GSTREAMER_VERSION_MICRO "${CMAKE_MATCH_1}")
set(GSTREAMER_VERSION "${GSTREAMER_VERSION_MAJOR}.${GSTREAMER_VERSION_MINOR}.${GSTREAMER_VERSION_MICRO}")
endif ()
endif ()
if ("${GStreamer_FIND_VERSION}" VERSION_GREATER "${GSTREAMER_VERSION}")
message(FATAL_ERROR "Required version (" ${GStreamer_FIND_VERSION} ") is higher than found version (" ${GSTREAMER_VERSION} ")")
endif ()
# -------------------------
# 2. Find GStreamer plugins
# -------------------------
FIND_GSTREAMER_COMPONENT(GSTREAMER_APP gstreamer-app-1.0 gst/app/gstappsink.h gstapp-1.0)
FIND_GSTREAMER_COMPONENT(GSTREAMER_AUDIO gstreamer-audio-1.0 gst/audio/audio.h gstaudio-1.0)
FIND_GSTREAMER_COMPONENT(GSTREAMER_FFT gstreamer-fft-1.0 gst/fft/gstfft.h gstfft-1.0)
FIND_GSTREAMER_COMPONENT(GSTREAMER_PBUTILS gstreamer-pbutils-1.0 gst/pbutils/pbutils.h gstpbutils-1.0)
FIND_GSTREAMER_COMPONENT(GSTREAMER_VIDEO gstreamer-video-1.0 gst/video/video.h gstvideo-1.0)
# ------------------------------------------------
# 3. Process the COMPONENTS passed to FIND_PACKAGE
# ------------------------------------------------
set(_GSTREAMER_REQUIRED_VARS GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES)
foreach (_component ${GStreamer_FIND_COMPONENTS})
set(_gst_component "GSTREAMER_${_component}")
string(TOUPPER ${_gst_component} _UPPER_NAME)
list(APPEND _GSTREAMER_REQUIRED_VARS ${_UPPER_NAME}_INCLUDE_DIRS ${_UPPER_NAME}_LIBRARIES)
endforeach ()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GStreamer REQUIRED_VARS ${_GSTREAMER_REQUIRED_VARS}
VERSION_VAR GSTREAMER_VERSION)
mark_as_advanced(
GSTREAMER_APP_INCLUDE_DIRS
GSTREAMER_APP_LIBRARIES
GSTREAMER_AUDIO_INCLUDE_DIRS
GSTREAMER_AUDIO_LIBRARIES
GSTREAMER_BASE_INCLUDE_DIRS
GSTREAMER_BASE_LIBRARIES
GSTREAMER_FFT_INCLUDE_DIRS
GSTREAMER_FFT_LIBRARIES
GSTREAMER_INCLUDE_DIRS
GSTREAMER_LIBRARIES
GSTREAMER_PBUTILS_INCLUDE_DIRS
GSTREAMER_PBUTILS_LIBRARIES
GSTREAMER_VIDEO_INCLUDE_DIRS
GSTREAMER_VIDEO_LIBRARIES
)

View File

@@ -9,15 +9,6 @@
# #
# Created by Robert Osfield. # Created by Robert Osfield.
# prefer FindJasper from cmake distribution
if(EXISTS ${CMAKE_ROOT}/Modules/FindJasper.cmake)
include(${CMAKE_ROOT}/Modules/FindJasper.cmake)
if(JASPER_FOUND)
return()
endif()
endif()
FIND_PATH(JASPER_INCLUDE_DIR jasper/jasper.h FIND_PATH(JASPER_INCLUDE_DIR jasper/jasper.h
$ENV{JASPER_DIR}/include $ENV{JASPER_DIR}/include
$ENV{JASPER_DIR}/src/libjasper/include $ENV{JASPER_DIR}/src/libjasper/include

View File

@@ -1,107 +0,0 @@
#---
# File: FindLIBLAS.cmake
#
# Find the native LIBLAS includes and library
#
# LIBLAS_INCLUDE_DIRS - where to find liblas's includes.
# LIBLAS_LIBRARIES - List of libraries when using liblas.
# LIBLAS_FOUND - True if liblas found.
#---
# Set the include dir:
find_path(LIBLAS_INCLUDE_DIR liblas/liblas.hpp)
# Macro for setting libraries:
macro(FIND_LIBLAS_LIBRARY MYLIBRARY MYLIBRARYNAME)
find_library(
"${MYLIBRARY}_DEBUG"
NAMES "${MYLIBRARYNAME}${CMAKE_DEBUG_POSTFIX}"
PATHS
${LIBLAS_DIR}/lib/Debug
${LIBLAS_DIR}/lib64/Debug
${LIBLAS_DIR}/lib
${LIBLAS_DIR}/lib64
$ENV{LIBLAS_DIR}/lib/debug
$ENV{LIBLAS_DIR}/lib64/debug
NO_DEFAULT_PATH
)
find_library(
"${MYLIBRARY}_DEBUG"
NAMES "${MYLIBRARYNAME}${CMAKE_DEBUG_POSTFIX}"
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/local/lib64
/usr/lib
/usr/lib64
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;LIBLAS_ROOT]/lib
/usr/freeware/lib64
)
find_library(
${MYLIBRARY}
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
PATHS
${LIBLAS_DIR}/lib/Release
${LIBLAS_DIR}/lib64/Release
${LIBLAS_DIR}/lib
${LIBLAS_DIR}/lib64
$ENV{LIBLAS_DIR}/lib/Release
$ENV{LIBLAS_DIR}/lib64/Release
$ENV{LIBLAS_DIR}/lib
$ENV{LIBLAS_DIR}/lib64
$ENV{LIBLAS_DIR}
$ENV{LIBLASDIR}/lib
$ENV{LIBLASDIR}/lib64
$ENV{LIBLASDIR}
$ENV{LIBLAS_ROOT}/lib
$ENV{LIBLAS_ROOT}/lib64
NO_DEFAULT_PATH
)
find_library(
${MYLIBRARY}
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
PATHS
~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/local/lib64
/usr/lib
/usr/lib64
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;LIBLAS_ROOT]/lib
/usr/freeware/lib64
)
if( NOT ${MYLIBRARY}_DEBUG )
if( MYLIBRARY )
set( ${MYLIBRARY}_DEBUG ${MYLIBRARY} )
endif(MYLIBRARY)
endif( NOT ${MYLIBRARY}_DEBUG )
endmacro(FIND_LIBLAS_LIBRARY LIBRARY LIBRARYNAME)
FIND_LIBLAS_LIBRARY(LIBLAS_LIBRARY las)
FIND_LIBLAS_LIBRARY(LIBLASC_LIBRARY las_c)
set(LIBLAS_FOUND "NO")
if(LIBLAS_LIBRARY AND LIBLASC_LIBRARY AND LIBLAS_INCLUDE_DIR)
FIND_PACKAGE(Boost) # used by LIBLAS
if(Boost_FOUND)
set(LIBLAS_LIBRARIES ${LIBLAS_LIBRARY} ${LIBLASC_LIBRARY} )
set(LIBLAS_FOUND "YES")
endif()
endif()

View File

@@ -1,83 +0,0 @@
# Locate Lua library
# This module defines
# LUA51_FOUND, if false, do not try to link to Lua
# LUA_LIBRARIES
# LUA_INCLUDE_DIR, where to find lua.h
# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
#
# Note that the expected include convention is
# #include "lua.h"
# and not
# #include <lua/lua.h>
# This is because, the lua location is not standardized and may exist
# in locations other than lua/
#=============================================================================
# Copyright 2007-2009 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
find_path(LUA_INCLUDE_DIR lua.h
HINTS
ENV LUA_DIR
PATH_SUFFIXES include/lua52 include/lua5.2 include/lua include
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw # Fink
/opt/local # DarwinPorts
/opt/csw # Blastwave
/opt
)
find_library(LUA_LIBRARY
NAMES lua52 lua5.2 lua-5.2 lua
HINTS
ENV LUA_DIR
PATH_SUFFIXES lib
PATHS
~/Library/Frameworks
/Library/Frameworks
/sw
/opt/local
/opt/csw
/opt
)
if(LUA_LIBRARY)
# include the math library for Unix
if(UNIX AND NOT APPLE)
find_library(LUA_MATH_LIBRARY m)
set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
# For Windows and Mac, don't need to explicitly include the math library
else()
set( LUA_LIBRARIES "${LUA_LIBRARY}" CACHE STRING "Lua Libraries")
endif()
endif()
if(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h")
file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua .+\"")
string(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
unset(lua_version_str)
endif()
include(FindPackageHandleStandardArgs)
# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
# all listed variables are TRUE
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua52
REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
VERSION_VAR LUA_VERSION_STRING)
mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARIES LUA_LIBRARY LUA_MATH_LIBRARY)

View File

@@ -98,85 +98,6 @@ FIND_LIBRARY(NVCORE_LIBRARY_DEBUG
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
) )
# NVTHREAD
FIND_LIBRARY(NVTHREAD_LIBRARY
NAMES nvthread
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
FIND_LIBRARY(NVTHREAD_LIBRARY_DEBUG
NAMES nvthread_d
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
# SQUISH
FIND_LIBRARY(NVSQUISH_LIBRARY
NAMES squish
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
FIND_LIBRARY(NVSQUISH_LIBRARY_DEBUG
NAMES squish_d
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
# BC6H
FIND_LIBRARY(NVBC6H_LIBRARY
NAMES bc6h
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
FIND_LIBRARY(NVBC6H_LIBRARY_DEBUG
NAMES bc6h_d
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
# BC7
FIND_LIBRARY(NVBC7_LIBRARY
NAMES bc7
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)
FIND_LIBRARY(NVBC7_LIBRARY_DEBUG
NAMES bc7_d
PATHS
/usr/local
/usr
$ENV{NVTT_DIR}
${3rdPartyRoot}
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
)

View File

@@ -9,7 +9,6 @@
# #
# Created by Robert Osfield. # Created by Robert Osfield.
FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h
$ENV{OPENEXR_DIR}/include $ENV{OPENEXR_DIR}/include
$ENV{OPENEXR_DIR} $ENV{OPENEXR_DIR}
@@ -24,41 +23,78 @@ FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h
/usr/freeware/include /usr/freeware/include
) )
# Macro to find exr libraries (deduplicating search paths) FIND_LIBRARY(OPENEXR_IlmIlf_LIBRARY
# example: OPENEXR_FIND_VAR(OPENEXR_IlmImf_LIBRARY IlmImf) NAMES IlmImf
MACRO(OPENEXR_FIND_VAR varname libname) PATHS
FIND_LIBRARY( ${varname} $ENV{OPENEXR_DIR}/lib
NAMES ${libname} $ENV{OPENEXR_DIR}
PATHS ~/Library/Frameworks
$ENV{OPENEXR_DIR}/lib /Library/Frameworks
$ENV{OPENEXR_DIR} /usr/local/lib
~/Library/Frameworks /usr/lib
/Library/Frameworks /sw/lib
/usr/local/lib /opt/local/lib
/usr/lib /opt/csw/lib
/sw/lib /opt/lib
/opt/local/lib /usr/freeware/lib64
/opt/csw/lib )
/opt/lib
/usr/freeware/lib64
)
ENDMACRO(OPENEXR_FIND_VAR)
# Macro to find exr libraries (and debug versions) FIND_LIBRARY(OPENEXR_IlmThread_LIBRARY
# example: OPENEXR_FIND(IlmImf) NAMES IlmThread
MACRO(OPENEXR_FIND libname) PATHS
OPENEXR_FIND_VAR(OPENEXR_${libname}_LIBRARY ${libname}) $ENV{OPENEXR_DIR}/lib
OPENEXR_FIND_VAR(OPENEXR_${libname}_LIBRARY_DEBUG ${libname}d) $ENV{OPENEXR_DIR}
ENDMACRO(OPENEXR_FIND) ~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
OPENEXR_FIND(IlmImf)
OPENEXR_FIND(IlmThread) FIND_LIBRARY(OPENEXR_Iex_LIBRARY
OPENEXR_FIND(Iex) NAMES Iex
OPENEXR_FIND(Half) PATHS
$ENV{OPENEXR_DIR}/lib
$ENV{OPENEXR_DIR}
~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
FIND_LIBRARY(OPENEXR_Half_LIBRARY
NAMES Half
PATHS
$ENV{OPENEXR_DIR}/lib
$ENV{OPENEXR_DIR}
~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
SET(OPENEXR_FOUND "NO") SET(OPENEXR_FOUND "NO")
IF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmImf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY) IF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmIlf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)
SET(OPENEXR_LIBRARIES ${OPENEXR_IlmImf_LIBRARY} ${OPENEXR_IlmThread_LIBRARY} ${OPENEXR_Half_LIBRARY} ${OPENEXR_Iex_LIBRARY} ) SET(OPENEXR_LIBRARIES
SET(OPENEXR_LIBRARIES_VARS OPENEXR_IlmImf_LIBRARY OPENEXR_IlmThread_LIBRARY OPENEXR_Half_LIBRARY OPENEXR_Iex_LIBRARY ) ${OPENEXR_IlmIlf_LIBRARY}
${OPENEXR_IlmThread_LIBRARY}
${OPENEXR_Half_LIBRARY}
${OPENEXR_Iex_LIBRARY}
)
SET(OPENEXR_FOUND "YES") SET(OPENEXR_FOUND "YES")
ENDIF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmImf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY) ENDIF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmIlf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)

View File

@@ -17,16 +17,6 @@
# #
# Created by Eric Wing. # Created by Eric Wing.
# prefer FindOpenThreads from cmake distribution
if(EXISTS ${CMAKE_ROOT}/Modules/FindOpenThreads.cmake)
include(${CMAKE_ROOT}/Modules/FindOpenThreads.cmake)
if(OPENTHREADS_FOUND)
return()
endif()
endif()
# Header files are presumed to be included like # Header files are presumed to be included like
# #include <OpenThreads/Thread> # #include <OpenThreads/Thread>

View File

@@ -9,7 +9,6 @@
# #
# Created by Eric Wing. # Created by Eric Wing.
# QuickTime on OS X looks different than QuickTime for Windows, # QuickTime on OS X looks different than QuickTime for Windows,
# so I am going to case the two. # so I am going to case the two.
@@ -65,7 +64,7 @@ ELSE()
ENDIF() ENDIF()
# Disable quicktime for >= 10.7, as it's officially deprecated # Disable quicktime for >= 10.7, as it's officially deprecated
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.7" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.10") IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.7" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
MESSAGE("disabling quicktime because it's not supported by the selected SDK ${OSG_OSX_SDK_NAME}") MESSAGE("disabling quicktime because it's not supported by the selected SDK ${OSG_OSX_SDK_NAME}")
SET(QUICKTIME_FOUND "NO") SET(QUICKTIME_FOUND "NO")
ENDIF() ENDIF()

View File

@@ -1,178 +0,0 @@
# - Locate SDL library
# This module defines
# SDL2_LIBRARY, the name of the library to link against
# SDL2_FOUND, if false, do not try to link to SDL
# SDL2_INCLUDE_DIR, where to find SDL.h
# SDL2_VERSION_STRING, human-readable string containing the version of SDL
#
# This module responds to the flag:
# SDL2_BUILDING_LIBRARY
# If this is defined, then no SDL2_main will be linked in because
# only applications need main().
# Otherwise, it is assumed you are building an application and this
# module will attempt to locate and set the proper link flags
# as part of the returned SDL2_LIBRARY variable.
#
# Don't forget to include SDLmain.h and SDLmain.m your project for the
# OS X framework based version. (Other versions link to -lSDLmain which
# this module will try to find on your behalf.) Also for OS X, this
# module will automatically add the -framework Cocoa on your behalf.
#
#
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
# and no SDL2_LIBRARY, it means CMake did not find your SDL library
# (SDL.dll, libsdl.so, SDL.framework, etc).
# Set SDL2_LIBRARY_TEMP to point to your SDL library, and configure again.
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
# as appropriate. These values are used to generate the final SDL2_LIBRARY
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
#
#
# $SDLDIR is an environment variable that would
# correspond to the ./configure --prefix=$SDLDIR
# used in building SDL.
# l.e.galup 9-20-02
#
# Modified by Eric Wing.
# Added code to assist with automated building by using environmental variables
# and providing a more controlled/consistent search behavior.
# Added new modifications to recognize OS X frameworks and
# additional Unix paths (FreeBSD, etc).
# Also corrected the header search path to follow "proper" SDL guidelines.
# Added a search for SDLmain which is needed by some platforms.
# Added a search for threads which is needed by some platforms.
# Added needed compile switches for MinGW.
#
# On OSX, this will prefer the Framework version (if found) over others.
# People will have to manually change the cache values of
# SDL2_LIBRARY to override this selection or set the CMake environment
# CMAKE_INCLUDE_PATH to modify the search paths.
#
# Note that the header path has changed from SDL/SDL.h to just SDL.h
# This needed to change because "proper" SDL convention
# is #include "SDL.h", not <SDL/SDL.h>. This is done for portability
# reasons because not all systems place things in SDL/ (see FreeBSD).
#=============================================================================
# Copyright 2003-2009 Kitware, Inc.
# Copyright 2012 Benjamin Eikel
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
find_path(SDL2_INCLUDE_DIR SDL.h
HINTS
ENV SDL2DIR
PATH_SUFFIXES include/SDL2
)
# SDL-1.1 is the name used by FreeBSD ports...
# don't confuse it for the version number.
find_library(SDL2_LIBRARY_TEMP
NAMES SDL2
HINTS
ENV SDL2DIR
PATH_SUFFIXES lib
)
if(NOT SDL2_BUILDING_LIBRARY)
if(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
# Non-OS X framework versions expect you to also dynamically link to
# SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms
# seem to provide SDLmain for compatibility even though they don't
# necessarily need it.
find_library(SDL2MAIN_LIBRARY
NAMES SDL2main
HINTS
ENV SDL2DIR
PATH_SUFFIXES lib
PATHS
/sw
/opt/local
/opt/csw
/opt
)
endif()
endif()
# SDL may require threads on your system.
# The Apple build may not need an explicit flag because one of the
# frameworks may already provide it.
# But for non-OSX systems, I will use the CMake Threads package.
if(NOT APPLE)
find_package(Threads)
endif()
# MinGW needs an additional library, mwindows
# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows
# (Actually on second look, I think it only needs one of the m* libraries.)
if(MINGW)
set(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
endif()
if(SDL2_LIBRARY_TEMP)
# For SDLmain
if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY)
list(FIND SDL2_LIBRARY_TEMP "${SDL2MAIN_LIBRARY}" _SDL2_MAIN_INDEX)
if(_SDL2_MAIN_INDEX EQUAL -1)
set(SDL2_LIBRARY_TEMP "${SDL2MAIN_LIBRARY}" ${SDL2_LIBRARY_TEMP})
endif()
unset(_SDL2_MAIN_INDEX)
endif()
# For OS X, SDL uses Cocoa as a backend so it must link to Cocoa.
# CMake doesn't display the -framework Cocoa string in the UI even
# though it actually is there if I modify a pre-used variable.
# I think it has something to do with the CACHE STRING.
# So I use a temporary variable until the end so I can set the
# "real" variable in one-shot.
if(APPLE)
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
endif()
# For threads, as mentioned Apple doesn't need this.
# In fact, there seems to be a problem if I used the Threads package
# and try using this line, so I'm just skipping it entirely for OS X.
if(NOT APPLE)
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
endif()
# For MinGW library
if(MINGW)
set(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
endif()
# Set the final string here so the GUI reflects the final state.
set(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
set(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
endif()
if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL2_version.h")
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+[0-9]+$")
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+[0-9]+$")
string(REGEX REPLACE "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}")
string(REGEX REPLACE "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}")
set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH})
unset(SDL2_VERSION_MAJOR_LINE)
unset(SDL2_VERSION_MINOR_LINE)
unset(SDL2_VERSION_PATCH_LINE)
unset(SDL2_VERSION_MAJOR)
unset(SDL2_VERSION_MINOR)
unset(SDL2_VERSION_PATCH)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR
VERSION_VAR SDL2_VERSION_STRING)

View File

@@ -1,45 +0,0 @@
# Locate V8
# This module defines
# V8_LIBRARY
# V8_FOUND, if false, do not try to link to gdal
# V8_INCLUDE_DIR, where to find the headers
#
# $V8_DIR is an environment variable that would
# correspond to the ./configure --prefix=$V8_DIR
#
# Created by Robert Osfield (based on FindFLTK.cmake)
FIND_PATH(V8_INCLUDE_DIR v8.h
$ENV{V8_DIR}/include
$ENV{V8_DIR}
~/Library/Frameworks
/Library/Frameworks
/usr/local/include
/usr/include
/sw/include # Fink
/opt/local/include # DarwinPorts
/opt/csw/include # Blastwave
/opt/include
/usr/freeware/include
)
FIND_LIBRARY(V8_LIBRARY
NAMES v8 libv8
PATHS
$ENV{V8_DIR}/lib
$ENV{V8_DIR}
~/Library/Frameworks
/Library/Frameworks
/usr/local/lib
/usr/lib
/sw/lib
/opt/local/lib
/opt/csw/lib
/opt/lib
/usr/freeware/lib64
)
SET(V8_FOUND "NO")
IF(V8_LIBRARY AND V8_INCLUDE_DIR)
SET(V8_FOUND "YES")
ENDIF()

View File

@@ -10,16 +10,6 @@
# #
# Created by Ulrich Hertlein. # Created by Ulrich Hertlein.
# prefer FindZLIB from cmake distribution
if(EXISTS ${CMAKE_ROOT}/Modules/FindZLIB.cmake)
include(${CMAKE_ROOT}/Modules/FindZLIB.cmake)
if(ZLIB_FOUND)
return()
endif()
endif()
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
$ENV{ZLIB_DIR}/include $ENV{ZLIB_DIR}/include
$ENV{ZLIB_DIR} $ENV{ZLIB_DIR}

View File

@@ -25,6 +25,14 @@ IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
HANDLE_MSVC_DLL() HANDLE_MSVC_DLL()
ENDIF() ENDIF()
IF(ANDROID)
INSTALL (
FILES ${TARGET_H}
DESTINATION ${INSTALL_INCDIR}/${LIB_NAME}
COMPONENT libopenscenegraph-dev
)
ELSE(ANDROID)
INSTALL( INSTALL(
TARGETS ${LIB_NAME} TARGETS ${LIB_NAME}
RUNTIME DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph RUNTIME DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph
@@ -32,12 +40,6 @@ INSTALL(
ARCHIVE DESTINATION ${INSTALL_ARCHIVEDIR} COMPONENT libopenscenegraph-dev ARCHIVE DESTINATION ${INSTALL_ARCHIVEDIR} COMPONENT libopenscenegraph-dev
) )
IF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
GET_TARGET_PROPERTY(PREFIX ${LIB_NAME} PREFIX)
INSTALL(FILES ${OUTPUT_BINDIR}/${PREFIX}${LIB_NAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph CONFIGURATIONS RelWithDebInfo)
INSTALL(FILES ${OUTPUT_BINDIR}/${PREFIX}${LIB_NAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph CONFIGURATIONS Debug)
ENDIF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
IF(NOT OSG_COMPILE_FRAMEWORKS) IF(NOT OSG_COMPILE_FRAMEWORKS)
INSTALL ( INSTALL (
FILES ${TARGET_H} FILES ${TARGET_H}
@@ -57,3 +59,4 @@ ELSE()
# MESSAGE("${OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR}") # MESSAGE("${OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR}")
ENDIF() ENDIF()
ENDIF(ANDROID)

View File

@@ -67,7 +67,7 @@ MACRO(ANDROID_3RD_PARTY)
#JPEG #JPEG
################################################ ################################################
FIND_PATH(JPEG_INCLUDE_DIR Android.mk FIND_PATH(JPEG_INCLUDE_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/libjpeg NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/libjpeg
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libjpeg") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libjpeg")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${JPEG_INCLUDE_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${JPEG_INCLUDE_DIR}/Android.mk \n")
@@ -82,7 +82,7 @@ MACRO(ANDROID_3RD_PARTY)
#PNG #PNG
################################################ ################################################
FIND_PATH(PNG_INCLUDE_DIR Android.mk FIND_PATH(PNG_INCLUDE_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/libpng NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/libpng
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libpng") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libpng")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${PNG_INCLUDE_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${PNG_INCLUDE_DIR}/Android.mk \n")
@@ -97,7 +97,7 @@ MACRO(ANDROID_3RD_PARTY)
#GIF #GIF
################################################ ################################################
FIND_PATH(GIFLIB_INCLUDE_DIR Android.mk FIND_PATH(GIFLIB_INCLUDE_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/giflib NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/giflib
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libgif") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libgif")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${GIFLIB_INCLUDE_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${GIFLIB_INCLUDE_DIR}/Android.mk \n")
@@ -112,7 +112,7 @@ MACRO(ANDROID_3RD_PARTY)
#TIF #TIF
################################################ ################################################
FIND_PATH(TIFF_INCLUDE_DIR Android.mk FIND_PATH(TIFF_INCLUDE_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/libtiff NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/libtiff
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libtiff") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libtiff")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${TIFF_INCLUDE_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${TIFF_INCLUDE_DIR}/Android.mk \n")
@@ -142,7 +142,7 @@ MACRO(ANDROID_3RD_PARTY)
#CURL #CURL
################################################ ################################################
FIND_PATH(CURL_DIR Android.mk FIND_PATH(CURL_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/curl NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/curl
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libcurl") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libcurl")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${CURL_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${CURL_DIR}/Android.mk \n")
@@ -159,11 +159,11 @@ MACRO(ANDROID_3RD_PARTY)
#FREETYPE #FREETYPE
################################################ ################################################
FIND_PATH(FREETYPE_DIR Android.mk FIND_PATH(FREETYPE_DIR Android.mk
${CMAKE_SOURCE_DIR}/3rdparty/freetype NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/freetype
) )
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libft2") #set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libft2")
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${FREETYPE_DIR}/Android.mk \n") #set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${FREETYPE_DIR}/Android.mk \n")
set(FREETYPE_INCLUDE_DIRS ${FREETYPE_DIR}/include ${FREETYPE_DIR}/include/freetype/config) set(FREETYPE_INCLUDE_DIRS "${FREETYPE_DIR}/include ${FREETYPE_DIR}/include/freetype/config")
if(FREETYPE_DIR) if(FREETYPE_DIR)
message(STATUS "FREETYPE found ${FREETYPE_DIR}" ) message(STATUS "FREETYPE found ${FREETYPE_DIR}" )
set(FREETYPE_FOUND "Yes") set(FREETYPE_FOUND "Yes")
@@ -175,7 +175,7 @@ MACRO(ANDROID_3RD_PARTY)
#GDAL #GDAL
################################################ ################################################
FIND_PATH(GDAL_DIR gdal.h FIND_PATH(GDAL_DIR gdal.h
${CMAKE_SOURCE_DIR}/3rdparty/gdal/include NO_CMAKE_FIND_ROOT_PATH ${CMAKE_SOURCE_DIR}/3rdparty/gdal/include
) )
set(GDAL_INCLUDE_DIR "${GDAL_DIR}") set(GDAL_INCLUDE_DIR "${GDAL_DIR}")
if(GDAL_DIR) if(GDAL_DIR)

View File

@@ -4,7 +4,7 @@
# full path of the library name. in order to differentiate release and debug, this macro get the # full path of the library name. in order to differentiate release and debug, this macro get the
# NAME of the variables, so the macro gets as arguments the target name and the following list of parameters # NAME of the variables, so the macro gets as arguments the target name and the following list of parameters
# is intended as a list of variable names each one containing the path of the libraries to link to # is intended as a list of variable names each one containing the path of the libraries to link to
# The existence of a variable name with _DEBUG appended is tested and, in case it' s value is used # The existance of a variable name with _DEBUG appended is tested and, in case it' s value is used
# for linking to when in debug mode # for linking to when in debug mode
# the content of this library for linking when in debugging # the content of this library for linking when in debugging
####################################################################################################### #######################################################################################################
@@ -43,11 +43,7 @@ SET(VALID_BUILDER_VERSION OFF)
MACRO(LINK_WITH_VARIABLES TRGTNAME) MACRO(LINK_WITH_VARIABLES TRGTNAME)
FOREACH(varname ${ARGN}) FOREACH(varname ${ARGN})
IF(${varname}_DEBUG) IF(${varname}_DEBUG)
IF(${varname}_RELEASE) TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}}" debug "${${varname}_DEBUG}")
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}_RELEASE}" debug "${${varname}_DEBUG}")
ELSE(${varname}_RELEASE)
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}}" debug "${${varname}_DEBUG}")
ENDIF(${varname}_RELEASE)
ELSE(${varname}_DEBUG) ELSE(${varname}_DEBUG)
TARGET_LINK_LIBRARIES(${TRGTNAME} "${${varname}}" ) TARGET_LINK_LIBRARIES(${TRGTNAME} "${${varname}}" )
ENDIF(${varname}_DEBUG) ENDIF(${varname}_DEBUG)
@@ -127,9 +123,9 @@ MACRO(SETUP_LINK_LIBRARIES)
FOREACH(LINKLIB ${TARGET_ADDED_LIBRARIES}) FOREACH(LINKLIB ${TARGET_ADDED_LIBRARIES})
SET(TO_INSERT TRUE) SET(TO_INSERT TRUE)
FOREACH (value ${TARGET_COMMON_LIBRARIES}) FOREACH (value ${TARGET_COMMON_LIBRARIES})
IF ("${value}" STREQUAL "${LINKLIB}") IF (${value} STREQUAL ${LINKLIB})
SET(TO_INSERT FALSE) SET(TO_INSERT FALSE)
ENDIF ("${value}" STREQUAL "${LINKLIB}") ENDIF (${value} STREQUAL ${LINKLIB})
ENDFOREACH (value ${TARGET_COMMON_LIBRARIES}) ENDFOREACH (value ${TARGET_COMMON_LIBRARIES})
IF(TO_INSERT) IF(TO_INSERT)
LIST(APPEND TARGET_LIBRARIES ${LINKLIB}) LIST(APPEND TARGET_LIBRARIES ${LINKLIB})
@@ -216,10 +212,9 @@ ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
########################################################################################################## ##########################################################################################################
MACRO(SETUP_LIBRARY LIB_NAME) MACRO(SETUP_LIBRARY LIB_NAME)
IF(GLCORE_FOUND) IF(ANDROID)
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} ) SETUP_ANDROID_LIBRARY(${LIB_NAME})
ENDIF() ELSE()
SET(TARGET_NAME ${LIB_NAME} ) SET(TARGET_NAME ${LIB_NAME} )
SET(TARGET_TARGETNAME ${LIB_NAME} ) SET(TARGET_TARGETNAME ${LIB_NAME} )
ADD_LIBRARY(${LIB_NAME} ADD_LIBRARY(${LIB_NAME}
@@ -247,13 +242,14 @@ MACRO(SETUP_LIBRARY LIB_NAME)
ENDIF(TARGET_LIBRARIES_VARS) ENDIF(TARGET_LIBRARIES_VARS)
LINK_CORELIB_DEFAULT(${LIB_NAME}) LINK_CORELIB_DEFAULT(${LIB_NAME})
ENDIF()
INCLUDE(ModuleInstall OPTIONAL) INCLUDE(ModuleInstall OPTIONAL)
ENDMACRO(SETUP_LIBRARY LIB_NAME) ENDMACRO(SETUP_LIBRARY LIB_NAME)
MACRO(SETUP_PLUGIN PLUGIN_NAME) MACRO(SETUP_PLUGIN PLUGIN_NAME)
IF(GLCORE_FOUND) IF(ANDROID)
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} ) SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
ENDIF() ELSE()
SET(TARGET_NAME ${PLUGIN_NAME} ) SET(TARGET_NAME ${PLUGIN_NAME} )
@@ -330,16 +326,13 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT} RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT}
ARCHIVE DESTINATION lib/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev ARCHIVE DESTINATION lib/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
LIBRARY DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT}) LIBRARY DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
IF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
INSTALL(FILES ${OUTPUT_BINDIR}/${OSG_PLUGINS}/${TARGET_TARGETNAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT} CONFIGURATIONS RelWithDebInfo)
INSTALL(FILES ${OUTPUT_BINDIR}/${OSG_PLUGINS}/${TARGET_TARGETNAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT} CONFIGURATIONS Debug)
ENDIF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
ELSE(WIN32) ELSE(WIN32)
INSTALL(TARGETS ${TARGET_TARGETNAME} INSTALL(TARGETS ${TARGET_TARGETNAME}
RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT} RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT}
ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT}) LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
ENDIF(WIN32) ENDIF(WIN32)
ENDIF()
ENDMACRO(SETUP_PLUGIN) ENDMACRO(SETUP_PLUGIN)
@@ -349,10 +342,6 @@ ENDMACRO(SETUP_PLUGIN)
MACRO(SETUP_EXE IS_COMMANDLINE_APP) MACRO(SETUP_EXE IS_COMMANDLINE_APP)
#MESSAGE("in -->SETUP_EXE<-- ${TARGET_NAME}-->${TARGET_SRC} <--> ${TARGET_H}<--") #MESSAGE("in -->SETUP_EXE<-- ${TARGET_NAME}-->${TARGET_SRC} <--> ${TARGET_H}<--")
IF(GL3_FOUND)
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
ENDIF()
IF(NOT TARGET_TARGETNAME) IF(NOT TARGET_TARGETNAME)
SET(TARGET_TARGETNAME "${TARGET_DEFAULT_PREFIX}${TARGET_NAME}") SET(TARGET_TARGETNAME "${TARGET_DEFAULT_PREFIX}${TARGET_NAME}")
ENDIF(NOT TARGET_TARGETNAME) ENDIF(NOT TARGET_TARGETNAME)
@@ -436,10 +425,6 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME)
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
ELSE(APPLE) ELSE(APPLE)
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin COMPONENT openscenegraph ) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin COMPONENT openscenegraph )
IF(MSVC)
INSTALL(FILES ${CMAKE_BINARY_DIR}/bin/${TARGET_NAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION bin COMPONENT openscenegraph CONFIGURATIONS RelWithDebInfo)
INSTALL(FILES ${CMAKE_BINARY_DIR}/bin/${TARGET_NAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION bin COMPONENT openscenegraph CONFIGURATIONS Debug)
ENDIF(MSVC)
ENDIF(APPLE) ENDIF(APPLE)
ENDMACRO(SETUP_APPLICATION) ENDMACRO(SETUP_APPLICATION)
@@ -469,10 +454,6 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME)
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin BUNDLE DESTINATION share/OpenSceneGraph/bin ) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin BUNDLE DESTINATION share/OpenSceneGraph/bin )
ELSE(APPLE) ELSE(APPLE)
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples ) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples )
IF(MSVC)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TARGETNAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples CONFIGURATIONS RelWithDebInfo)
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TARGETNAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples CONFIGURATIONS Debug)
ENDIF(MSVC)
ENDIF(APPLE) ENDIF(APPLE)
ENDMACRO(SETUP_EXAMPLE) ENDMACRO(SETUP_EXAMPLE)

110130
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -1,72 +1,30 @@
OSG News OSG News
======== ========
OpenSceneGraph 3.4.1 release is maintaince release that provide build/runtime improvements and better GLES support = OpenSceneGraph 3.2.1 stable release provides a number of bug and build fixes to the 3.2.0 stable release
PERTHSHIRE, Scotland - 28th August 2017 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.4.1, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.4 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.4 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
Updates include:
* Improves to GLES support across platforms PERTHSHIRE, Scotland - 4th July 2014 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.2.1, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.2 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.2 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
* Full support for osgText and on screen stats across all platfroms, including GLES2 and core pofile
* Build fixes to allow compilation against recent 3rd party depdendency changes
* Range of runtime fixes
Downloads and Licensing: === Open-source development delivers industry-leading features and performance ===
The OpenSceneGraph 3.2.1 stable release is the culmination of 15 years of work by the open-source community that has grown up around the project. This point release is fully binary compatible with the 3.2.0 stable release. The changes made are focused on addressing bugs and improving build support for latest compilers, OS updates and 3rd changes to Party Libraries.
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the Downloads section of the openscenegraph.org website. === Downloads and Licensing ===
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the [http://www.openscenegraph.org/index.php/download-section/stable-releases Downloads] section of the openscenegraph.org website.
OpenSceneGraph is released under the OpenSceneGraph Public License, which is based on the Lesser GNU Public License (LGPL), permitting the software to be used free of charge across the full spectrum of commercial and open-source applications. Furthermore, it allows both static and dynamic linking of the OpenSceneGraph libraries without restricting the licensing of the user's software. OpenSceneGraph is released under the [http://www.openscenegraph.org/projects/osg/wiki/Legal OpenSceneGraph Public License], which is based on the Lesser GNU Public License (LGPL), permitting the software to be used free of charge across the full spectrum of commercial and open-source applications. Furthermore, it allows both static and dynamic linking of the OpenSceneGraph libraries without restricting the licensing of the user's software.
Professional support and services
OpenSceneGraph project is backed up with professional services by OpenSceneGraph Professional Services, based in Scotland, and a range of Contractors from around the world. Services available include: === Professional support and services ===
OpenSceneGraph project is backed up with professional services by [http://www.openscenegraph.com OpenSceneGraph Professional Services], based in Scotland, and [http://www.skew-matrix.com Skew-Matrix] and [http://www.alphapixel.com AlphaPixel] both based in the USA, and a range of [wiki:Community/Contractors Contractors] from around the world. Services available include:
Confidential Professional Support * Confidential Professional Support
Bespoke development * Bespoke development
Consultancy * Consultancy
Training * Training
Community support and contributions:
=== Community support and contributions ===
The diverse and growing community of over 5000 developers is centred around the public osg-users mailing list/forum, where members discuss how best to use OpenSceneGraph, provide mutual support, and coordinate development of new features and bug fixes. Members of this community come from many different countries with backgrounds ranging from some of the world's largest aerospace companies, game companies, and visual simulation specialists to university researchers, students and hobbyists. The diverse and growing community of over 5000 developers is centred around the public osg-users mailing list/forum, where members discuss how best to use OpenSceneGraph, provide mutual support, and coordinate development of new features and bug fixes. Members of this community come from many different countries with backgrounds ranging from some of the world's largest aerospace companies, game companies, and visual simulation specialists to university researchers, students and hobbyists.
The OpenSceneGraph project owes a great deal to the community for its development and support, in particular we wish to thank the 562 individuals from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base. The OpenSceneGraph project owes a great deal to the community for its development and support, in particular we wish to thank the [http://www.openscenegraph.org/index.php/about/56-contributors/162-contributors-to-openscenegraph-3-2-1 individuals] from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.
OpenSceneGraph 3.4 release introduces shader composition, new osgUI library, displacement mapping, volume rendering, lua scripting support and much more
PERTHSHIRE, Scotland - 12th August 2015 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.4, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.4 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.4 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
Updates include:
* New #pragma(tic) composition shader functionality built into the core OSG that provides a easy to use yet flexible scheme for controlling and composing shaders at runtime levering GLSL support for #define and #pragma.
* New osgTerrain::DisplacementMappingTechnique to uses vertex, geometry and fragment shader based displacement mapping technique that dramatically lowers the CPU and GPU memory footprint and bandwidth needs for the same visual quality. The new scheme enables paged terrain that work robustly on smaller hardware, or with far higher loads without framedrops. This new technique levels #pragma(tic) shader composition to enable one to toggle on/off features in the shaders at runtime in a way that is as convenient to use as toggle modes in a fixed function pipeline scene graph.
* New osgVolume::MultipassTechique that uses multipass rendering and shaders to enable seamless mixing of traditional 3D geometry and volumes, support for geometry hulls that constrain where the volume should be rendered as well as improving the ray tracing shaders so that they are both faster and have higher visual quality than the previous generation of ray traced shaders supported by OSG-3.2 releases and before.
* New osgDB::Classiterface class that provides an easy to use mechanism for introspection of scene graph classes, allowing one to get, set properties and invoke methods in a generic way, making the task of integrating 3rd prarty tools such as scripting languages straight forward.
* New Lua scripting support via a plugin that integrates Lua 5.2.3 and the OSG via the OSG's native serialization codes.
* New osgUI NodeKit, that enables User Interface elements to be placed directly into 3D scene graph. The classes are fully scriptable so you create create UI and behaviours all within lua scripts.
* Improvements to OpenGL ES 1.1, ES 2.0 and ES3.0 support, including platform specific extensions
* Improvements to OpenGL 4.x support with a range of new extensions support
* Updates to osgQt to support Qt5 and provide better support for Qt4
Downloads and Licensing:
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the Downloads section of the openscenegraph.org website.
OpenSceneGraph is released under the OpenSceneGraph Public License, which is based on the Lesser GNU Public License (LGPL), permitting the software to be used free of charge across the full spectrum of commercial and open-source applications. Furthermore, it allows both static and dynamic linking of the OpenSceneGraph libraries without restricting the licensing of the user's software.
Professional support and services
OpenSceneGraph project is backed up with professional services by OpenSceneGraph Professional Services, based in Scotland, and a range of Contractors from around the world. Services available include:
Confidential Professional Support
Bespoke development
Consultancy
Training
Community support and contributions:
The diverse and growing community of over 5000 developers is centred around the public osg-users mailing list/forum, where members discuss how best to use OpenSceneGraph, provide mutual support, and coordinate development of new features and bug fixes. Members of this community come from many different countries with backgrounds ranging from some of the world's largest aerospace companies, game companies, and visual simulation specialists to university researchers, students and hobbyists.
The OpenSceneGraph project owes a great deal to the community for its development and support, in particular we wish to thank the 550 individuals from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.

View File

@@ -4,7 +4,7 @@ APP_PROJECT_PATH := $(call my-dir)
APP_OPTIM := ${ANDROID_RELEASE_OPTIM} APP_OPTIM := ${ANDROID_RELEASE_OPTIM}
APP_PLATFORM := android-${ANDROID_PLATFORM} APP_PLATFORM := ${ANDROID_PLATFORM}
APP_STL := ${ANDROID_STL} APP_STL := ${ANDROID_STL}
APP_CPPFLAGS := -fexceptions -frtti APP_CPPFLAGS := -fexceptions -frtti
#APP_CPPFLAGS := -Os -mthumb-interwork -fno-short-enums #APP_CPPFLAGS := -Os -mthumb-interwork -fno-short-enums

File diff suppressed because it is too large Load Diff

View File

@@ -23,7 +23,7 @@ more indepth instructions.
Robert Osfield. Robert Osfield.
Project Lead. Project Lead.
28th August 2017. 4th July 2014.
-- --
@@ -43,12 +43,13 @@ OpenSceneGraph's CMake build can be found at:
http://www.openscenegraph.org/projects/osg/wiki/Build/CMake http://www.openscenegraph.org/projects/osg/wiki/Build/CMake
Under unices (i.e. Linux, IRIX, Solaris, Free-BSD, HP-Ux, AIX, OSX) Under unices (i.e. Linux, IRIX, Solaris, Free-BSD, HP-Ux, AIX, OSX)
use the cmake or ccmake command-line utils. Note that cmake . defaults use the cmake or ccmake command-line utils, or use the included tiny
to building Release to ensure that you get the best performance from configure script that'll run cmake for you. The configure script
your final libraries/applications. simply runs 'cmake . -DCMAKE_BUILD_TYPE=Release' to ensure that you
get the best performance from your final libraries/applications.
cd OpenSceneGraph cd OpenSceneGraph
cmake . ./configure
make make
sudo make install sudo make install
@@ -61,7 +62,7 @@ directory alongside the OpenSceneGraph use:
mkdir build mkdir build
cd build cd build
cmake ../OpenSceneGraph cmake ../OpenSceneGraph -DCMAKE_BUILD_TYPE=Release
make make
sudo make install sudo make install
@@ -166,7 +167,7 @@ Section 3. Release notes on iOS build, by Thomas Hoghart
This will give us the static build we need for iPhone. This will give us the static build we need for iPhone.
* Disable OSG_GL1_AVAILABLE, OSG_GL2_AVAILABLE, OSG_GL3_AVAILABLE, * Disable OSG_GL1_AVAILABLE, OSG_GL2_AVAILABLE, OSG_GL3_AVAILABLE,
OSG_GL_DISPLAYLISTS_AVAILABLE, OSG_GL_VERTEX_FUNCS_AVAILABLE OSG_GL_DISPLAYLISTS_AVAILABLE, OSG_GL_VERTEX_FUNCS_AVAILABLE
* Enable OSG_GLES1_AVAILABLE *OR* OSG_GLES2_AVAILABLE *OR* OSG_GLES3_AVAILABLE (GLES3 will enable GLES2 features) * Enable OSG_GLES1_AVAILABLE *OR* OSG_GLES2_AVAILABLE
* Ensure OSG_WINDOWING_SYSTEM is set to IOS * Ensure OSG_WINDOWING_SYSTEM is set to IOS
* Change FREETYPE include and library paths to an iPhone version * Change FREETYPE include and library paths to an iPhone version
(OpenFrameworks has one bundled with its distribution) (OpenFrameworks has one bundled with its distribution)

View File

@@ -135,7 +135,7 @@ int main( int argc, char **argv )
++itr) ++itr)
{ {
std::cout<<"reading "<<*itr<<std::endl; std::cout<<"reading "<<*itr<<std::endl;
osg::ref_ptr<osg::Object> obj = osgDB::readRefObjectFile(*itr); osg::ref_ptr<osg::Object> obj = osgDB::readObjectFile(*itr);
if (obj.valid()) if (obj.valid())
{ {
std::cout<<" write to archive "<<*itr<<std::endl; std::cout<<" write to archive "<<*itr<<std::endl;

View File

@@ -157,7 +157,6 @@ public:
} }
osg::ref_ptr<osg::State> state = new osg::State; osg::ref_ptr<osg::State> state = new osg::State;
state->initializeExtensionProcs();
for(TextureSet::iterator itr=_textureSet.begin(); for(TextureSet::iterator itr=_textureSet.begin();
itr!=_textureSet.end(); itr!=_textureSet.end();
@@ -175,7 +174,7 @@ public:
{ {
texture->setInternalFormatMode(_internalFormatMode); texture->setInternalFormatMode(_internalFormatMode);
// need to disable the unref after apply, otherwise the image could go out of scope. // need to disable the unref after apply, other the image could go out of scope.
bool unrefImageDataAfterApply = texture->getUnRefImageDataAfterApply(); bool unrefImageDataAfterApply = texture->getUnRefImageDataAfterApply();
texture->setUnRefImageDataAfterApply(false); texture->setUnRefImageDataAfterApply(false);
@@ -374,6 +373,16 @@ public:
++_numStateSetRemoved; ++_numStateSetRemoved;
} }
for(unsigned int i=0;i<node.getNumDrawables();++i)
{
osg::Drawable* drawable = node.getDrawable(i);
if (drawable && drawable->getStateSet())
{
drawable->setStateSet(0);
++_numStateSetRemoved;
}
}
traverse(node); traverse(node);
} }
@@ -772,7 +781,7 @@ int main( int argc, char **argv )
osg::Timer_t startTick = osg::Timer::instance()->tick(); osg::Timer_t startTick = osg::Timer::instance()->tick();
osg::ref_ptr<osg::Node> root = osgDB::readRefNodeFiles(fileNames); osg::ref_ptr<osg::Node> root = osgDB::readNodeFiles(fileNames);
if (root.valid()) if (root.valid())
{ {
@@ -808,7 +817,7 @@ int main( int argc, char **argv )
root->accept(av); root->accept(av);
} }
// optimize the scene graph, remove redundant nodes and state etc. // optimize the scene graph, remove rendundent nodes and state etc.
osgUtil::Optimizer optimizer; osgUtil::Optimizer optimizer;
optimizer.optimize(root.get()); optimizer.optimize(root.get());

View File

@@ -272,9 +272,9 @@ public:
} }
} }
osg::ref_ptr<osg::Node> readNodeFileAndWriteToCache(const std::string& filename) osg::Node* readNodeFileAndWriteToCache(const std::string& filename)
{ {
osg::ref_ptr<osg::Node> node = 0; osg::Node* node = 0;
if (_fileCache.valid() ) if (_fileCache.valid() )
{ {
if (_fileCache->existsInCache(filename)) if (_fileCache->existsInCache(filename))
@@ -286,7 +286,7 @@ public:
{ {
osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl; osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl;
node = osgDB::readRefNodeFile(filename); node = osgDB::readNodeFile(filename);
if (node) if (node)
{ {
osg::notify(osg::NOTICE)<<"write to FileCache : "<<filename<<std::endl; osg::notify(osg::NOTICE)<<"write to FileCache : "<<filename<<std::endl;
@@ -298,7 +298,7 @@ public:
else else
{ {
osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl; osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl;
node = osgDB::readRefNodeFile(filename); node = osgDB::readNodeFile(filename);
} }
return node; return node;
} }

View File

@@ -259,23 +259,7 @@ const char* invalidNames[] =
"VolumeTile", "VolumeTile",
"PushStackValueVisitor", "PushStackValueVisitor",
"RayIntersector", "RayIntersector",
"OpenSceneGraph-Data", "OpenSceneGraph-Data"
"Node",
"AlphaFunc",
"CompositeViewer",
"OpenSceneGraph-3",
"DisplaySettings::SHADER_NONE",
"CodeDocs",
"Mon",
"Tue",
"Wed",
"Fri",
"Sat",
"Sun",
"I",
"TriangleFunctor",
"PrimitiveFunctor",
"OpenMW"
}; };
@@ -368,7 +352,6 @@ TypoCorrection typoCorrections[] =
{"Krulthof", "Kruithof"}, {"Krulthof", "Kruithof"},
{"Lagrade", "Lagarde"}, {"Lagrade", "Lagarde"},
{"Largade", "Lagarde"}, {"Largade", "Lagarde"},
{"Largarde", "Lagarde"},
{"Larshkari", "Lashkari"}, {"Larshkari", "Lashkari"},
{"Lashakari", "Lashkari"}, {"Lashakari", "Lashkari"},
{"Lashari", "Lashkari"}, {"Lashari", "Lashkari"},
@@ -485,22 +468,7 @@ TypoCorrection typoCorrections[] =
{"Blessing","Blissing"}, {"Blessing","Blissing"},
{"Dannahuer","Dannhauer"}, {"Dannahuer","Dannhauer"},
{"Chebeav", "Chebaev"}, {"Chebeav", "Chebaev"},
{"Messershmidt","Messerschmidt"}, {"Messershmidt","Messerschmidt"}
{"Auelien","Aurelien"},
{"Aurélien","Aur<EFBFBD>lien"},
{"McDonnel","Mc Donnell"},
{"McDonnell","Mc Donnell"},
{"Delallée","Delall<EFBFBD>e"},
{"Gjøl","Gj<EFBFBD>l"},
{"Ravšelj","Rav<EFBFBD>elj"},
{"Ravsel", "Rav<EFBFBD>elj"},
{"Ravselj", "Rav<EFBFBD>elj"},
{"Janik", "Jannik"},
{"Viganò", "Vigan<EFBFBD>"},
{"Vigano", "Vigan<EFBFBD>"},
{"Frashud", "Farshid"},
{"Dannahauer","Dannahauer"},
{"Sando","Sandro"}
}; };
@@ -514,16 +482,6 @@ struct NameCorrection
NameCorrection nameCorrections[] = NameCorrection nameCorrections[] =
{ {
{"LaurensVoerman","Meta_Shape",
"Laurens", "Voerman"},
{"LaurensVoerman","OpenCascade",
"Laurens", "Voerman"},
{"LaurensVoerman","Fri",
"Laurens", "Voerman"},
{"LaurensVoerman","",
"Laurens", "Voerman"},
{"Laurens","Loerman",
"Laurens", "Voerman"},
{"FrancoisTigeot","", {"FrancoisTigeot","",
"Francois", "Tigeot"}, "Francois", "Tigeot"},
{"Juan","Manuel", {"Juan","Manuel",
@@ -618,8 +576,6 @@ NameCorrection nameCorrections[] =
"Melchior", "Franz"}, "Melchior", "Franz"},
{"Glen", "Waldon", {"Glen", "Waldon",
"Glenn", "Waldron"}, "Glenn", "Waldron"},
{"Glen", "Waldron",
"Glenn", "Waldron"},
{"Ralf", "Karn", {"Ralf", "Karn",
"Ralf", "Kern"}, "Ralf", "Kern"},
{"Donny", "Cipperly", {"Donny", "Cipperly",
@@ -681,25 +637,7 @@ NameCorrection nameCorrections[] =
{"Ricard", "Schmidt", {"Ricard", "Schmidt",
"Richard", "Schmidt"}, "Richard", "Schmidt"},
{"Matthias", "Helsing", {"Matthias", "Helsing",
"Mattias", "Helsing"}, "Mattias", "Helsing"}
{"Clement", "Boesch",
"Cl<EFBFBD>ment", "B<EFBFBD>sch"},
{"Lauren", "Voerman",
"Laurens", "Voerman"},
{"Pjotr", "Sventachov",
"Pjotr", "Svetachov"},
{"Bradley", "Baker",
"Bradley", "Baker Searles"},
{"PawelKsiezopolski", "",
"Pawel", "Ksiezopolski"},
{"Albert", "Luaces",
"Alberto","Luaces"},
{"KOS", "",
"Konstantin","Matveyev"},
{"WeSee", "",
"Alois", "Wismer"},
{"We", "See",
"Alois", "Wismer"}
}; };
@@ -1031,9 +969,7 @@ void printContributors(const std::string& changeLog, bool printNumEntries)
cout << "-------------------------" << endl; cout << "-------------------------" << endl;
for (SortedNameMap::reverse_iterator sitr = sortedNames.rbegin(); sitr != sortedNames.rend(); ++sitr) for (SortedNameMap::reverse_iterator sitr = sortedNames.rbegin(); sitr != sortedNames.rend(); ++sitr)
{ {
cout << sitr->first << "\t" << sitr->second.first; cout << sitr->first << "\t" << sitr->second.first << " " << sitr->second.second << endl;
if (!sitr->second.second.empty()) cout << " " << sitr->second.second;
cout << endl;
} }
} }
else else
@@ -1042,9 +978,7 @@ void printContributors(const std::string& changeLog, bool printNumEntries)
cout << "-----------------" << endl; cout << "-----------------" << endl;
for (SortedNameMap::reverse_iterator sitr = sortedNames.rbegin(); sitr != sortedNames.rend(); ++sitr) for (SortedNameMap::reverse_iterator sitr = sortedNames.rbegin(); sitr != sortedNames.rend(); ++sitr)
{ {
cout << sitr->second.first; cout << sitr->second.first << " " << sitr->second.second << endl;
if (!sitr->second.second.empty()) cout << " " << sitr->second.second;
cout << endl;
} }
} }
} }

View File

@@ -1,5 +1,5 @@
// The majority of the application is dedicated to building the // The majority of the application is dedicated to building the
// current contributors list by parsing the ChangeLog, it just takes // current contribitors list by parsing the ChangeLog, it just takes
// one line in the main itself to report the version number. // one line in the main itself to report the version number.
#include <set> #include <set>

View File

@@ -14,7 +14,6 @@
#include <osg/CoordinateSystemNode> #include <osg/CoordinateSystemNode>
#include <osg/Switch> #include <osg/Switch>
#include <osg/Types>
#include <osgText/Text> #include <osgText/Text>
#include <osgViewer/Viewer> #include <osgViewer/Viewer>
@@ -32,7 +31,113 @@
#include <osgGA/Device> #include <osgGA/Device>
#include <iostream> #include <iostream>
#include <stdint.h>
#include <osg/GLExtensions>
#ifndef GL_ARB_sync
#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
#define GL_OBJECT_TYPE 0x9112
#define GL_SYNC_CONDITION 0x9113
#define GL_SYNC_STATUS 0x9114
#define GL_SYNC_FLAGS 0x9115
#define GL_SYNC_FENCE 0x9116
#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
#define GL_UNSIGNALED 0x9118
#define GL_SIGNALED 0x9119
#define GL_ALREADY_SIGNALED 0x911A
#define GL_TIMEOUT_EXPIRED 0x911B
#define GL_CONDITION_SATISFIED 0x911C
#define GL_WAIT_FAILED 0x911D
#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
#endif
class MySwapBuffersCallback : public osg::GraphicsContext::SwapCallback
{
public:
MySwapBuffersCallback():
_extensionInitialized(false),
_glFenceSync(0),
_glIsSync(0),
_glDeleteSync(0),
_glClientWaitSync(0),
_glWaitSync(0),
_glGetInteger64v(0),
_glGetSynciv(0),
_previousSync(0)
{
OSG_NOTICE<<"Created Swap callback."<<std::endl;
}
void setUpExtensions()
{
_extensionInitialized = true;
osg::setGLExtensionFuncPtr(_glFenceSync, "glFenceSync");
osg::setGLExtensionFuncPtr(_glIsSync, "glIsSync");
osg::setGLExtensionFuncPtr(_glDeleteSync, "glDeleteSync");
osg::setGLExtensionFuncPtr(_glClientWaitSync, "glClientWaitSync");
osg::setGLExtensionFuncPtr(_glWaitSync, "glWaitSync");
osg::setGLExtensionFuncPtr(_glGetInteger64v, "glGetInteger64v");
osg::setGLExtensionFuncPtr(_glGetSynciv, "glGetSynciv");
}
virtual void swapBuffersImplementation(osg::GraphicsContext* gc)
{
// OSG_NOTICE<<"Before swap - place to do swap ready sync"<<std::endl;
gc->swapBuffersImplementation();
//glFinish();
if (!_extensionInitialized) setUpExtensions();
if (_glClientWaitSync)
{
if (_previousSync)
{
unsigned int num_seconds = 1;
GLuint64 timeout = num_seconds * ((GLuint64)1000 * 1000 * 1000);
_glClientWaitSync(_previousSync, 0, timeout);
_glDeleteSync(_previousSync);
}
_previousSync = _glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
}
//gc->getState()->checkGLErrors("after glWaitSync");
//OSG_NOTICE<<"After swap"<<std::endl;
}
#ifdef _WIN32
typedef __int64 GLint64;
typedef unsigned __int64 GLuint64;
#else
typedef int64_t GLint64;
typedef uint64_t GLuint64;
#endif
typedef struct __GLsync *GLsync;
typedef GLsync (GL_APIENTRY * PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
typedef GLboolean (GL_APIENTRY * PFNGLISSYNCPROC) (GLsync sync);
typedef void (GL_APIENTRY * PFNGLDELETESYNCPROC) (GLsync sync);
typedef GLenum (GL_APIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRY * PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
typedef void (GL_APIENTRY * PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params);
typedef void (GL_APIENTRY * PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
bool _extensionInitialized;
PFNGLFENCESYNCPROC _glFenceSync;
PFNGLISSYNCPROC _glIsSync;
PFNGLDELETESYNCPROC _glDeleteSync;
PFNGLCLIENTWAITSYNCPROC _glClientWaitSync;
PFNGLWAITSYNCPROC _glWaitSync;
PFNGLGETINTEGER64VPROC _glGetInteger64v;
PFNGLGETSYNCIVPROC _glGetSynciv;
GLsync _previousSync;
};
int main(int argc, char** argv) int main(int argc, char** argv)
{ {
@@ -87,10 +192,10 @@ int main(int argc, char** argv)
std::string device; std::string device;
while(arguments.read("--device", device)) while(arguments.read("--device", device))
{ {
osg::ref_ptr<osgGA::Device> dev = osgDB::readRefFile<osgGA::Device>(device); osg::ref_ptr<osgGA::Device> dev = osgDB::readFile<osgGA::Device>(device);
if (dev.valid()) if (dev.valid())
{ {
viewer.addDevice(dev); viewer.addDevice(dev.get());
} }
} }
@@ -127,6 +232,8 @@ int main(int argc, char** argv)
viewer.setCameraManipulator( keyswitchManipulator.get() ); viewer.setCameraManipulator( keyswitchManipulator.get() );
} }
bool doArbSync = arguments.read("--sync");
// add the state manipulator // add the state manipulator
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
@@ -152,7 +259,7 @@ int main(int argc, char** argv)
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler); viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
// load the data // load the data
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
if (!loadedModel) if (!loadedModel)
{ {
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
@@ -172,12 +279,24 @@ int main(int argc, char** argv)
// optimize the scene graph, remove redundant nodes and state etc. // optimize the scene graph, remove redundant nodes and state etc.
osgUtil::Optimizer optimizer; osgUtil::Optimizer optimizer;
optimizer.optimize(loadedModel); optimizer.optimize(loadedModel.get());
viewer.setSceneData(loadedModel); viewer.setSceneData( loadedModel.get() );
viewer.realize(); viewer.realize();
if (doArbSync)
{
osgViewer::ViewerBase::Contexts contexts;
viewer.getContexts(contexts);
for(osgViewer::ViewerBase::Contexts::iterator itr = contexts.begin();
itr != contexts.end();
++itr)
{
(*itr)->setSwapCallback(new MySwapBuffersCallback);
}
}
return viewer.run(); return viewer.run();
} }

View File

@@ -33,7 +33,7 @@
#if defined(__linux) #if defined(__linux)
#include <unistd.h> #include <unistd.h>
#include <linux/sockios.h> #include <linux/sockios.h>
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__) #elif defined(__FreeBSD__) || defined(__DragonFly__)
#include <unistd.h> #include <unistd.h>
#include <sys/sockio.h> #include <sys/sockio.h>
#elif defined(__sgi) #elif defined(__sgi)
@@ -41,8 +41,6 @@
#include <net/soioctl.h> #include <net/soioctl.h>
#elif defined(__CYGWIN__) #elif defined(__CYGWIN__)
#include <unistd.h> #include <unistd.h>
#elif defined (__GNU__)
#include <unistd.h>
#elif defined(__sun) #elif defined(__sun)
#include <unistd.h> #include <unistd.h>
#include <sys/sockio.h> #include <sys/sockio.h>
@@ -204,8 +202,7 @@ void DataConverter::write(CameraPacket& cameraPacket)
itr != cameraPacket._events.end(); itr != cameraPacket._events.end();
++itr) ++itr)
{ {
osgGA::GUIEventAdapter* event = (*itr)->asGUIEventAdapter(); write(*(*itr));
if (event) write(*(event));
} }
} }
@@ -252,7 +249,7 @@ void CameraPacket::writeEventQueue(osgViewer::Viewer& viewer)
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// //
// Receiver // Reciever
// //
Receiver::Receiver( void ) Receiver::Receiver( void )
{ {
@@ -340,7 +337,7 @@ void Receiver::sync( void )
} }
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || \ #if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || \
defined(__DragonFly__) || defined(__FreeBSD_kernel__) || defined(__GNU__) defined(__DragonFly__)
socklen_t socklen_t
#else #else
int int

View File

@@ -33,21 +33,21 @@ class Receiver
{ {
public : public :
Receiver(); Receiver();
~Receiver(); ~Receiver();
// setBuffer defines the buffer into which the broadcasted // setBuffer defines the buffer into which the broadcasted
// message will be received. // message will be received.
void setBuffer( void *buffer, const unsigned int size ); void setBuffer( void *buffer, const unsigned int size );
// Define what port to listen and bind to // Define what port to listen and bind to
void setPort( const short port ); void setPort( const short port );
// Sync does a blocking wait to recieve next message // Sync does a blocking wait to recieve next message
void sync( void ); void sync( void );
private : private :
bool init( void ); bool init( void );
private : private :
#if defined (WIN32) && !defined(__CYGWIN__) #if defined (WIN32) && !defined(__CYGWIN__)
@@ -72,25 +72,25 @@ class Broadcaster
{ {
public : public :
Broadcaster( void ); Broadcaster( void );
~Broadcaster( void ); ~Broadcaster( void );
// Set the broadcast port // Set the broadcast port
void setPort( const short port ); void setPort( const short port );
// Set the buffer to be broadcast // Set the buffer to be broadcast
void setBuffer( void *buffer, const unsigned int buffer_size ); void setBuffer( void *buffer, const unsigned int buffer_size );
// Set a recipient host. If this is used, the Broadcaster // Set a recipient host. If this is used, the Broadcaster
// no longer broadcasts, but rather directs UDP packets at // no longer broadcasts, but rather directs UDP packets at
// host. // host.
void setHost( const char *hostname ); void setHost( const char *hostname );
// Sync broadcasts the buffer // Sync broadcasts the buffer
void sync( void ); void sync( void );
private : private :
bool init( void ); bool init( void );
private : private :
#if defined(WIN32) && !defined(__CYGWIN__) #if defined(WIN32) && !defined(__CYGWIN__)
@@ -305,14 +305,14 @@ class DataConverter
inline void writeFloat(float c) { write4((char*)&c); } inline void writeFloat(float c) { write4((char*)&c); }
inline void writeDouble(double c) { write8((char*)&c); } inline void writeDouble(double c) { write8((char*)&c); }
inline char readChar() { char c=0; read1(&c); return c; } inline char readChar() { char c; read1(&c); return c; }
inline unsigned char readUChar() { unsigned char c=0; read1((char*)&c); return c; } inline unsigned char readUChar() { unsigned char c; read1((char*)&c); return c; }
inline short readShort() { short c=0; read2((char*)&c); return c; } inline short readShort() { short c; read2((char*)&c); return c; }
inline unsigned short readUShort() { unsigned short c=0; read2((char*)&c); return c; } inline unsigned short readUShort() { unsigned short c; read2((char*)&c); return c; }
inline int readInt() { int c=0; read4((char*)&c); return c; } inline int readInt() { int c; read4((char*)&c); return c; }
inline unsigned int readUInt() { unsigned int c=0; read4((char*)&c); return c; } inline unsigned int readUInt() { unsigned int c; read4((char*)&c); return c; }
inline float readFloat() { float c=0.0f; read4((char*)&c); return c; } inline float readFloat() { float c; read4((char*)&c); return c; }
inline double readDouble() { double c=0.0; read8((char*)&c); return c; } inline double readDouble() { double c; read8((char*)&c); return c; }
void write(const osg::FrameStamp& fs); void write(const osg::FrameStamp& fs);
void read(osg::FrameStamp& fs); void read(osg::FrameStamp& fs);

View File

@@ -54,6 +54,11 @@ bool PointsEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActio
return false; return false;
} }
void PointsEventHandler::accept(osgGA::GUIEventHandlerVisitor& v)
{
v.visit(*this);
}
void PointsEventHandler::getUsage(osg::ApplicationUsage& usage) const void PointsEventHandler::getUsage(osg::ApplicationUsage& usage) const
{ {
usage.addKeyboardMouseBinding("+","Increase point size"); usage.addKeyboardMouseBinding("+","Increase point size");

View File

@@ -25,6 +25,8 @@ class PointsEventHandler : public osgGA::GUIEventHandler
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&); virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&);
virtual void accept(osgGA::GUIEventHandlerVisitor& v);
void getUsage(osg::ApplicationUsage& usage) const; void getUsage(osg::ApplicationUsage& usage) const;
void setStateSet(osg::StateSet* stateset) { _stateset=stateset; } void setStateSet(osg::StateSet* stateset) { _stateset=stateset; }

View File

@@ -215,24 +215,24 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
std::string filename; std::string filename;
while (arguments.read("--image",filename)) while (arguments.read("--image",filename))
{ {
osg::ref_ptr<osg::Image> image = readRefImageFile(filename.c_str(), local_options.get()); osg::ref_ptr<osg::Image> image = readImageFile(filename.c_str(), local_options.get());
if (image.valid()) nodeList.push_back(osg::createGeodeForImage(image)); if (image.valid()) nodeList.push_back(osg::createGeodeForImage(image.get()));
} }
while (arguments.read("--movie",filename)) while (arguments.read("--movie",filename))
{ {
osg::ref_ptr<osg::Image> image = readRefImageFile(filename.c_str(), local_options.get()); osg::ref_ptr<osg::Image> image = readImageFile(filename.c_str(), local_options.get());
osg::ref_ptr<osg::ImageStream> imageStream = dynamic_cast<osg::ImageStream*>(image.get()); osg::ref_ptr<osg::ImageStream> imageStream = dynamic_cast<osg::ImageStream*>(image.get());
if (image.valid()) if (image.valid())
{ {
imageStream->play(); imageStream->play();
nodeList.push_back(osg::createGeodeForImage(imageStream)); nodeList.push_back(osg::createGeodeForImage(imageStream.get()));
} }
} }
while (arguments.read("--dem",filename)) while (arguments.read("--dem",filename))
{ {
osg::ref_ptr<osg::HeightField> hf = readRefHeightFieldFile(filename.c_str(), local_options.get()); osg::HeightField* hf = readHeightFieldFile(filename.c_str(), local_options.get());
if (hf) if (hf)
{ {
osg::Geode* geode = new osg::Geode; osg::Geode* geode = new osg::Geode;
@@ -247,7 +247,7 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
if (!arguments.isOption(pos)) if (!arguments.isOption(pos))
{ {
// not an option so assume string is a filename. // not an option so assume string is a filename.
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFile( arguments[pos], local_options.get()); osg::Node *node = osgDB::readNodeFile( arguments[pos], local_options.get());
if(node) if(node)
{ {

View File

@@ -52,6 +52,12 @@ bool ShowEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
return false; return false;
} }
void ShowEventHandler::accept(osgGA::GUIEventHandlerVisitor& v)
{
v.visit(*this);
}
void ShowEventHandler::getUsage(osg::ApplicationUsage& /*usage*/) const void ShowEventHandler::getUsage(osg::ApplicationUsage& /*usage*/) const
{ {
} }

View File

@@ -29,6 +29,8 @@ class ShowEventHandler : public osgGA::GUIEventHandler
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv); virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv);
virtual void accept(osgGA::GUIEventHandlerVisitor& v);
virtual void getUsage(osg::ApplicationUsage& usage) const; virtual void getUsage(osg::ApplicationUsage& usage) const;
}; };

View File

@@ -11,6 +11,7 @@
*/ */
#include <osg/Geometry> #include <osg/Geometry>
#include <osg/CameraNode>
#include <osg/Texture2D> #include <osg/Texture2D>
#include <osg/AutoTransform> #include <osg/AutoTransform>
#include <osg/Notify> #include <osg/Notify>
@@ -36,10 +37,9 @@
#include <osgGA/TerrainManipulator> #include <osgGA/TerrainManipulator>
#include <osgGA/AnimationPathManipulator> #include <osgGA/AnimationPathManipulator>
#include <osgGA/StateSetManipulator> #include <osgGA/StateSetManipulator>
#include <osgGA/MultiTouchTrackballManipulator>
#include <osgPresentation/SlideEventHandler> #include <osgPresentation/SlideEventHandler>
#include <osgPresentation/Cursor> #include <osgPresentation/SlideShowConstructor>
#include "ReadShowFile.h" #include "ReadShowFile.h"
#include "PointsEventHandler.h" #include "PointsEventHandler.h"
@@ -51,7 +51,6 @@
#include <fstream> #include <fstream>
#include <iostream> #include <iostream>
#include <string.h> #include <string.h>
#ifdef USE_SDL #ifdef USE_SDL
@@ -130,103 +129,148 @@ void setViewer(osgViewer::Viewer& viewer, float width, float height, float dista
viewer.getCamera()->setProjectionMatrixAsPerspective( vfov, width/height, 0.1, 1000.0); viewer.getCamera()->setProjectionMatrixAsPerspective( vfov, width/height, 0.1, 1000.0);
OSG_INFO<<"setProjectionMatrixAsPerspective( "<<vfov<<", "<<width/height<<", "<<0.1<<", "<<1000.0<<");"<<std::endl; OSG_NOTICE<<"setProjectionMatrixAsPerspective( "<<vfov<<", "<<width/height<<", "<<0.1<<", "<<1000.0<<");"<<std::endl;
} }
class ForwardToDeviceEventHandler : public osgGA::GUIEventHandler { class ForwardToDeviceEventHandler : public osgGA::GUIEventHandler {
public: public:
ForwardToDeviceEventHandler(osgGA::Device* device, bool format_mouse_events) : osgGA::GUIEventHandler(), _device(device), _forwardMouseEvents(format_mouse_events) {} ForwardToDeviceEventHandler(osgGA::Device* device) : osgGA::GUIEventHandler(), _device(device) {}
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *) virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *)
{ {
switch (ea.getEventType()) OSG_INFO<<"ForwardToDeviceEventHandler::setEvent("<<ea.getKey()<<")"<<std::endl;
{ _device->sendEvent(ea);
case osgGA::GUIEventAdapter::PUSH:
case osgGA::GUIEventAdapter::RELEASE:
case osgGA::GUIEventAdapter::MOVE:
case osgGA::GUIEventAdapter::DRAG:
case osgGA::GUIEventAdapter::SCROLL:
if (_forwardMouseEvents)
_device->sendEvent(ea);
break;
default:
_device->sendEvent(ea);
break;
}
return false; return false;
} }
bool handle(osgGA::Event* event, osg::Object* object, osg::NodeVisitor* nv)
{
if (event->asGUIEventAdapter())
return osgGA::GUIEventHandler::handle(event, object, nv);
else
{
_device->sendEvent(*event);
return false;
}
}
private: private:
osg::ref_ptr<osgGA::Device> _device; osg::ref_ptr<osgGA::Device> _device;
bool _forwardMouseEvents;
}; };
class DumpEventHandler : public osgGA::GUIEventHandler { class FollowMouseCallback: public osgGA::GUIEventHandler
public: {
DumpEventHandler() : osgGA::GUIEventHandler() {} public:
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *) FollowMouseCallback():
{ _mousePostition(0.5,0.5) {}
switch (ea.getEventType())
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv)
{ {
case osgGA::GUIEventAdapter::FRAME: osg::AutoTransform* transform = dynamic_cast<osg::AutoTransform*>(object);
return false; if (!transform) return false;
break;
case osgGA::GUIEventAdapter::PUSH:
std::cout << "PUSH: ";
break;
case osgGA::GUIEventAdapter::RELEASE:
std::cout << "RELEASE: ";
break;
case osgGA::GUIEventAdapter::MOVE:
std::cout << "MOVE: ";
break;
case osgGA::GUIEventAdapter::DRAG:
std::cout << "DRAG: ";
break;
case osgGA::GUIEventAdapter::SCROLL:
std::cout << "SCROLL: ";
break;
break;
default: osg::NotifySeverity level = osg::INFO;
std::cout << ea.getEventType() << " ";
break; switch(ea.getEventType())
} {
std::cout << ea.getX() << "/" << ea.getY() << " " << ea.isMultiTouchEvent() << std::endl; case(osgGA::GUIEventAdapter::PUSH):
return false; case(osgGA::GUIEventAdapter::RELEASE):
} case(osgGA::GUIEventAdapter::MOVE):
case(osgGA::GUIEventAdapter::DRAG):
osg::notify(level)<<std::endl<<"ea.getGraphicsContext()="<<ea.getGraphicsContext()<<std::endl;
osg::notify(level)<<"ea.getWindowWidth()="<<ea.getWindowWidth()<<std::endl;
osg::notify(level)<<"ea.getWindowHeight()="<<ea.getWindowHeight()<<std::endl;
osg::notify(level)<<"ea.getX()="<<ea.getX()<<std::endl;
osg::notify(level)<<"ea.getXin()="<<ea.getXmin()<<std::endl;
osg::notify(level)<<"ea.getXmax()="<<ea.getXmax()<<std::endl;
osg::notify(level)<<"ea.getY()="<<ea.getY()<<std::endl;
osg::notify(level)<<"ea.getYin()="<<ea.getYmin()<<std::endl;
osg::notify(level)<<"ea.getYmax()="<<ea.getYmax()<<std::endl;
_mousePostition.set(ea.getXnormalized(), ea.getYnormalized());
break;
case(osgGA::GUIEventAdapter::FRAME):
{
osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
bool handle(osgGA::Event* event, osg::Object* object, osg::NodeVisitor* nv) osg::Camera* camera = view->getCamera();
{ osg::Matrix VP = camera->getViewMatrix() * camera->getProjectionMatrix();
if (event->asGUIEventAdapter())
return osgGA::GUIEventHandler::handle(event, object, nv); osg::Matrix inverse_VP;
else inverse_VP.invert(VP);
{
osg::Vec3d start_eye(_mousePostition.x(), _mousePostition.y(), 0.0);
osg::Vec3d end_eye(_mousePostition.x(), _mousePostition.y(), 1.0);
osg::Vec3d start_world = start_eye * inverse_VP;
osg::Vec3d end_world = start_eye * inverse_VP;
osg::notify(level)<<"start_world="<<start_world<<std::endl;
osg::notify(level)<<"end_world="<<end_world<<std::endl;
if (end_world.valid()) transform->setPosition(end_world);
else
{
OSG_NOTICE<<"Ignoring invalid end_world position"<<std::endl;
}
break;
}
case(osgGA::GUIEventAdapter::KEYDOWN):
{
if (ea.getKey()=='c')
{
for(unsigned int i=0; i< transform->getNumChildren(); ++i)
{
osg::Node* node = transform->getChild(i);
node->setNodeMask(
node->getNodeMask()!=0 ?
0 :
0xffffff);
}
}
break;
}
default:
break;
}
return false; return false;
} }
}
virtual void accept(osgGA::GUIEventHandlerVisitor& v)
{
v.visit(*this);
}
private: osg::Vec2d _mousePostition;
}; };
osg::Node* createCursorSubgraph(const std::string& filename, float size)
{
osg::Geode* geode = new osg::Geode;
size = 20.0f;
osg::Geometry* geom = osg::createTexturedQuadGeometry(osg::Vec3(-size*0.5f,-size*0.5f,0.0f),osg::Vec3(size,0.0f,0.0f),osg::Vec3(0.0f,size,0.0f));
geom->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
osg::Image* image = osgDB::readImageFile(osgDB::findDataFile(filename));
if (image)
{
osg::StateSet* stateset = geom->getOrCreateStateSet();
stateset->setTextureAttributeAndModes(0, new osg::Texture2D(image),osg::StateAttribute::ON|osg::StateAttribute::PROTECTED);
stateset->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::PROTECTED);
// stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
stateset->setRenderBinDetails(1000, "DepthSortedBin");
}
geode->addDrawable(geom);
osg::AutoTransform* transform = new osg::AutoTransform;
transform->setAutoRotateMode(osg::AutoTransform::ROTATE_TO_CAMERA);
transform->setAutoScaleToScreen(true);
transform->addChild(geode);
transform->setEventCallback(new FollowMouseCallback());
return transform;
}
enum P3DApplicationType enum P3DApplicationType
@@ -248,7 +292,7 @@ void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_opti
loadedModel->getOrCreateStateSet()->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON); loadedModel->getOrCreateStateSet()->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);
#endif #endif
// optimize the scene graph, remove redundant nodes and state etc. // optimize the scene graph, remove rendundent nodes and state etc.
osgUtil::Optimizer optimizer; osgUtil::Optimizer optimizer;
optimizer.optimize(loadedModel.get(), optimizer_options); optimizer.optimize(loadedModel.get(), optimizer_options);
@@ -256,24 +300,21 @@ void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_opti
{ {
osg::ref_ptr<osg::Group> group = new osg::Group; osg::ref_ptr<osg::Group> group = new osg::Group;
group->addChild(loadedModel.get()); group->addChild(loadedModel.get());
group->addChild(createCursorSubgraph(cursorFileName, 0.05f));
OSG_NOTICE<<"Creating Cursor"<<std::endl;
group->addChild(new osgPresentation::Cursor(cursorFileName, 20.0f));
loadedModel = group; loadedModel = group;
} }
} }
void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name, bool forward_mouse_events) void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name)
{ {
osg::ref_ptr<osgGA::Device> dev = osgDB::readRefFile<osgGA::Device>(device_name); osg::ref_ptr<osgGA::Device> dev = osgDB::readFile<osgGA::Device>(device_name);
if (dev.valid()) if (dev.valid())
{ {
OSG_INFO << "Adding Device : " << device_name << std::endl; OSG_INFO << "Adding Device : " << device_name << std::endl;
viewer.addDevice(dev.get()); viewer.addDevice(dev.get());
if ((dev->getCapabilities() & osgGA::Device::SEND_EVENTS)) if (dev->getCapabilities() & osgGA::Device::SEND_EVENTS)
viewer.getEventHandlers().push_front(new ForwardToDeviceEventHandler(dev.get(), forward_mouse_events)); viewer.getEventHandlers().push_front(new ForwardToDeviceEventHandler(dev.get()));
} }
else else
{ {
@@ -307,8 +348,6 @@ int main( int argc, char **argv )
arguments.getApplicationUsage()->addCommandLineOption("--html <filename>","Print out slides to a series of html & image files."); arguments.getApplicationUsage()->addCommandLineOption("--html <filename>","Print out slides to a series of html & image files.");
arguments.getApplicationUsage()->addCommandLineOption("--loop","Switch on looping of presentation."); arguments.getApplicationUsage()->addCommandLineOption("--loop","Switch on looping of presentation.");
arguments.getApplicationUsage()->addCommandLineOption("--devices","Print the Video input capability via QuickTime and exit."); arguments.getApplicationUsage()->addCommandLineOption("--devices","Print the Video input capability via QuickTime and exit.");
arguments.getApplicationUsage()->addCommandLineOption("--forwardMouseEvents","forward also mouse/touch-events to the devices");
arguments.getApplicationUsage()->addCommandLineOption("--suppressEnvTags", "suppresses all found ENV-tags in the presentation");
// add alias from xml to p3d to provide backwards compatibility for old p3d files. // add alias from xml to p3d to provide backwards compatibility for old p3d files.
osgDB::Registry::instance()->addFileExtensionAlias("xml","p3d"); osgDB::Registry::instance()->addFileExtensionAlias("xml","p3d");
@@ -317,17 +356,14 @@ int main( int argc, char **argv )
if (arguments.read("-devices") || arguments.read("--devices")) if (arguments.read("-devices") || arguments.read("--devices"))
{ {
// Force load QuickTime plugin, probe video capability, exit // Force load QuickTime plugin, probe video capability, exit
osgDB::readRefImageFile("devices.live"); osgDB::readImageFile("devices.live");
return 1; return 1;
} }
bool suppress_env_tags = false;
if (arguments.read("--suppressEnvTags"))
suppress_env_tags = true;
// read any env vars from presentations before we create viewer to make sure the viewer // read any env vars from presentations before we create viewer to make sure the viewer
// utilises these env vars // utilises these env vars
if (!suppress_env_tags && p3d::readEnvVars(arguments)) if (p3d::readEnvVars(arguments))
{ {
osg::DisplaySettings::instance()->readEnvironmentalVariables(); osg::DisplaySettings::instance()->readEnvironmentalVariables();
} }
@@ -415,10 +451,6 @@ int main( int argc, char **argv )
doSetViewer = false; doSetViewer = false;
} }
bool forwardMouseEvents = false;
if (arguments.read("--forwardMouseEvents"))
forwardMouseEvents = true;
const char* p3dDevice = getenv("P3D_DEVICE"); const char* p3dDevice = getenv("P3D_DEVICE");
if (p3dDevice) if (p3dDevice)
{ {
@@ -426,7 +458,7 @@ int main( int argc, char **argv )
osgDB::split(p3dDevice, devices); osgDB::split(p3dDevice, devices);
for(osgDB::StringList::iterator i = devices.begin(); i != devices.end(); ++i) for(osgDB::StringList::iterator i = devices.begin(); i != devices.end(); ++i)
{ {
addDeviceTo(viewer, *i, forwardMouseEvents); addDeviceTo(viewer, *i);
} }
} }
@@ -434,7 +466,7 @@ int main( int argc, char **argv )
std::string device; std::string device;
while (arguments.read("--device", device)) while (arguments.read("--device", device))
{ {
addDeviceTo(viewer, device, forwardMouseEvents); addDeviceTo(viewer, device);
} }
@@ -451,7 +483,7 @@ int main( int argc, char **argv )
osg::ref_ptr<osgDB::Options> device_options = new osgDB::Options("documentRegisteredHandlers"); osg::ref_ptr<osgDB::Options> device_options = new osgDB::Options("documentRegisteredHandlers");
osg::ref_ptr<osgGA::Device> rest_http_device = osgDB::readRefFile<osgGA::Device>(server_address+":"+server_port+"/"+document_root+".resthttp", device_options.get()); osg::ref_ptr<osgGA::Device> rest_http_device = osgDB::readFile<osgGA::Device>(server_address+":"+server_port+"/"+document_root+".resthttp", device_options.get());
if (rest_http_device.valid()) if (rest_http_device.valid())
{ {
viewer.addDevice(rest_http_device.get()); viewer.addDevice(rest_http_device.get());
@@ -477,7 +509,7 @@ int main( int argc, char **argv )
{ {
osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator; osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::MultiTouchTrackballManipulator() ); keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() ); keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() ); keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() ); keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );
@@ -499,8 +531,6 @@ int main( int argc, char **argv )
viewer.setCameraManipulator( keyswitchManipulator.get() ); viewer.setCameraManipulator( keyswitchManipulator.get() );
} }
//viewer.getEventHandlers().push_front(new DumpEventHandler());
// add the state manipulator // add the state manipulator
osg::ref_ptr<osgGA::StateSetManipulator> ssManipulator = new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()); osg::ref_ptr<osgGA::StateSetManipulator> ssManipulator = new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet());
ssManipulator->setKeyEventToggleTexturing('e'); ssManipulator->setKeyEventToggleTexturing('e');
@@ -599,13 +629,13 @@ int main( int argc, char **argv )
// set up optimizer options // set up optimizer options
unsigned int optimizer_options = osgUtil::Optimizer::DEFAULT_OPTIMIZATIONS; unsigned int optimizer_options = osgUtil::Optimizer::DEFAULT_OPTIMIZATIONS;
bool release_and_compile = false; bool relase_and_compile = false;
while (arguments.read("--release-and-compile")) while (arguments.read("--release-and-compile"))
{ {
release_and_compile = true; relase_and_compile = true;
} }
seh->setReleaseAndCompileOnEachNewSlide(release_and_compile); seh->setReleaseAndCompileOnEachNewSlide(relase_and_compile);
if (release_and_compile) if (relase_and_compile)
{ {
// make sure that imagery stays around after being applied to textures. // make sure that imagery stays around after being applied to textures.
viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false); viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
@@ -652,10 +682,9 @@ int main( int argc, char **argv )
viewer.getUsage(*arguments.getApplicationUsage()); viewer.getUsage(*arguments.getApplicationUsage());
// if user request help write it out to cout. // if user request help write it out to cout.
unsigned int helpType = 0; if (arguments.read("-h") || arguments.read("--help"))
if ((helpType = arguments.readHelpType()))
{ {
arguments.getApplicationUsage()->write(std::cout, helpType); arguments.getApplicationUsage()->write(osg::notify(osg::NOTICE));
return 1; return 1;
} }
@@ -750,9 +779,6 @@ int main( int argc, char **argv )
osg::ref_ptr<osgDB::ReaderWriter::Options> cacheAllOption = new osgDB::ReaderWriter::Options; osg::ref_ptr<osgDB::ReaderWriter::Options> cacheAllOption = new osgDB::ReaderWriter::Options;
if(suppress_env_tags)
cacheAllOption->setPluginStringData("suppressEnvTags", "true");
cacheAllOption->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_ALL); cacheAllOption->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_ALL);
osgDB::Registry::instance()->setOptions(cacheAllOption.get()); osgDB::Registry::instance()->setOptions(cacheAllOption.get());
@@ -930,7 +956,7 @@ int main( int argc, char **argv )
} }
} }
// update the scene by traversing it with the update visitor which will // update the scene by traversing it with the the update visitor which will
// call all node update callbacks and animations. // call all node update callbacks and animations.
viewer.eventTraversal(); viewer.eventTraversal();
@@ -959,7 +985,7 @@ int main( int argc, char **argv )
} }
// update the scene by traversing it with the update visitor which will // update the scene by traversing it with the the update visitor which will
// call all node update callbacks and animations. // call all node update callbacks and animations.
viewer.updateTraversal(); viewer.updateTraversal();

1
configure vendored Executable file
View File

@@ -0,0 +1 @@
cmake . -DCMAKE_BUILD_TYPE=Release $@

View File

@@ -27,7 +27,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgautocapture) ADD_SUBDIRECTORY(osgautocapture)
ADD_SUBDIRECTORY(osgautotransform) ADD_SUBDIRECTORY(osgautotransform)
ADD_SUBDIRECTORY(osgbillboard) ADD_SUBDIRECTORY(osgbillboard)
ADD_SUBDIRECTORY(osgblenddrawbuffers)
ADD_SUBDIRECTORY(osgblendequation) ADD_SUBDIRECTORY(osgblendequation)
ADD_SUBDIRECTORY(osgcallback) ADD_SUBDIRECTORY(osgcallback)
ADD_SUBDIRECTORY(osgcamera) ADD_SUBDIRECTORY(osgcamera)
@@ -47,6 +46,7 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgfont) ADD_SUBDIRECTORY(osgfont)
ADD_SUBDIRECTORY(osgforest) ADD_SUBDIRECTORY(osgforest)
ADD_SUBDIRECTORY(osgfxbrowser) ADD_SUBDIRECTORY(osgfxbrowser)
ADD_SUBDIRECTORY(osgframerenderer)
ADD_SUBDIRECTORY(osgoutline) ADD_SUBDIRECTORY(osgoutline)
ADD_SUBDIRECTORY(osggameoflife) ADD_SUBDIRECTORY(osggameoflife)
ADD_SUBDIRECTORY(osggeometry) ADD_SUBDIRECTORY(osggeometry)
@@ -65,7 +65,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osglightpoint) ADD_SUBDIRECTORY(osglightpoint)
ADD_SUBDIRECTORY(osglogicop) ADD_SUBDIRECTORY(osglogicop)
ADD_SUBDIRECTORY(osglogo) ADD_SUBDIRECTORY(osglogo)
ADD_SUBDIRECTORY(osggpucull)
ADD_SUBDIRECTORY(osggpx) ADD_SUBDIRECTORY(osggpx)
ADD_SUBDIRECTORY(osggraphicscost) ADD_SUBDIRECTORY(osggraphicscost)
ADD_SUBDIRECTORY(osgmanipulator) ADD_SUBDIRECTORY(osgmanipulator)
@@ -96,7 +95,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgprerendercubemap) ADD_SUBDIRECTORY(osgprerendercubemap)
ADD_SUBDIRECTORY(osgreflect) ADD_SUBDIRECTORY(osgreflect)
ADD_SUBDIRECTORY(osgrobot) ADD_SUBDIRECTORY(osgrobot)
ADD_SUBDIRECTORY(osgSSBO)
ADD_SUBDIRECTORY(osgscalarbar) ADD_SUBDIRECTORY(osgscalarbar)
ADD_SUBDIRECTORY(osgscribe) ADD_SUBDIRECTORY(osgscribe)
ADD_SUBDIRECTORY(osgsequence) ADD_SUBDIRECTORY(osgsequence)
@@ -120,17 +118,14 @@ IF(DYNAMIC_OPENSCENEGRAPH)
ADD_SUBDIRECTORY(osgstereomatch) ADD_SUBDIRECTORY(osgstereomatch)
ADD_SUBDIRECTORY(osgterrain) ADD_SUBDIRECTORY(osgterrain)
ADD_SUBDIRECTORY(osgthreadedterrain) ADD_SUBDIRECTORY(osgthreadedterrain)
ADD_SUBDIRECTORY(osgtransferfunction)
ADD_SUBDIRECTORY(osgtext) ADD_SUBDIRECTORY(osgtext)
ADD_SUBDIRECTORY(osgtext3D) ADD_SUBDIRECTORY(osgtext3D)
ADD_SUBDIRECTORY(osgtexture1D) ADD_SUBDIRECTORY(osgtexture1D)
ADD_SUBDIRECTORY(osgtexture2D) ADD_SUBDIRECTORY(osgtexture2D)
ADD_SUBDIRECTORY(osgtexture2DArray)
ADD_SUBDIRECTORY(osgtexture3D) ADD_SUBDIRECTORY(osgtexture3D)
ADD_SUBDIRECTORY(osgtexturerectangle) ADD_SUBDIRECTORY(osgtexturerectangle)
ADD_SUBDIRECTORY(osgtexturecompression) ADD_SUBDIRECTORY(osgtexturecompression)
ADD_SUBDIRECTORY(osgthirdpersonview) ADD_SUBDIRECTORY(osgthirdpersonview)
ADD_SUBDIRECTORY(osgtransformfeedback)
ADD_SUBDIRECTORY(osguniformbuffer) ADD_SUBDIRECTORY(osguniformbuffer)
ADD_SUBDIRECTORY(osguserstats) ADD_SUBDIRECTORY(osguserstats)
ADD_SUBDIRECTORY(osgvertexprogram) ADD_SUBDIRECTORY(osgvertexprogram)

View File

@@ -7,7 +7,7 @@
#include <iostream> #include <iostream>
// Search in str for all occurrences of spat and replace them with rpat. // Search in str for all occurences of spat and replace them with rpat.
void searchAndReplace(std::string& str, const std::string& spat, const std::string& rpat) void searchAndReplace(std::string& str, const std::string& spat, const std::string& rpat)
{ {
std::string::size_type pos = 0; std::string::size_type pos = 0;
@@ -69,7 +69,6 @@ int main( int argc, char **argv )
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is a utility for converting glsl shader files into char arrays that can be compiled into applications."); arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is a utility for converting glsl shader files into char arrays that can be compiled into applications.");
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
arguments.getApplicationUsage()->addCommandLineOption("--shader <filename>","Shader file to create a .cpp file for."); arguments.getApplicationUsage()->addCommandLineOption("--shader <filename>","Shader file to create a .cpp file for.");
arguments.getApplicationUsage()->addCommandLineOption("--write-to-source-file-directory","Use the path to the source filename as the directory to write to.");
arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters"); arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters");
// if user request help write it out to cout. // if user request help write it out to cout.
@@ -79,13 +78,10 @@ int main( int argc, char **argv )
return 1; return 1;
} }
bool useSamePathAsSourceFile = false;
if (arguments.read("--write-to-source-file-directory")) useSamePathAsSourceFile = true;
std::string filename; std::string filename;
if (arguments.read("--shader",filename)) if (arguments.read("--shader",filename))
{ {
osg::ref_ptr<osg::Shader> shader = osgDB::readRefShaderFile(filename); osg::ref_ptr<osg::Shader> shader = osgDB::readShaderFile(filename);
if (shader.valid()) if (shader.valid())
{ {
std::string name = osgDB::getStrippedName(filename); std::string name = osgDB::getStrippedName(filename);
@@ -100,9 +96,7 @@ int main( int argc, char **argv )
} }
std::string ext = osgDB::getFileExtension(filename); std::string ext = osgDB::getFileExtension(filename);
std::string cppFileName = name + "_" + ext + ".cpp"; std::string cppFileName = osgDB::concatPaths(path, name + "_" + ext + ".cpp");
if (useSamePathAsSourceFile) cppFileName = osgDB::concatPaths(path, cppFileName);
std::string variableName = name + "_" + ext; std::string variableName = name + "_" + ext;
writeShader(shader.get(), cppFileName, variableName); writeShader(shader.get(), cppFileName, variableName);

View File

@@ -59,10 +59,10 @@ class ViewerFrameThread : public OpenThreads::Thread
~ViewerFrameThread() ~ViewerFrameThread()
{ {
if (isRunning()) cancel();
while(isRunning())
{ {
cancel(); OpenThreads::Thread::YieldCurrentThread();
join();
} }
} }

View File

@@ -193,7 +193,7 @@ int main(int argc, char **argv)
osg::ref_ptr<osgQt::QWebViewImage> image = new osgQt::QWebViewImage; osg::ref_ptr<osgQt::QWebViewImage> image = new osgQt::QWebViewImage;
if (arguments.argc()>1) image->navigateTo((arguments[1])); if (arguments.argc()>1) image->navigateTo((arguments[1]));
else image->navigateTo("http://www.openscenegraph.org/"); else image->navigateTo("http://www.youtube.com/");
osgWidget::GeometryHints hints(osg::Vec3(0.0f,0.0f,0.0f), osgWidget::GeometryHints hints(osg::Vec3(0.0f,0.0f,0.0f),
osg::Vec3(1.0f,0.0f,0.0f), osg::Vec3(1.0f,0.0f,0.0f),
@@ -218,7 +218,7 @@ int main(int argc, char **argv)
webView->setPage(webPage); webView->setPage(webPage);
if (arguments.argc()>1) webView->load(QUrl(arguments[1])); if (arguments.argc()>1) webView->load(QUrl(arguments[1]));
else webView->load(QUrl("http://www.openscenegraph.org/")); else webView->load(QUrl("http://www.youtube.com/"));
QGraphicsScene* graphicsScene = new QGraphicsScene; QGraphicsScene* graphicsScene = new QGraphicsScene;
graphicsScene->addWidget(webView); graphicsScene->addWidget(webView);
@@ -248,8 +248,6 @@ int main(int argc, char **argv)
// dialog works too. All these cases use QGraphicsViewAdapter // dialog works too. All these cases use QGraphicsViewAdapter
// under the hood, so why do some work and others don't? // under the hood, so why do some work and others don't?
// //
// <<< FIXED, need TextEditorInteraction >>>
//
// a) osgQtBrowser --useWidgetImage [--fullscreen] (optional) // a) osgQtBrowser --useWidgetImage [--fullscreen] (optional)
// b) Try to click in the QTextEdit and type, or to select text // b) Try to click in the QTextEdit and type, or to select text
// and drag-and-drop it somewhere else in the QTextEdit. These // and drag-and-drop it somewhere else in the QTextEdit. These
@@ -285,8 +283,6 @@ int main(int argc, char **argv)
// QAbstractScrollArea and it should display scrollbars as soon as // QAbstractScrollArea and it should display scrollbars as soon as
// the scene is too large to fit the view. // the scene is too large to fit the view.
// //
// <<< FIXED >>>
//
// a) osgQtBrowser --useWidgetImage --fullscreen // a) osgQtBrowser --useWidgetImage --fullscreen
// b) Resize the OSG window so it's smaller than the QTextEdit. // b) Resize the OSG window so it's smaller than the QTextEdit.
// Scrollbars should appear but don't. // Scrollbars should appear but don't.
@@ -350,7 +346,7 @@ int main(int argc, char **argv)
{ {
QTextEdit* textEdit = new QTextEdit(text); QTextEdit* textEdit = new QTextEdit(text);
textEdit->setReadOnly(false); textEdit->setReadOnly(false);
textEdit->setTextInteractionFlags(Qt::TextEditorInteraction); textEdit->setTextInteractionFlags(Qt::TextEditable);
QPalette palette = textEdit->palette(); QPalette palette = textEdit->palette();
palette.setColor(QPalette::Highlight, Qt::darkBlue); palette.setColor(QPalette::Highlight, Qt::darkBlue);

View File

@@ -1,4 +0,0 @@
SET(TARGET_SRC osgSSBO.cpp )
SETUP_EXAMPLE(osgSSBO)

View File

@@ -1,949 +0,0 @@
//info : osgSSBO example,testing ShaderStorageBufferObjects ,Markus Hein, 2014, osg-3.2.1
//required hardware and driver must support GL >= GL 4.3 or GL ES 3.1 (GL ES not tested, would be nice if someone will test it on a small device)
//testing osg support for Shader Storage Buffer Objects
//version: "first take" from last night session..
#include <osg/StateAttributeCallback>
#include <osg/Texture2D>
#include <osg/Geometry>
#include <osg/Geode>
#include <osgDB/ReadFile>
#include <osgGA/StateSetManipulator>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osg/Node>
#include <osg/PositionAttitudeTransform>
#include <osg/Geometry>
#include <osg/Notify>
#include <osg/MatrixTransform>
#include <osg/Texture2D>
#include <osg/TextureRectangle>
#include <osg/Stencil>
#include <osg/Depth>
#include <osg/Billboard>
#include <osg/Material>
#include <osg/AnimationPath>
#include <osgGA/TrackballManipulator>
#include <osgGA/FlightManipulator>
#include <osgGA/DriveManipulator>
#include <osgUtil/SmoothingVisitor>
#include <osgDB/Registry>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers>
#include <osgViewer/Renderer>
#include <osg/Array>
#include <osg/BoundingSphere>
#include <osg/BufferIndexBinding>
#include <osg/BufferObject>
#include <osg/Group>
#include <osg/Math>
#include <osg/MatrixTransform>
#include <osg/Program>
#include <osg/Shader>
#include <osg/Drawable>
#include <osg/CopyOp>
#include <osg/State>
#include <osg/Matrix>
#include <osg/ShapeDrawable>
#include <osg/GL>
#include <osg/StateSet>
#include <osg/Texture2D>
#include <osg/BlendFunc>
#include <osg/TexEnv>
#include <osg/Material>
#include <osg/PointSprite>
#include <osg/Program>
#include <osg/Notify>
#include <osg/Point>
#include <osg/io_utils>
#include <osg/VertexProgram>
#include <osgText/Font>
#include <osgText/Text>
#include <osgDB/ReadFile>
#include <osgDB/WriteFile>
#include <osgDB/FileNameUtils>
#include <osgUtil/Optimizer>
#include <iostream>
#include <typeinfo>
using namespace osg;
//todo .. #define COMPUTATION_IN_SEPARATE_THREAD
#define WORK_GROUP_SIZE 16
#define PRERENDER_ANTIALIASINGMULTISAMPLES 16
#define PRERENDER_HIGH_QUALITY_ANTIALIASING
#define PRERENDER_WIDTH 1920
#define PRERENDER_HEIGHT 1080
#define SUB_PLACEMENT_OFFSET_HORIZONTAL 0.5
#define SUB_PLACEMENT_OFFSET_VERTICAL 0.5
enum BufferOffset
{
POSITION_NOW_OFFSET,
POSITION_OLD_OFFSET,
POSITION_INIT_OFFSET,
VELOCITY_NOW_OFFSET,
VELOCITY_OLD_OFFSET,
VELOCITY_INIT_OFFSET,
ACCELERATION_OFFSET,
PROPERTIES_OFFSET,
OFFSET_END
};
const int __numDataValuesPerChannel = OFFSET_END;
const int __numChannels = 4;
//512x512x4x7 = 7.340.032 floats in SSBO on GPU
const int NUM_ELEMENTS_X = 512;
const int NUM_ELEMENTS_Y = 512;
float random(float min, float max) { return min + (max - min)*(float)rand() / (float)RAND_MAX; }
enum Channel
{
RED_CHANNEL,
GREEN_CHANNEL,
BLUE_CHANNEL,
ALPHA_CHANNEL,
RGB_CHANNEL,
RGBA_CHANNEL
};
class ShaderStorageBufferCallback : public osg::StateAttributeCallback
{
public:
void operator() (osg::StateAttribute* attr, osg::NodeVisitor* nv)
{
//if you need to process the data in your app-code , better leaving it on GPU and processing there, uploading per frame will make it slow
#if 0
osg::ShaderStorageBufferBinding* ssbb = static_cast<osg::ShaderStorageBufferBinding*>(attr);
osg::ShaderStorageBufferObject* ssbo
= static_cast<osg::ShaderStorageBufferObject*>(ssbb->getBufferObject());
osg::FloatArray* array = static_cast<osg::FloatArray*>(ssbo->getBufferData(0));
float someValue = array->at(0);
//std::cout << "someValue now: " << someValue << std::endl;
//data transfer performance test
// array->dirty();
#endif
}
};
//do not forget to set OSG_FILE_PATH to default OSG-Data and make sure the new shaders are copied there under"shaders"
class ComputeNode : public osg::PositionAttitudeTransform
{
public:
osg::ref_ptr<osg::Program> _computeProgram;
osg::ref_ptr<osg::Shader> _computeShader; //compute and write position data in SSBO
osg::ref_ptr<osg::Shader> _vertexShader; //reading position data from SSBO (OBS!: make sure glMemoryBuffer() is syncing this)
osg::ref_ptr<osg::Shader> _geometryShader; //building a quad looking to the camera
osg::ref_ptr<osg::Shader> _fragmentShader; //use false-colors etc. for making your data visible
osg::ref_ptr<osg::Node> _helperNode; // coordinate system node
ref_ptr<osg::ShaderStorageBufferObject> _ssbo;
ref_ptr<osg::ShaderStorageBufferBinding> _ssbb;
GLfloat* _data; // some data we upload to GPU, initialised with random values
osg::ref_ptr<FloatArray> _dataArray; //
osg::ref_ptr<osg::Group> _computationResultsRenderGroup;
osg::ref_ptr<osg::Program> _computationResultsRenderProgram;
osg::ref_ptr<osg::StateSet> _computationResultsRenderStateSet;
std::string _computeShaderSourcePath;
std::string _vertexShaderSourcePath;
std::string _geometryShaderSourcePath;
std::string _fragmentShaderSourcePath;
void addHelperGeometry();
void addDataMonitor(osg::Vec3 placement, osg::Vec3 relativePlacement, float scale, Channel channel, BufferOffset shaderBufferOffset, std::string labelcaption, float minDataRange, float maxDataRange);
void addComputationResultsRenderTree();
void initComputingSetup();
ComputeNode()
{
const char* envOsgFilePath = getenv("OSG_FILE_PATH");
std::stringstream computeshaderpath; computeshaderpath << envOsgFilePath << "/shaders/osgssboComputeShader.cs";
_computeShaderSourcePath = computeshaderpath.str();
std::stringstream vertexshaderpath; vertexshaderpath << envOsgFilePath << "/shaders/osgssboVertexShader.vs";
_vertexShaderSourcePath = vertexshaderpath.str();
std::stringstream geometryshaderpath; geometryshaderpath << envOsgFilePath << "/shaders/osgssboGeometryShader.gs";
_geometryShaderSourcePath = geometryshaderpath.str();
std::stringstream fragmentshaderpath; fragmentshaderpath << envOsgFilePath << "/shaders/osgssboFragmentShader.fs";
_fragmentShaderSourcePath = fragmentshaderpath.str();
}
};
class ComputeNodeUpdateCallback : public osg::NodeCallback
{
public:
ComputeNode* _computeNode;
osg::Timer_t _prevShaderUpdateTime;
osg::Timer _timer;
ComputeNodeUpdateCallback(){}
ComputeNodeUpdateCallback(ComputeNode* computeNode)
{
_computeNode = computeNode;
_prevShaderUpdateTime = 0;
}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
{
osg::Timer_t currTime = _timer.tick();
if (_timer.delta_s(_prevShaderUpdateTime, currTime) > 1.0) //one second interval for shader-changed-do-reload check
{
osg::ref_ptr<osg::Shader> reloadedshader;
std::string runningSource;
std::string reloadedstring;
if (_computeNode->_computeShader.valid())
{
runningSource = _computeNode->_computeShader->getShaderSource();
reloadedshader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeNode->_computeShaderSourcePath);
reloadedstring = reloadedshader->getShaderSource();
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
{
_computeNode->_computeProgram->removeShader(_computeNode->_computeShader.get());
_computeNode->_computeShader = reloadedshader.get();
_computeNode->_computeProgram->addShader(_computeNode->_computeShader.get());
}
}
if (_computeNode->_vertexShader.valid())
{
runningSource = _computeNode->_vertexShader->getShaderSource();
reloadedshader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _computeNode->_vertexShaderSourcePath);
reloadedstring = reloadedshader->getShaderSource();
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
{
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_vertexShader.get());
_computeNode->_vertexShader = reloadedshader.get();
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_vertexShader.get());
}
}
if (_computeNode->_geometryShader.valid())
{
runningSource = _computeNode->_geometryShader->getShaderSource();
reloadedshader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _computeNode->_geometryShaderSourcePath);
reloadedstring = reloadedshader->getShaderSource();
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
{
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_geometryShader.get());
_computeNode->_geometryShader = reloadedshader.get();
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_geometryShader.get());
}
}
if (_computeNode->_fragmentShader.valid())
{
runningSource = _computeNode->_fragmentShader->getShaderSource();
reloadedshader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _computeNode->_fragmentShaderSourcePath);
reloadedstring = reloadedshader->getShaderSource();
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
{
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_fragmentShader.get());
_computeNode->_fragmentShader = reloadedshader.get();
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_fragmentShader.get());
}
}
_prevShaderUpdateTime = _timer.tick();
}
traverse(node, nv);
}
};
//set OSG_FILE_PATH for loading axes.osgt
void ComputeNode::addHelperGeometry()
{
_helperNode = osgDB::readRefNodeFile("axes.osgt");
if (_helperNode.valid())
{
addChild(_helperNode.get());
}
//osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform;
//pat->setPosition(osg::Vec3(0.5, 0, 0.5));
//osg::Geode *sphereGeode = new osg::Geode;
//float radius = 0.5f;
//osg::TessellationHints* hints = new osg::TessellationHints;
//hints->setDetailRatio(0.9f);
//osg::ShapeDrawable* sphere = new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), radius), hints);
//sphereGeode->addDrawable(sphere);
//sphere->setColor(osg::Vec4(0, 1, 0, 0.1));
//osg::StateSet* stateset = sphereGeode->getOrCreateStateSet();
//osg::BlendFunc *blend = new osg::BlendFunc;
//blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
//stateset->setAttributeAndModes(blend, osg::StateAttribute::ON);
//pat->addChild(sphereGeode);
//addChild(pat);
}
void ComputeNode::addDataMonitor(osg::Vec3 placement, osg::Vec3 relativePlacement, float scale, Channel colorchannel, BufferOffset shaderStorageBufferOffset, std::string labelCaption, float minDataRange, float maxDataRange)
{
osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform;
pat->setPosition(relativePlacement);
addChild(pat);
osg::Geometry* geom;
if (NUM_ELEMENTS_X >= NUM_ELEMENTS_Y)
{
float ratio = (float)((float)NUM_ELEMENTS_Y / (float)NUM_ELEMENTS_X);
geom = osg::createTexturedQuadGeometry(placement, osg::Vec3(1.0f*scale, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, ratio*1.0f*scale));
}
else
{
float ratio = (float)((float)NUM_ELEMENTS_X / (float)NUM_ELEMENTS_Y);
geom = osg::createTexturedQuadGeometry(placement, osg::Vec3(ratio*1.0f*scale, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 1.0f*scale));
}
geom->setVertexAttribArray(1, geom->getTexCoordArray(0), osg::Array::BIND_PER_VERTEX);
osg::ref_ptr<osg::Geode> quad = new osg::Geode;
quad->addDrawable(geom);
quad->setStateSet(getOrCreateStateSet());
pat->addChild(quad.get());
static const char* vertexShaderSrcChannelMonitor = {
"#version 430 \n"
"uniform int numRows;\n"
"uniform int numCols;\n"
"uniform float osg_FrameTime;\n"
"uniform mat4 osg_ProjectionMatrix;\n"
"uniform mat4 osg_ModelViewMatrix;\n"
"out vec2 texCoordFromVertexShader;\n"
"struct particle{ float x; float y; float z; float w;};"
"layout (location = 0) in vec3 vertexpos;\n"
"attribute vec2 tex_coords;\n"
"void main() {\n"
"texCoordFromVertexShader.xy = tex_coords.xy; gl_Position = ( osg_ProjectionMatrix * osg_ModelViewMatrix * vec4(vertexpos.x,vertexpos.y,vertexpos.z,1) ); \n"
"}\n"
};
std::stringstream fragmentshaderstringstreamChannelMonitor;
fragmentshaderstringstreamChannelMonitor << "#version 430\n";
fragmentshaderstringstreamChannelMonitor << "uniform int numRows;\n";
fragmentshaderstringstreamChannelMonitor << "uniform int numCols;\n";
fragmentshaderstringstreamChannelMonitor << "uniform float dataRangeMin;\n";
fragmentshaderstringstreamChannelMonitor << "uniform float dataRangeMax;\n";
fragmentshaderstringstreamChannelMonitor << "in vec2 texCoordFromVertexShader;\n";
fragmentshaderstringstreamChannelMonitor << "struct particle{ float x; float y; float z; float w;};";
fragmentshaderstringstreamChannelMonitor << "layout(std140, binding=0) coherent buffer particles{particle p[];}; ";
fragmentshaderstringstreamChannelMonitor << "\n";
fragmentshaderstringstreamChannelMonitor << "void main(void)\n";
fragmentshaderstringstreamChannelMonitor << "{\n";
fragmentshaderstringstreamChannelMonitor << "ivec2 storePos = ivec2(numRows*texCoordFromVertexShader.x, numCols*texCoordFromVertexShader.y); particle particleData = p[" << shaderStorageBufferOffset * NUM_ELEMENTS_X*NUM_ELEMENTS_Y << " + (storePos.x*numRows + storePos.y)]; ";
//fragmentshaderstringstreamChannelMonitor << " memoryBarrierBuffer(); \n";
fragmentshaderstringstreamChannelMonitor << " float dataRangeMultiplier = 1.0 / abs(dataRangeMax - dataRangeMin); \n";
switch (colorchannel)
{
case RED_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y =0.0; color.z = 0.0; color.w = 1.0; gl_FragColor = color;\n";
break;
}
case GREEN_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.0; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.0; color.w = 1.0; gl_FragColor = color;\n";
break;
}
case BLUE_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.0; color.y = 0.0; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 0.0 ; gl_FragColor = color;\n";
break;
}
case ALPHA_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.w; color.y = 0.5+dataRangeMultiplier*particleData.w; color.z = 0.5+dataRangeMultiplier*particleData.w; color.w = 0.5+0.5*particleData.w; gl_FragColor = color;\n";
break;
}
case RGB_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 1.0; gl_FragColor = color;\n";
break;
}
case RGBA_CHANNEL:
{
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 0.5+0.5*particleData.w; gl_FragColor = color;\n";
break;
}
}
fragmentshaderstringstreamChannelMonitor << "}\n";
osg::Program * program = new osg::Program;
program->addShader(new osg::Shader(osg::Shader::VERTEX, vertexShaderSrcChannelMonitor));
program->addShader(new osg::Shader(osg::Shader::FRAGMENT, fragmentshaderstringstreamChannelMonitor.str().c_str()));
program->addBindAttribLocation("tex_coords", 1);
osg::StateSet* ss = geom->getOrCreateStateSet();
ss->setAttributeAndModes(program, osg::StateAttribute::ON);
ss->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_X));
ss->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_Y));
ss->addUniform(new osg::Uniform("dataRangeMin", (float)minDataRange));
ss->addUniform(new osg::Uniform("dataRangeMax", (float)maxDataRange));
ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
//add a label
osg::ref_ptr<osgText::Text> text = new osgText::Text;
osg::ref_ptr<osgText::Font> font = osgText::readRefFontFile("fonts/arial.ttf");
text->setFont(font);
text->setColor(osg::Vec4(1, 1, 1, 1));
text->setCharacterSize(0.1*scale);
text->setPosition(placement + osg::Vec3(0.05, 0.05, 0));
pat->setName(labelCaption);
text->setText(pat->getName());
text->setBackdropType(osgText::Text::OUTLINE);
text->setBackdropImplementation(osgText::Text::POLYGON_OFFSET);
text->setBackdropOffset(0.05f);
text->setBackdropColor(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f));
quad->addDrawable(text);
pat->addChild(quad.get());
}
//compute texture image , taken from osgspotlight
osg::Image* createSpotLightImage(const osg::Vec4& centerColour, const osg::Vec4& backgroudColour, unsigned int size, float power)
{
osg::Image* image = new osg::Image;
image->allocateImage(size, size, 1,
GL_RGBA, GL_UNSIGNED_BYTE);
float mid = (float(size) - 1)*0.5f;
float div = 2.0f / float(size);
for (unsigned int r = 0; r < size; ++r)
{
unsigned char* ptr = image->data(0, r, 0);
for (unsigned int c = 0; c < size; ++c)
{
float dx = (float(c) - mid)*div;
float dy = (float(r) - mid)*div;
float r = powf(1.0f - sqrtf(dx*dx + dy*dy), power);
if (r < 0.0f) r = 0.0f;
osg::Vec4 color = centerColour*r + backgroudColour*(1.0f - r);
*ptr++ = (unsigned char)((color[0])*255.0f);
*ptr++ = (unsigned char)((color[1])*255.0f);
*ptr++ = (unsigned char)((color[2])*255.0f);
*ptr++ = (unsigned char)((color[3])*255.0f);
}
}
return image;
}
void ComputeNode::addComputationResultsRenderTree()
{
_computationResultsRenderProgram = new osg::Program;
_vertexShader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _vertexShaderSourcePath);
_computationResultsRenderProgram->addShader(_vertexShader.get());
_geometryShader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _geometryShaderSourcePath);
_computationResultsRenderProgram->addShader(_geometryShader.get());
_fragmentShader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _fragmentShaderSourcePath);
_computationResultsRenderProgram->addShader(_fragmentShader.get());
_computationResultsRenderProgram->addBindAttribLocation("tex_coords", 1);
_computationResultsRenderGroup = new osg::Group;
_computationResultsRenderGroup->setDataVariance(osg::Object::DYNAMIC);
_computationResultsRenderStateSet = _computationResultsRenderGroup->getOrCreateStateSet();
_computationResultsRenderStateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
osg::PointSprite *sprite = new osg::PointSprite;
int texture_unit = 0;
_computationResultsRenderStateSet->setTextureAttributeAndModes(texture_unit, sprite, osg::StateAttribute::ON);
_computationResultsRenderStateSet->setAttributeAndModes(_computationResultsRenderProgram.get(), osg::StateAttribute::ON);
_computationResultsRenderStateSet->addUniform(new osg::Uniform("particleTexture", texture_unit));
_computationResultsRenderStateSet->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_X));
_computationResultsRenderStateSet->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_Y));
_computationResultsRenderStateSet->setMode(GL_POINT_SMOOTH, osg::StateAttribute::ON);
_computationResultsRenderStateSet->setMode(GL_VERTEX_PROGRAM_POINT_SIZE_ARB, osg::StateAttribute::ON);
_computationResultsRenderStateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);
_computationResultsRenderStateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
osg::Texture2D *tex = new osg::Texture2D();
osg::Image* particleImage = createSpotLightImage(osg::Vec4(1, 0, 0, 1), osg::Vec4(0.5, 0, 0, 0.0), 32, 0.7);
if (particleImage)
{
tex->setImage(particleImage);
}
_computationResultsRenderStateSet->setTextureAttributeAndModes(texture_unit, tex, osg::StateAttribute::ON);
osg::BlendFunc *blend = new osg::BlendFunc;
if (false) //emissive particles
{
blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE);
}
else
{
blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
}
_computationResultsRenderStateSet->setAttributeAndModes(blend, osg::StateAttribute::ON);
osg::Depth* depth = new osg::Depth;
depth->setRange(0.0f, 0.0f);
depth->setFunction(osg::Depth::ALWAYS);
depth->setWriteMask(false);
depth->setFunction(osg::Depth::ALWAYS);
_computationResultsRenderStateSet->setAttributeAndModes(depth, osg::StateAttribute::OFF);
osg::Geode* particleGeode = new osg::Geode;
unsigned int numVertices = NUM_ELEMENTS_X*NUM_ELEMENTS_Y;
osg::Geometry* particleGeometry = new osg::Geometry;
particleGeometry->setUseDisplayList(false);
particleGeometry->setUseVertexBufferObjects(true);
osg::Vec3Array* vertexarray = new osg::Vec3Array;
osg::Vec2Array* tcoords = new osg::Vec2Array;
osg::Vec2 bottom_texcoord(0.0f, 0.0f);
osg::Vec2 dx_texcoord(1.0f / (float)(NUM_ELEMENTS_X), 0.0f);
osg::Vec2 dy_texcoord(0.0f, 1.0f / (float)(NUM_ELEMENTS_Y));
for (int i = 0; i < NUM_ELEMENTS_X; i++)
{
osg::Vec2 texcoord = bottom_texcoord + dy_texcoord*(float)i;
for (int j = 0; j < NUM_ELEMENTS_Y; j++)
{
vertexarray->push_back(osg::Vec3(texcoord.x(), texcoord.y(), 0.0));
tcoords->push_back(osg::Vec2(texcoord.x(), texcoord.y()));
texcoord += dx_texcoord;
}
}
particleGeometry->setVertexArray(vertexarray);
particleGeometry->addPrimitiveSet(new osg::DrawArrays(GL_POINTS, 0, numVertices));
particleGeometry->setTexCoordArray(0, tcoords);
//this glMemoryBarrier thing... not sure if we could better do instanced drawing? all the data is in Shader Storage Buffer..
particleGeometry->setVertexAttribArray(1, particleGeometry->getTexCoordArray(0), osg::Array::BIND_PER_VERTEX);
_computationResultsRenderGroup->addChild(particleGeode);
particleGeode->addDrawable(particleGeometry);
addChild(_computationResultsRenderGroup.get());
}
void ComputeNode::initComputingSetup()
{
_computeProgram = new osg::Program;
_computeProgram->setComputeGroups((NUM_ELEMENTS_X / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_X / WORK_GROUP_SIZE), (NUM_ELEMENTS_Y / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_Y / WORK_GROUP_SIZE), 1);
_computeShader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeShaderSourcePath);
_computeProgram->addShader(_computeShader.get());
setDataVariance(osg::Object::DYNAMIC);
osg::StateSet* statesetComputation = getOrCreateStateSet();
statesetComputation->setAttributeAndModes(_computeProgram.get());
statesetComputation->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_X));
statesetComputation->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_Y));
statesetComputation->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
//blocksize
int numParticles = NUM_ELEMENTS_X * NUM_ELEMENTS_Y;
const unsigned blockSize = numParticles * __numChannels * __numDataValuesPerChannel* sizeof(GLfloat);
//init all the particle data array
int idx = 0;
_data = new GLfloat[NUM_ELEMENTS_X * NUM_ELEMENTS_Y * __numChannels * __numDataValuesPerChannel];
_dataArray = new FloatArray;
//init the data array somehow, this way all is stored in one BufferObject. maybe better using multiple buffers instead? not sure what is faster and better for threading
for (int d = 0; d < __numDataValuesPerChannel; ++d)
{
for (int i = 0; i < NUM_ELEMENTS_X; ++i)
{
for (int j = 0; j < NUM_ELEMENTS_Y; ++j)
{
for (int k = 0; k < __numChannels; ++k)
{
switch (k)
{
case (RED_CHANNEL) :
{
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
{
*_data = random(0.25, 0.75);
}
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
{
*_data = random(-2.4, 2.4);
}
if (d == ACCELERATION_OFFSET) //acceleration
{
*_data = random(-3.0, 3.0);
}
if (d == PROPERTIES_OFFSET) //property particle mass (compute shader is computing sphere mass from radius instead)
{
*_data = random(0.2, 15.0);
}
break;
}
case (GREEN_CHANNEL) :
{
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
{
*_data = random(0.25, 0.75);
}
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
{
*_data = random(-2.4, 2.4);
}
if (d == ACCELERATION_OFFSET)//acceleration
{
*_data = random(-3.0, 3.0);
}
if (d == PROPERTIES_OFFSET) //property particle radius
{
*_data = random(0.07, 0.219);
}
break;
}
case (BLUE_CHANNEL) :
{
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
{
*_data = random(0.25, 0.75);
}
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
{
*_data = random(-2.4, 2.4);
}
if (d == ACCELERATION_OFFSET)//acceleration
{
*_data = random(-3.0, 3.0);
}
if (d == PROPERTIES_OFFSET) //place for some other property
{
*_data = random(0.0, 0.0);
}
break;
}
case (ALPHA_CHANNEL) :
{
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
{
*_data = random(1.0, 1.0);
}
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
{
*_data = random(-2.4, 2.4);
}
if (d == ACCELERATION_OFFSET) //acceleration
{
//*_data = random(1.0, 1.0);
*_data = random(0.0, 0.0);
}
if (d == PROPERTIES_OFFSET) //place for some other property
{
*_data = random(0.3, 0.3);
}
break;
}
}
_dataArray->push_back(*_data);
_data++;
idx++;
}
}
}
}
_ssbo = new osg::ShaderStorageBufferObject;
_dataArray->setBufferObject(_ssbo.get());
_ssbb = new osg::ShaderStorageBufferBinding(0, _ssbo.get(), 0, blockSize);
statesetComputation->setAttributeAndModes(_ssbb.get(), osg::StateAttribute::ON);
//option, do something useful with data or test the transfer speed
//_ssbb->setUpdateCallback(new ShaderStorageBufferCallback);
//adding a quad , visualizing data in buffer
addDataMonitor(osg::Vec3(0, -1, 0), osg::Vec3(SUB_PLACEMENT_OFFSET_HORIZONTAL * 0, -SUB_PLACEMENT_OFFSET_VERTICAL * -2.0, SUB_PLACEMENT_OFFSET_HORIZONTAL * 0), 1.0, RGB_CHANNEL, POSITION_NOW_OFFSET, "X,Y,Z - PositionNow", -1.0, 1.0);
//the coord from default dataset
addHelperGeometry();
addComputationResultsRenderTree();
}
//taken from osgdistorsion example for getting it nice on screen with antialiasing
osg::Node* createPrerenderSubgraph(osg::Node* subgraph, const osg::Vec4& clearColour)
{
osg::Group* prerenderNode = new osg::Group;
unsigned int tex_width = PRERENDER_WIDTH;
unsigned int tex_height = PRERENDER_HEIGHT;
osg::Texture2D* texture = new osg::Texture2D;
texture->setTextureSize(tex_width, tex_height);
texture->setInternalFormat(GL_RGBA);
texture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
texture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
{
osg::Camera* prerenderCamera = new osg::Camera;
prerenderCamera->setClearColor(clearColour);
prerenderCamera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
prerenderCamera->setReferenceFrame(osg::Transform::RELATIVE_RF);
prerenderCamera->setProjectionMatrix(osg::Matrixd::identity());
prerenderCamera->setViewMatrix(osg::Matrixd::identity());
prerenderCamera->setViewport(0, 0, tex_width, tex_height);
prerenderCamera->setRenderOrder(osg::Camera::PRE_RENDER);
prerenderCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
prerenderCamera->attach(osg::Camera::COLOR_BUFFER0, texture, 0, 0, false, PRERENDER_ANTIALIASINGMULTISAMPLES, PRERENDER_ANTIALIASINGMULTISAMPLES);
prerenderCamera->addChild(subgraph);
prerenderNode->addChild(prerenderCamera);
}
{
osg::Geometry* polyGeom = new osg::Geometry();
polyGeom->setSupportsDisplayList(false);
osg::Vec3 origin(0.0f, 0.0f, 0.0f);
osg::Vec3 xAxis(1.0f, 0.0f, 0.0f);
osg::Vec3 yAxis(0.0f, 1.0f, 0.0f);
float height = 1024.0f;
float width = 1280.0f;
int noSteps = 3;
osg::Vec3Array* vertices = new osg::Vec3Array;
osg::Vec2Array* texcoords = new osg::Vec2Array;
osg::Vec4Array* colors = new osg::Vec4Array;
osg::Vec3 bottom = origin;
osg::Vec3 dx = xAxis*(width / ((float)(noSteps - 1)));
osg::Vec3 dy = yAxis*(height / ((float)(noSteps - 1)));
osg::Vec2 bottom_texcoord(0.0f, 0.0f);
osg::Vec2 dx_texcoord(1.0f / (float)(noSteps - 1), 0.0f);
osg::Vec2 dy_texcoord(0.0f, 1.0f / (float)(noSteps - 1));
int i, j;
for (i = 0; i < noSteps; ++i)
{
osg::Vec3 cursor = bottom + dy*(float)i;
osg::Vec2 texcoord = bottom_texcoord + dy_texcoord*(float)i;
for (j = 0; j < noSteps; ++j)
{
vertices->push_back(cursor);
texcoords->push_back(osg::Vec2((sin(texcoord.x()*osg::PI - osg::PI*0.5) + 1.0f)*0.5f, (sin(texcoord.y()*osg::PI - osg::PI*0.5) + 1.0f)*0.5f));
colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
cursor += dx;
texcoord += dx_texcoord;
}
}
polyGeom->setVertexArray(vertices);
polyGeom->setColorArray(colors, osg::Array::BIND_PER_VERTEX);
polyGeom->setTexCoordArray(0, texcoords);
for (i = 0; i < noSteps - 1; ++i)
{
osg::DrawElementsUShort* elements = new osg::DrawElementsUShort(osg::PrimitiveSet::QUAD_STRIP);
for (j = 0; j < noSteps; ++j)
{
elements->push_back(j + (i + 1)*noSteps);
elements->push_back(j + (i)*noSteps);
}
polyGeom->addPrimitiveSet(elements);
}
osg::StateSet* stateset = polyGeom->getOrCreateStateSet();
stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
osg::Geode* geode = new osg::Geode();
geode->addDrawable(polyGeom);
osg::Camera* nestedRenderCamera = new osg::Camera;
nestedRenderCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
nestedRenderCamera->setViewMatrix(osg::Matrix::identity());
nestedRenderCamera->setProjectionMatrixAsOrtho2D(0, 1280, 0, 1024);
nestedRenderCamera->setRenderOrder(osg::Camera::NESTED_RENDER);
nestedRenderCamera->addChild(geode);
prerenderNode->addChild(nestedRenderCamera);
}
return prerenderNode;
}
int main(int argc, char** argv)
{
osg::ArgumentParser arguments(&argc, argv);
osgViewer::Viewer viewer;
osg::ref_ptr<osg::Group> scene = new osg::Group;
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
viewer.addEventHandler(new osgViewer::StatsHandler);
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
viewer.addEventHandler(new osgViewer::ThreadingHandler);
viewer.getCamera()->setProjectionMatrixAsPerspective(60.0f, 1.33333, 0.01, 100.0);
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
viewer.setUpViewInWindow(11, 11, 800 + 11, 600 + 11);
//viewer.setUpViewOnSingleScreen(0); // !!
viewer.getCamera()->setClearColor(osg::Vec4(0.3, 0.3, 0.3, 1.0));
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);// we can play with threading models later
osg::ref_ptr<ComputeNode> computeNode = new ComputeNode();
computeNode->setPosition(osg::Vec3(0, 0, 0));
computeNode->setUpdateCallback(new ComputeNodeUpdateCallback(computeNode.get())); // on-the-fly reloading the shaders if shader source on disk is changed
computeNode->initComputingSetup();
scene->addChild(computeNode.get());
scene->addChild(computeNode->_computationResultsRenderGroup.get());
#ifdef PRERENDER_HIGH_QUALITY_ANTIALIASING
viewer.setSceneData(createPrerenderSubgraph(scene.get(), osg::Vec4(0.3, 0.4, 0.6, 1)));
#else
viewer.setSceneData(scene.get());
#endif
viewer.realize();
viewer.getCamera()->getGraphicsContext()->getState()->setUseModelViewAndProjectionUniforms(true);
viewer.run();
return 1;
}

View File

@@ -56,7 +56,18 @@ public:
traverse(node); traverse(node);
} }
void apply(osg::Drawable& drawable) void apply(osg::Geode& node)
{
if (!_useStateSets && node.getStateSet()) node.setStateSet(0);
for(unsigned int i = 0; i<node.getNumDrawables(); ++i)
{
process(*node.getDrawable(i));
}
traverse(node);
}
void process(osg::Drawable& drawable)
{ {
if (!_useStateSets && drawable.getStateSet()) if (!_useStateSets && drawable.getStateSet())
{ {
@@ -540,7 +551,6 @@ public:
const std::string& outputFilename, const std::string& outputFilename,
SceneGraphProcessor* sceneGraphProcessor, SceneGraphProcessor* sceneGraphProcessor,
osgUtil::IncrementalCompileOperation* ico): osgUtil::IncrementalCompileOperation* ico):
osg::Referenced(true),
Operation("DatabasePaging Operation", false), Operation("DatabasePaging Operation", false),
_filename(filename), _filename(filename),
_outputFilename(outputFilename), _outputFilename(outputFilename),
@@ -555,7 +565,7 @@ public:
osg::notify(osg::NOTICE)<<"LoadAndCompileOperation "<<_filename<<std::endl; osg::notify(osg::NOTICE)<<"LoadAndCompileOperation "<<_filename<<std::endl;
_modelReadyToMerge = false; _modelReadyToMerge = false;
_loadedModel = osgDB::readRefNodeFile(_filename); _loadedModel = osgDB::readNodeFile(_filename);
if (_loadedModel.valid()) if (_loadedModel.valid())
{ {

View File

@@ -136,9 +136,9 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
osg::AnimationPath* animationPath = createAnimationPath(center,radius,animationLength); osg::AnimationPath* animationPath = createAnimationPath(center,radius,animationLength);
osg::ref_ptr<osg::Group> model = new osg::Group; osg::Group* model = new osg::Group;
osg::ref_ptr<osg::Node> glider = osgDB::readRefNodeFile("glider.osgt"); osg::Node* glider = osgDB::readNodeFile("glider.osgt");
if (glider) if (glider)
{ {
const osg::BoundingSphere& bs = glider->getBound(); const osg::BoundingSphere& bs = glider->getBound();
@@ -159,7 +159,7 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
model->addChild(xform); model->addChild(xform);
} }
osg::ref_ptr<osg::Node> cessna = osgDB::readRefNodeFile("cessna.osgt"); osg::Node* cessna = osgDB::readNodeFile("cessna.osgt");
if (cessna) if (cessna)
{ {
const osg::BoundingSphere& bs = cessna->getBound(); const osg::BoundingSphere& bs = cessna->getBound();
@@ -173,26 +173,26 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
positioned->addChild(cessna); positioned->addChild(cessna);
osg::ref_ptr<osg::MatrixTransform> xform = new osg::MatrixTransform; osg::MatrixTransform* xform = new osg::MatrixTransform;
xform->setUpdateCallback(new osg::AnimationPathCallback(animationPath,0.0f,2.0)); xform->setUpdateCallback(new osg::AnimationPathCallback(animationPath,0.0f,2.0));
xform->addChild(positioned); xform->addChild(positioned);
model->addChild(xform); model->addChild(xform);
} }
return model.release(); return model;
} }
osg::ref_ptr<osg::Group> createModel(bool overlay, osgSim::OverlayNode::OverlayTechnique technique) osg::Node* createModel(bool overlay, osgSim::OverlayNode::OverlayTechnique technique)
{ {
osg::Vec3 center(0.0f,0.0f,0.0f); osg::Vec3 center(0.0f,0.0f,0.0f);
float radius = 100.0f; float radius = 100.0f;
osg::ref_ptr<osg::Group> root = new osg::Group; osg::Group* root = new osg::Group;
float baseHeight = center.z()-radius*0.5; float baseHeight = center.z()-radius*0.5;
osg::ref_ptr<osg::Node> baseModel = createBase(osg::Vec3(center.x(), center.y(), baseHeight),radius); osg::Node* baseModel = createBase(osg::Vec3(center.x(), center.y(), baseHeight),radius);
osg::ref_ptr<osg::Node> movingModel = createMovingModel(center,radius*0.8f); osg::Node* movingModel = createMovingModel(center,radius*0.8f);
if (overlay) if (overlay)
{ {
@@ -232,14 +232,14 @@ int main( int argc, char **argv )
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Group> model = createModel(overlay, technique); osg::Node* model = createModel(overlay, technique);
if (!model) if (!model)
{ {
return 1; return 1;
} }
// tilt the scene so the default eye position is looking down on the model. // tilt the scene so the default eye position is looking down on the model.
osg::ref_ptr<osg::MatrixTransform> rootnode = new osg::MatrixTransform; osg::MatrixTransform* rootnode = new osg::MatrixTransform;
rootnode->setMatrix(osg::Matrix::rotate(osg::inDegrees(30.0f),1.0f,0.0f,0.0f)); rootnode->setMatrix(osg::Matrix::rotate(osg::inDegrees(30.0f),1.0f,0.0f,0.0f));
rootnode->addChild(model); rootnode->addChild(model);

View File

@@ -196,8 +196,8 @@ int main (int argc, char* argv[])
while (psr.read("--software")) { hardware = false; } while (psr.read("--software")) { hardware = false; }
while (psr.read("--number", maxChar)) {} while (psr.read("--number", maxChar)) {}
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFiles(psr);
osg::ref_ptr<osg::Group> root = dynamic_cast<osg::Group*>(node.get()); osg::ref_ptr<osg::Group> root = dynamic_cast<osg::Group*>(osgDB::readNodeFiles(psr));
if (!root) if (!root)
{ {
std::cout << psr.getApplicationName() <<": No data loaded" << std::endl; std::cout << psr.getApplicationName() <<": No data loaded" << std::endl;

View File

@@ -50,7 +50,7 @@ struct GeometryFinder : public osg::NodeVisitor
osg::ref_ptr<osg::Geometry> getShape(const std::string& name) osg::ref_ptr<osg::Geometry> getShape(const std::string& name)
{ {
osg::ref_ptr<osg::Node> shape0 = osgDB::readRefNodeFile(name); osg::ref_ptr<osg::Node> shape0 = osgDB::readNodeFile(name);
if (shape0) if (shape0)
{ {
GeometryFinder finder; GeometryFinder finder;

View File

@@ -71,7 +71,7 @@ int main (int argc, char* argv[])
osg::ref_ptr<osg::Geode> geode = new osg::Geode; osg::ref_ptr<osg::Geode> geode = new osg::Geode;
geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0f,0.0f,0.0f),0.5))); geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0f,0.0f,0.0f),0.5)));
//Transformation to be manipulated by the animation //Tranformation to be manipulated by the animation
osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform(); osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform();
trans->setName("AnimatedNode"); trans->setName("AnimatedNode");
//Dynamic object, has to be updated during update traversal //Dynamic object, has to be updated during update traversal
@@ -84,7 +84,7 @@ int main (int argc, char* argv[])
//The second element modifies the rotation around x-axis //The second element modifies the rotation around x-axis
updatecb->getStackedTransforms().push_back(new osgAnimation::StackedTranslateElement("position")); updatecb->getStackedTransforms().push_back(new osgAnimation::StackedTranslateElement("position"));
updatecb->getStackedTransforms().push_back(new osgAnimation::StackedRotateAxisElement("euler",osg::Vec3(1,0,0),0)); updatecb->getStackedTransforms().push_back(new osgAnimation::StackedRotateAxisElement("euler",osg::Vec3(1,0,0),0));
//connect the UpdateMatrixTransform callback to the MatrixTransform //connect the UpdateMatrixTransform callback to the MatrixTRanform
trans->setUpdateCallback(updatecb); trans->setUpdateCallback(updatecb);
//initialize MatrixTranform //initialize MatrixTranform
trans->setMatrix(osg::Matrix::identity()); trans->setMatrix(osg::Matrix::identity());
@@ -102,7 +102,7 @@ int main (int argc, char* argv[])
//add the rest of the scene to the grp node //add the rest of the scene to the grp node
grp->addChild(root); grp->addChild(root);
// And we finally define our channel for linear Vector interpolation // And we finaly define our channel for linear Vector interpolation
osgAnimation::Vec3LinearChannel* channelAnimation1 = new osgAnimation::Vec3LinearChannel; osgAnimation::Vec3LinearChannel* channelAnimation1 = new osgAnimation::Vec3LinearChannel;
//name of the AnimationUpdateCallback //name of the AnimationUpdateCallback
channelAnimation1->setTargetName("AnimatedCallback"); channelAnimation1->setTargetName("AnimatedCallback");

View File

@@ -98,9 +98,9 @@ struct ExampleTimelineUsage : public osgGA::GUIEventHandler
{ {
// we add a scratch head priority 1 each 10 second // we add a scratch head priority 1 each 10 second
// note: // note:
// it's possible to add the same instance more than once on the timeline // it's possible to add the same instance more then once on the timeline
// the only things you need to take care is if you remove it. It will remove // the only things you need to take care is if you remove it. It will remove
// all instance that exist on the timeline. If you need to differentiate // all instance that exist on the timeline. If you need to differtiate
// it's better to create a new instance // it's better to create a new instance
tml->addActionAt(5.0 + 10.0 * i, _scratchHead.get(), 1); tml->addActionAt(5.0 + 10.0 * i, _scratchHead.get(), 1);
} }
@@ -139,12 +139,21 @@ struct ExampleTimelineUsage : public osgGA::GUIEventHandler
} }
_releaseKey = false; _releaseKey = false;
} }
traverse(node, nv);
} }
else else
{ {
osgGA::GUIEventHandler::operator()(node, nv); osgGA::EventVisitor* ev = dynamic_cast<osgGA::EventVisitor*>(nv);
if (ev && ev->getActionAdapter() && !ev->getEvents().empty())
{
for(osgGA::EventQueue::Events::iterator itr = ev->getEvents().begin();
itr != ev->getEvents().end();
++itr)
{
handleWithCheckAgainstIgnoreHandledEventsMask(*(*itr), *(ev->getActionAdapter()), node, nv);
}
}
} }
traverse(node, nv);
} }
}; };
@@ -163,8 +172,7 @@ int main (int argc, char* argv[])
file = psr[1]; file = psr[1];
// replace the manager // replace the manager
osg::ref_ptr<osg::Node> loadedmodel = osgDB::readRefNodeFile(file); osg::Group* root = dynamic_cast<osg::Group*>(osgDB::readNodeFile(file));
osg::Group* root = dynamic_cast<osg::Group*>(loadedmodel.get());
if (!root) { if (!root) {
osg::notify(osg::FATAL) << "can't read file " << file << std::endl; osg::notify(osg::FATAL) << "can't read file " << file << std::endl;
return 1; return 1;

View File

@@ -24,7 +24,6 @@
#include <osg/Geometry> #include <osg/Geometry>
#include <osg/MatrixTransform> #include <osg/MatrixTransform>
#include <osg/Geode> #include <osg/Geode>
#include <osgDB/FileNameUtils>
#include <osgViewer/Viewer> #include <osgViewer/Viewer>
#include <osgViewer/ViewerEventHandlers> #include <osgViewer/ViewerEventHandlers>
#include <osgWidget/ViewerEventHandlers> #include <osgWidget/ViewerEventHandlers>
@@ -127,8 +126,7 @@ int main(int argc, char** argv)
osgViewer::Viewer viewer(arguments); osgViewer::Viewer viewer(arguments);
osg::ref_ptr<osg::Group> group = new osg::Group(); osg::ref_ptr<osg::Group> group = new osg::Group();
osg::ref_ptr<osg::Node> loadedmodel = osgDB::readRefNodeFiles(arguments); osg::Group* node = dynamic_cast<osg::Group*>(osgDB::readNodeFiles(arguments)); //dynamic_cast<osgAnimation::AnimationManager*>(osgDB::readNodeFile(psr[1]));
osg::Group* node = dynamic_cast<osg::Group*>(loadedmodel.get());
if(!node) if(!node)
{ {
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
@@ -138,30 +136,10 @@ int main(int argc, char** argv)
// Set our Singleton's model. // Set our Singleton's model.
AnimationManagerFinder finder; AnimationManagerFinder finder;
node->accept(finder); node->accept(finder);
if (finder._am.valid()) if (finder._am.valid()) {
{
std::string playModeOpt;
if (arguments.read("--play-mode", playModeOpt))
{
osgAnimation::Animation::PlayMode playMode = osgAnimation::Animation::LOOP;
if (osgDB::equalCaseInsensitive(playModeOpt, "ONCE")) playMode = osgAnimation::Animation::ONCE;
else if (osgDB::equalCaseInsensitive(playModeOpt, "STAY")) playMode = osgAnimation::Animation::STAY;
else if (osgDB::equalCaseInsensitive(playModeOpt, "LOOP")) playMode = osgAnimation::Animation::LOOP;
else if (osgDB::equalCaseInsensitive(playModeOpt, "PPONG")) playMode = osgAnimation::Animation::PPONG;
for (osgAnimation::AnimationList::const_iterator animIter = finder._am->getAnimationList().begin();
animIter != finder._am->getAnimationList().end(); ++animIter)
{
(*animIter)->setPlayMode(playMode);
}
}
node->setUpdateCallback(finder._am.get()); node->setUpdateCallback(finder._am.get());
AnimtkViewerModelController::setModel(finder._am.get()); AnimtkViewerModelController::setModel(finder._am.get());
} } else {
else
{
osg::notify(osg::WARN) << "no osgAnimation::AnimationManagerBase found in the subgraph, no animations available" << std::endl; osg::notify(osg::WARN) << "no osgAnimation::AnimationManagerBase found in the subgraph, no animations available" << std::endl;
} }

View File

@@ -165,7 +165,7 @@ int main(int argc, char** argv)
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler); viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
// load the data // load the data
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
if (!loadedModel) if (!loadedModel)
{ {
osg::Geometry * quad = osg::createTexturedQuadGeometry(osg::Vec3f(-2.0f, 0.0f, -2.0f), osg::Geometry * quad = osg::createTexturedQuadGeometry(osg::Vec3f(-2.0f, 0.0f, -2.0f),

View File

@@ -287,7 +287,7 @@ int main( int argc, char **argv )
} }
// load the data // load the data
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
if (!loadedModel) if (!loadedModel)
{ {
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
@@ -406,7 +406,7 @@ int main( int argc, char **argv )
viewer.renderingTraversals(); viewer.renderingTraversals();
osg::Timer_t afterRenderTick = osg::Timer::instance()->tick(); osg::Timer_t afterRenderTick = osg::Timer::instance()->tick();
std::cout<<"Rendering time = "<<osg::Timer::instance()->delta_s(beforeRenderTick, afterRenderTick) <<" seconds"<<std::endl; std::cout<<"Rendring time = "<<osg::Timer::instance()->delta_s(beforeRenderTick, afterRenderTick) <<" seconds"<<std::endl;
return 0; return 0;
} }

View File

@@ -42,10 +42,10 @@
typedef std::vector< osg::ref_ptr<osg::Image> > ImageList; typedef std::vector< osg::ref_ptr<osg::Image> > ImageList;
/** create quad at specified position. */ /** create quad at specified position. */
osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const osg::Vec3& height, osg::ref_ptr<osg::Image> image) osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const osg::Vec3& height, osg::Image* image=NULL)
{ {
// set up the Geometry. // set up the Geometry.
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; osg::Geometry* geom = new osg::Geometry;
osg::Vec3Array* coords = new osg::Vec3Array(4); osg::Vec3Array* coords = new osg::Vec3Array(4);
(*coords)[0] = corner; (*coords)[0] = corner;
@@ -80,13 +80,13 @@ osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const
geom->setStateSet(stateset); geom->setStateSet(stateset);
} }
return geom.release(); return geom;
} }
osg::Drawable* createAxis(const osg::Vec3& corner,const osg::Vec3& xdir,const osg::Vec3& ydir,const osg::Vec3& zdir) osg::Drawable* createAxis(const osg::Vec3& corner,const osg::Vec3& xdir,const osg::Vec3& ydir,const osg::Vec3& zdir)
{ {
// set up the Geometry. // set up the Geometry.
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry; osg::Geometry* geom = new osg::Geometry;
osg::Vec3Array* coords = new osg::Vec3Array(6); osg::Vec3Array* coords = new osg::Vec3Array(6);
(*coords)[0] = corner; (*coords)[0] = corner;
@@ -121,20 +121,20 @@ osg::Drawable* createAxis(const osg::Vec3& corner,const osg::Vec3& xdir,const os
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF); stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
geom->setStateSet(stateset); geom->setStateSet(stateset);
return geom.release(); return geom;
} }
osg::ref_ptr<osg::Node> createModel() osg::Node* createModel()
{ {
// create the root node which will hold the model. // create the root node which will hold the model.
osg::ref_ptr<osg::Group> root = new osg::Group(); osg::Group* root = new osg::Group();
// add the drawable into a single geode to be shared... // add the drawable into a single goede to be shared...
osg::Billboard* center = new osg::Billboard(); osg::Billboard* center = new osg::Billboard();
center->setMode(osg::Billboard::POINT_ROT_EYE); center->setMode(osg::Billboard::POINT_ROT_EYE);
center->addDrawable( center->addDrawable(
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Images/reflect.rgb")), createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Images/reflect.rgb")),
osg::Vec3(0.0f,0.0f,0.0f)); osg::Vec3(0.0f,0.0f,0.0f));
osg::Billboard* x_arrow = new osg::Billboard(); osg::Billboard* x_arrow = new osg::Billboard();
@@ -142,7 +142,7 @@ osg::ref_ptr<osg::Node> createModel()
x_arrow->setAxis(osg::Vec3(1.0f,0.0f,0.0f)); x_arrow->setAxis(osg::Vec3(1.0f,0.0f,0.0f));
x_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f)); x_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f));
x_arrow->addDrawable( x_arrow->addDrawable(
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posx.png")), createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posx.png")),
osg::Vec3(5.0f,0.0f,0.0f)); osg::Vec3(5.0f,0.0f,0.0f));
osg::Billboard* y_arrow = new osg::Billboard(); osg::Billboard* y_arrow = new osg::Billboard();
@@ -150,7 +150,7 @@ osg::ref_ptr<osg::Node> createModel()
y_arrow->setAxis(osg::Vec3(0.0f,1.0f,0.0f)); y_arrow->setAxis(osg::Vec3(0.0f,1.0f,0.0f));
y_arrow->setNormal(osg::Vec3(1.0f,0.0f,0.0f)); y_arrow->setNormal(osg::Vec3(1.0f,0.0f,0.0f));
y_arrow->addDrawable( y_arrow->addDrawable(
createSquare(osg::Vec3(0.0f,-0.5f,-0.5f),osg::Vec3(0.0f,1.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posy.png")), createSquare(osg::Vec3(0.0f,-0.5f,-0.5f),osg::Vec3(0.0f,1.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posy.png")),
osg::Vec3(0.0f,5.0f,0.0f)); osg::Vec3(0.0f,5.0f,0.0f));
osg::Billboard* z_arrow = new osg::Billboard(); osg::Billboard* z_arrow = new osg::Billboard();
@@ -158,7 +158,7 @@ osg::ref_ptr<osg::Node> createModel()
z_arrow->setAxis(osg::Vec3(0.0f,0.0f,1.0f)); z_arrow->setAxis(osg::Vec3(0.0f,0.0f,1.0f));
z_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f)); z_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f));
z_arrow->addDrawable( z_arrow->addDrawable(
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posz.png")), createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posz.png")),
osg::Vec3(0.0f,0.0f,5.0f)); osg::Vec3(0.0f,0.0f,5.0f));

View File

@@ -1,7 +0,0 @@
#this file is automatically generated
SET(TARGET_SRC osgblenddrawbuffers.cpp )
SET(TARGET_ADDED_LIBRARIES osgGA )
#### end var setup ###
SETUP_EXAMPLE(osgblenddrawbuffers)

View File

@@ -1,155 +0,0 @@
/* OpenSceneGraph example, osgblenddrawbuffers.
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*/
#include <osg/Geometry>
#include <osg/Geode>
#include <osg/Camera>
#include <osg/Texture2D>
#include <osg/BlendFunci>
#include <osg/ColorMaski>
#include <osg/Capability>
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <iostream>
osg::Camera* createMRTCamera( std::vector<osg::Texture*>& attachedTextures )
{
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setClearColor( osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f) );
camera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
camera->setRenderOrder( osg::Camera::PRE_RENDER );
for ( int i=0; i<4; ++i )
{
osg::Texture2D* tex = new osg::Texture2D;
tex->setTextureSize( 1024, 1024 );
tex->setInternalFormat( GL_RGBA );
tex->setFilter( osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR );
tex->setFilter( osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR );
attachedTextures.push_back( tex );
camera->setViewport( 0, 0, tex->getTextureWidth(), tex->getTextureHeight() );
camera->attach( osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0+i), tex );
}
return camera.release();
}
osg::Camera* createHUDCamera( double left, double right, double bottom, double top )
{
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
camera->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
camera->setClearMask( GL_DEPTH_BUFFER_BIT );
camera->setRenderOrder( osg::Camera::POST_RENDER );
camera->setAllowEventFocus( false );
camera->setProjectionMatrix( osg::Matrix::ortho2D(left, right, bottom, top) );
camera->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
return camera.release();
}
int main( int argc, char **argv )
{
osg::ArgumentParser arguments(&argc, argv);
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName() + " is the example which demonstrates how to enable/disable blending on specified draw buffers in multi-rendering-target cases.");
std::vector<osg::Texture*> textures;
bool useGlobalBlending = false;
if ( arguments.read("--no-draw-buffers") ) useGlobalBlending = true;
osg::ref_ptr<osg::Node> cessna = osgDB::readRefNodeFile("cessna.osgt");
if (!cessna)
{
OSG_NOTICE<<"Cannot not find model 'cessna.osg' to render"<<std::endl;
return 1;
}
// Create a camera to output multi-rendering-targets (MRT)
osg::ref_ptr<osg::Camera> mrtCam = createMRTCamera( textures );
mrtCam->addChild( cessna );
// Create shader program to be used
const char* mrtFragmentCode = {
"void main() {\n"
" gl_FragData[0] = gl_Color * vec4(1.0, 1.0, 1.0, 0.7);\n"
" gl_FragData[1] = vec4(0.0, 1.0, 1.0, 0.0);\n"
" gl_FragData[2] = vec4(1.0, 0.0, 1.0, 0.3);\n"
" gl_FragData[3] = vec4(1.0, 1.0, 0.0, 1.0);\n"
"}\n"
};
osg::ref_ptr<osg::Program> program = new osg::Program;
program->addShader( new osg::Shader(osg::Shader::FRAGMENT, mrtFragmentCode) );
osg::ref_ptr<osg::StateSet> ss = mrtCam->getOrCreateStateSet();
ss->setAttributeAndModes( program );
// Apply blending to the original scene in MRT
if ( !useGlobalBlending )
{
// Only enable blending on the first draw buffer so other three outputs are
// totally opaque, which is important for MRT cases
ss->setAttribute( new osg::Enablei(GL_BLEND, 0) );
ss->setAttribute( new osg::Disablei(GL_BLEND, 1) );
ss->setAttribute( new osg::Disablei(GL_BLEND, 2) );
ss->setAttribute( new osg::Disablei(GL_BLEND, 3) );
// Accept different blend/colormask attributes on multiple render targets
osg::ref_ptr<osg::BlendFunci> blend0 = new osg::BlendFunci(0, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
osg::ref_ptr<osg::ColorMaski> colormask3 = new osg::ColorMaski(3, false, true, false, true);
ss->setAttribute( blend0 );
ss->setAttributeAndModes( colormask3 );
}
else
{
// When separated blending is disabled, all rendering targets will be affected
// by its alpha channel and you will see each output blended with the background.
//
// This causes a big program in situations like deferred shading because we may
// have to save different scene data to MRT 'GBuffer', in which alpha channels are
// used to store certain attributes rather than opacity. These attributes can be
// reused in following post-processing steps.
//
// For such targets, alpha blending must be disabled; otherwise it will mess the
// output. That is why this example exists!
osg::ref_ptr<osg::BlendFunc> blend = new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
ss->setAttributeAndModes( blend.get() );
}
// Create some quads to be shown on screen to contain the MRT result
osg::ref_ptr<osg::Geode> quad = new osg::Geode;
for ( unsigned int i=0; i<textures.size(); ++i )
{
osg::Geometry* geom = osg::createTexturedQuadGeometry(
osg::Vec3((float)i/(float)textures.size(), 0.0f, 0.0f),
osg::Vec3(1.0f/(float)textures.size()-0.01f,0.0f,0.0f), osg::Vec3(0.0f,1.0f,0.0f) );
geom->getOrCreateStateSet()->setTextureAttributeAndModes( 0, textures[i] );
quad->addDrawable( geom );
}
osg::Camera* hudCam = createHUDCamera( 0.0, 1.0, 0.0, 1.0 );
hudCam->addChild( quad.get() );
// Construct scene graph and viewer
osg::ref_ptr<osg::Group> root = new osg::Group;
root->addChild( mrtCam );
root->addChild( hudCam );
osgViewer::Viewer viewer;
viewer.setSceneData( root.get() );
return viewer.run();
}

View File

@@ -104,7 +104,7 @@ bool TechniqueEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAc
_eq_index--; _eq_index--;
if (_eq_index<0) _eq_index=_eq_nb-1; if (_eq_index<0) _eq_index=_eq_nb-1;
_blendEq->setEquation(_equations[_eq_index]); _blendEq->setEquation(_equations[_eq_index]);
std::cout<<"Equation name = "<<_equations_name[_eq_index]<<std::endl; std::cout<<"Operation name = "<<_equations_name[_eq_index]<<std::endl;
return true; return true;
} }
return false; return false;
@@ -139,10 +139,10 @@ int main( int argc, char **argv )
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // if not loaded assume no arguments passed in, try use default mode instead.
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cessnafire.osgt"); if (!loadedModel) loadedModel = osgDB::readNodeFile("cessnafire.osgt");
if (!loadedModel) if (!loadedModel)
{ {
@@ -150,11 +150,11 @@ int main( int argc, char **argv )
return 1; return 1;
} }
osg::ref_ptr<osg::Group> root = new osg::Group; osg::Group* root = new osg::Group;
root->addChild(loadedModel); root->addChild(loadedModel);
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet; osg::StateSet* stateset = new osg::StateSet;
stateset->setDataVariance(osg::Object::DYNAMIC); stateset->setDataVariance(osg::Object::DYNAMIC);
osg::BlendEquation* blendEquation = new osg::BlendEquation(osg::BlendEquation::FUNC_ADD); osg::BlendEquation* blendEquation = new osg::BlendEquation(osg::BlendEquation::FUNC_ADD);

View File

@@ -157,28 +157,6 @@ class CameraEventCallback : public osg::NodeCallback
} }
}; };
struct TestDrawableUpdateCallback : public osg::Drawable::UpdateCallback
{
TestDrawableUpdateCallback(const std::string &message): _message(message) {}
virtual void update(osg::NodeVisitor*, osg::Drawable* drw) {
printf("%s\n", _message.c_str());
}
std::string _message;
};
struct TestNodeUpdateCallback : public osg::NodeCallback
{
TestNodeUpdateCallback(const std::string &message): _message(message) {}
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
printf("%s\n", _message.c_str());
}
std::string _message;
};
int main( int argc, char **argv ) int main( int argc, char **argv )
{ {
// use an ArgumentParser object to manage the program arguments. // use an ArgumentParser object to manage the program arguments.
@@ -191,90 +169,31 @@ int main( int argc, char **argv )
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> rootnode; osg::Node* rootnode = osgDB::readNodeFiles(arguments);
if (arguments.read("--test")) // if not loaded assume no arguments passed in, try use default mode instead.
if (!rootnode) rootnode = osgDB::readNodeFile("cow.osgt");
if (!rootnode)
{ {
osg::ref_ptr<osg::Group> root = new osg::Group(); osg::notify(osg::NOTICE)<<"Please specify a file on the command line"<<std::endl;
rootnode = root;
osg::Node *test1 = new osg::Node();
test1->setUpdateCallback(new TestNodeUpdateCallback("test1"));
root->addChild(test1);
osg::Drawable *test2 = new osg::Drawable();
test2->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test2"));
root->addChild(test2);
osg::Drawable *test3 = new osg::Drawable();
test3->setUpdateCallback(new TestDrawableUpdateCallback("test3"));
root->addChild(test3);
osg::Geode *test4 = new osg::Geode();
osg::Drawable *drawable1 = new osg::Drawable();
drawable1->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test4"));
test4->addDrawable(drawable1);
root->addChild(test4);
osg::Geode *test5 = new osg::Geode();
osg::Drawable *drawable2 = new osg::Drawable();
drawable2->setUpdateCallback(new TestDrawableUpdateCallback("test5"));
test5->addDrawable(drawable2);
root->addChild(test5);
osg::Geode *test6 = new osg::Geode();
osg::Drawable *drawable3 = new osg::Drawable();
drawable3->setUpdateCallback(new TestDrawableUpdateCallback("test6"));
test6->addChild(drawable3);
root->addChild(test6);
osg::Geode *test7 = new osg::Geode();
osg::Drawable *drawable4 = new osg::Drawable();
drawable4->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test7"));
test7->addChild(drawable4);
root->addChild(test7);
printf("Numchildren with updates %u\n", rootnode->getNumChildrenRequiringUpdateTraversal());
return 1;
} }
else
{
rootnode = osgDB::readRefNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // run optimization over the scene graph
if (!rootnode) rootnode = osgDB::readRefNodeFile("cow.osgt"); osgUtil::Optimizer optimzer;
optimzer.optimize(rootnode);
if (!rootnode) // insert all the callbacks
{ InsertCallbacksVisitor icv;
osg::notify(osg::NOTICE)<<"Please specify a file on the command line"<<std::endl; rootnode->accept(icv);
return 1;
}
// run optimization over the scene graph
osgUtil::Optimizer optimzer;
optimzer.optimize(rootnode.get());
// insert all the callbacks
InsertCallbacksVisitor icv;
rootnode->accept(icv);
}
viewer.getCamera()->setUpdateCallback(new CameraUpdateCallback()); viewer.getCamera()->setUpdateCallback(new CameraUpdateCallback());
viewer.getCamera()->setEventCallback(new CameraEventCallback()); viewer.getCamera()->setEventCallback(new CameraEventCallback());
// set the scene to render // set the scene to render
viewer.setSceneData(rootnode.get()); viewer.setSceneData(rootnode);
viewer.setCameraManipulator(new osgGA::TrackballManipulator); return viewer.run();
viewer.realize();
while(!viewer.done())
{
OSG_NOTICE<<std::endl<<"New Frame"<<std::endl;
viewer.frame();
}
return 0;
} }

View File

@@ -51,7 +51,7 @@ public:
{ {
if (ea.getKey()=='l') if (ea.getKey()=='l')
{ {
osg::ref_ptr<osg::Node> model = osgDB::readRefNodeFile( _filenames[_position] ); osg::ref_ptr<osg::Node> model = osgDB::readNodeFile( _filenames[_position] );
++_position; ++_position;
if (_position>=_filenames.size()) _position = 0; if (_position>=_filenames.size()) _position = 0;
@@ -214,7 +214,7 @@ int main( int argc, char **argv )
osg::ref_ptr<osg::Node> model; osg::ref_ptr<osg::Node> model;
if (sharedModel) if (sharedModel)
{ {
model = osgDB::readRefNodeFiles(arguments); model = osgDB::readNodeFiles(arguments);
if (!model) return 0; if (!model) return 0;
if (enableVBO) if (enableVBO)
@@ -242,7 +242,7 @@ int main( int argc, char **argv )
if (sharedModel) viewer.setSceneData(model.get()); if (sharedModel) viewer.setSceneData(model.get());
else else
{ {
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> node = osgDB::readNodeFiles(arguments);
if (!node) return 0; if (!node) return 0;
if (enableVBO) if (enableVBO)
@@ -300,11 +300,11 @@ int main( int argc, char **argv )
while (arguments.read("--config", configfile)) while (arguments.read("--config", configfile))
{ {
osg::notify(osg::NOTICE)<<"Trying to read config file "<<configfile<<std::endl; osg::notify(osg::NOTICE)<<"Trying to read config file "<<configfile<<std::endl;
osg::ref_ptr<osg::Object> object = osgDB::readRefObjectFile(configfile); osg::ref_ptr<osg::Object> object = osgDB::readObjectFile(configfile);
osgViewer::View* view = dynamic_cast<osgViewer::View*>(object.get()); osgViewer::View* view = dynamic_cast<osgViewer::View*>(object.get());
if (view) if (view)
{ {
osg::notify(osg::NOTICE)<<"Read config file successfully"<<std::endl; osg::notify(osg::NOTICE)<<"Read config file succesfully"<<std::endl;
} }
else else
{ {
@@ -329,9 +329,9 @@ int main( int argc, char **argv )
else else
{ {
// load the scene. // load the scene.
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt"); if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
if (!loadedModel) if (!loadedModel)
{ {
@@ -339,7 +339,7 @@ int main( int argc, char **argv )
return 1; return 1;
} }
viewer.setSceneData(loadedModel); viewer.setSceneData(loadedModel.get());
} }
viewer.realize(); viewer.realize();

View File

@@ -117,7 +117,7 @@ void Character::setCharacter(const std::string& filename, const std::string& nam
float _characterSize = _width.length()*0.2f; float _characterSize = _width.length()*0.2f;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename); osg::Image* image = osgDB::readImageFile(filename);
if (image) if (image)
{ {
osg::Vec3 pos(-0.5f*_characterSize,0.0f,0.0f); osg::Vec3 pos(-0.5f*_characterSize,0.0f,0.0f);
@@ -153,7 +153,7 @@ void Character::setLives(const std::string& filename, const osg::Vec3& origin, c
_numLives = numLives; _numLives = numLives;
_livesSwitch = new osg::Switch; _livesSwitch = new osg::Switch;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename); osg::Image* image = osgDB::readImageFile(filename);
if (image) if (image)
{ {
osg::StateSet* stateset = _livesSwitch->getOrCreateStateSet(); osg::StateSet* stateset = _livesSwitch->getOrCreateStateSet();
@@ -186,7 +186,7 @@ void Character::setCatches(const std::string& filename, const osg::Vec3& origin,
_numCatches = 0; _numCatches = 0;
_catchSwitch = new osg::Switch; _catchSwitch = new osg::Switch;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename); osg::Image* image = osgDB::readImageFile(filename);
if (image) if (image)
{ {
osg::StateSet* stateset = _catchSwitch->getOrCreateStateSet(); osg::StateSet* stateset = _catchSwitch->getOrCreateStateSet();
@@ -349,7 +349,7 @@ class CatchableObject : public osg::Referenced
*/ */
inline void setToGravity(float scale = 1.0f) { _acceleration.set(0, 0, -9.81f*scale); } inline void setToGravity(float scale = 1.0f) { _acceleration.set(0, 0, -9.81f*scale); }
/// Set the fluid parameters as for air (20C temperature). /// Set the fluid parameters as for air (20<EFBFBD>C temperature).
inline void setFluidToAir() inline void setFluidToAir()
{ {
setToGravity(1.0f); setToGravity(1.0f);
@@ -357,7 +357,7 @@ class CatchableObject : public osg::Referenced
setFluidViscosity(1.8e-5f); setFluidViscosity(1.8e-5f);
} }
/// Set the fluid parameters as for pure water (20C temperature). /// Set the fluid parameters as for pure water (20<EFBFBD>C temperature).
inline void setFluidToWater() inline void setFluidToWater()
{ {
setToGravity(1.0f); setToGravity(1.0f);
@@ -395,7 +395,7 @@ void CatchableObject::setUpCatchablesMap(const FileList& fileList)
++itr) ++itr)
{ {
const std::string& filename = *itr; const std::string& filename = *itr;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename); osg::Image* image = osgDB::readImageFile(filename);
if (image) if (image)
{ {
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet(); osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet();
@@ -1045,10 +1045,10 @@ osg::Node* GameEventHandler::createScene()
// set up welcome subgraph // set up welcome subgraph
{ {
osg::ref_ptr<osg::Geode> geode = new osg::Geode; osg::Geode* geode = new osg::Geode;
// set up the background // set up the background
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/Welcome.jpg"); osg::Image* image = osgDB::readImageFile("Catch/Welcome.jpg");
if (image) if (image)
{ {
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height); osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
@@ -1121,9 +1121,9 @@ osg::Node* GameEventHandler::createScene()
// set up you've lost subgraph // set up you've lost subgraph
{ {
osg::ref_ptr<osg::Geode> geode = new osg::Geode; osg::Geode* geode = new osg::Geode;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/YouLost.jpg"); osg::Image* image = osgDB::readImageFile("Catch/YouLost.jpg");
if (image) if (image)
{ {
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height); osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
@@ -1184,9 +1184,9 @@ osg::Node* GameEventHandler::createScene()
// set up you've won subgraph // set up you've won subgraph
{ {
osg::ref_ptr<osg::Geode> geode = new osg::Geode; osg::Geode* geode = new osg::Geode;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/YouWon.jpg"); osg::Image* image = osgDB::readImageFile("Catch/YouWon.jpg");
if (image) if (image)
{ {
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height); osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
@@ -1269,7 +1269,7 @@ osg::Node* GameEventHandler::createScene()
++itr) ++itr)
{ {
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(*itr); osg::Image* image = osgDB::readImageFile(*itr);
if (image) if (image)
{ {
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height); osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
@@ -1366,7 +1366,6 @@ class CompileStateCallback : public osg::Operation
{ {
public: public:
CompileStateCallback(GameEventHandler* eh): CompileStateCallback(GameEventHandler* eh):
osg::Referenced(true),
osg::Operation("CompileStateCallback", false), osg::Operation("CompileStateCallback", false),
_gameEventHandler(eh) {} _gameEventHandler(eh) {}

View File

@@ -40,9 +40,10 @@
#include <osgUtil/Optimizer> #include <osgUtil/Optimizer>
osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& subgraph) osg::Node* decorate_with_clip_node(osg::Node* subgraph)
{ {
osg::ref_ptr<osg::Group> rootnode = new osg::Group; osg::Group* rootnode = new osg::Group;
// create wireframe view of the model so the user can see // create wireframe view of the model so the user can see
// what parts are being culled away. // what parts are being culled away.
@@ -58,7 +59,7 @@ osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& s
rootnode->addChild(wireframe_subgraph); rootnode->addChild(wireframe_subgraph);
/* /*
// simple approach to adding a clipnode above a subgraph. // simple approach to adding a clipnode above a subrgaph.
// create clipped part. // create clipped part.
osg::ClipNode* clipped_subgraph = new osg::ClipNode; osg::ClipNode* clipped_subgraph = new osg::ClipNode;
@@ -77,7 +78,7 @@ osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& s
// more complex approach to managing ClipNode, allowing // more complex approach to managing ClipNode, allowing
// ClipNode node to be transformed independently from the subgraph // ClipNode node to be transformed independantly from the subgraph
// that it is clipping. // that it is clipping.
osg::MatrixTransform* transform= new osg::MatrixTransform; osg::MatrixTransform* transform= new osg::MatrixTransform;
@@ -116,21 +117,21 @@ int main( int argc, char **argv )
osg::ArgumentParser arguments(&argc,argv); osg::ArgumentParser arguments(&argc,argv);
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // if not loaded assume no arguments passed in, try use default mode instead.
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt"); if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
if (!loadedModel) if (!loadedModel)
{ {
osg::notify(osg::NOTICE)<<"Please specify a filename on the command line"<<std::endl; osg::notify(osg::NOTICE)<<"Please specifiy a filename and the command line"<<std::endl;
return 1; return 1;
} }
// decorate the scenegraph with a clip node. // decorate the scenegraph with a clip node.
osg::ref_ptr<osg::Node> rootnode = decorate_with_clip_node(loadedModel); osg::Node* rootnode = decorate_with_clip_node(loadedModel);
// run optimization over the scene graph // run optimization over the scene graph
osgUtil::Optimizer optimzer; osgUtil::Optimizer optimzer;

View File

@@ -45,8 +45,6 @@
#include <net/soioctl.h> #include <net/soioctl.h>
#elif defined(__CYGWIN__) #elif defined(__CYGWIN__)
#include <unistd.h> #include <unistd.h>
#elif defined (__GNU__)
#include <unistd.h>
#elif defined(__sun) #elif defined(__sun)
#include <unistd.h> #include <unistd.h>
#include <sys/sockio.h> #include <sys/sockio.h>

View File

@@ -44,6 +44,7 @@
#include "broadcaster.h" #include "broadcaster.h"
const unsigned int MAX_NUM_EVENTS = 10;
const unsigned int SWAP_BYTES_COMPARE = 0x12345678; const unsigned int SWAP_BYTES_COMPARE = 0x12345678;
class CameraPacket { class CameraPacket {
public: public:
@@ -240,14 +241,14 @@ class DataConverter
inline void writeFloat(float c) { write4((char*)&c); } inline void writeFloat(float c) { write4((char*)&c); }
inline void writeDouble(double c) { write8((char*)&c); } inline void writeDouble(double c) { write8((char*)&c); }
inline char readChar() { char c=0; read1(&c); return c; } inline char readChar() { char c; read1(&c); return c; }
inline unsigned char readUChar() { unsigned char c=0; read1((char*)&c); return c; } inline unsigned char readUChar() { unsigned char c; read1((char*)&c); return c; }
inline short readShort() { short c=0; read2((char*)&c); return c; } inline short readShort() { short c; read2((char*)&c); return c; }
inline unsigned short readUShort() { unsigned short c=0; read2((char*)&c); return c; } inline unsigned short readUShort() { unsigned short c; read2((char*)&c); return c; }
inline int readInt() { int c=0; read4((char*)&c); return c; } inline int readInt() { int c; read4((char*)&c); return c; }
inline unsigned int readUInt() { unsigned int c=0; read4((char*)&c); return c; } inline unsigned int readUInt() { unsigned int c; read4((char*)&c); return c; }
inline float readFloat() { float c=0.0f; read4((char*)&c); return c; } inline float readFloat() { float c; read4((char*)&c); return c; }
inline double readDouble() { double c=0.0; read8((char*)&c); return c; } inline double readDouble() { double c; read8((char*)&c); return c; }
void write(const osg::FrameStamp& fs) void write(const osg::FrameStamp& fs)
{ {
@@ -375,8 +376,7 @@ class DataConverter
itr != cameraPacket._events.end(); itr != cameraPacket._events.end();
++itr) ++itr)
{ {
osgGA::GUIEventAdapter* event = (*itr)->asGUIEventAdapter(); write(*(*itr));
if (event) write(*event);
} }
} }
@@ -505,7 +505,7 @@ int main( int argc, char **argv )
} }
// load model. // load model.
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> rootnode = osgDB::readNodeFiles(arguments);
// set the scene to render // set the scene to render
viewer.setSceneData(rootnode.get()); viewer.setSceneData(rootnode.get());
@@ -614,7 +614,7 @@ int main( int argc, char **argv )
osg::notify(osg::INFO)<<"Time to do cluster sync "<<osg::Timer::instance()->delta_m(startTick,endTick)<<std::endl; osg::notify(osg::INFO)<<"Time to do cluster sync "<<osg::Timer::instance()->delta_m(startTick,endTick)<<std::endl;
// update the scene by traversing it with the update visitor which will // update the scene by traversing it with the the update visitor which will
// call all node update callbacks and animations. // call all node update callbacks and animations.
viewer.eventTraversal(); viewer.eventTraversal();
viewer.updateTraversal(); viewer.updateTraversal();

View File

@@ -122,7 +122,7 @@ void Receiver::sync( void )
return; return;
} }
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || defined(__FreeBSD_kernel__) || defined(__GNU__) #if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ )
socklen_t size; socklen_t size;
#else #else
int size; int size;

View File

@@ -133,7 +133,7 @@ int main( int argc, char **argv )
osg::ArgumentParser arguments(&argc,argv); osg::ArgumentParser arguments(&argc,argv);
// read the scene from the list of file specified commandline args. // read the scene from the list of file specified commandline args.
osg::ref_ptr<osg::Node> scene = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles(arguments);
if (!scene) if (!scene)
{ {
@@ -149,7 +149,7 @@ int main( int argc, char **argv )
{ {
osgViewer::View* view = new osgViewer::View; osgViewer::View* view = new osgViewer::View;
view->setName("Single view"); view->setName("Single view");
view->setSceneData(osgDB::readRefNodeFile("fountain.osgt")); view->setSceneData(osgDB::readNodeFile("fountain.osgt"));
view->addEventHandler( new osgViewer::StatsHandler ); view->addEventHandler( new osgViewer::StatsHandler );
@@ -283,7 +283,7 @@ int main( int argc, char **argv )
view->setName("View three"); view->setName("View three");
viewer.addView(view); viewer.addView(view);
view->setSceneData(osgDB::readRefNodeFile("cessnafire.osgt")); view->setSceneData(osgDB::readNodeFile("cessnafire.osgt"));
view->getCamera()->setName("Cam three"); view->getCamera()->setName("Cam three");
view->getCamera()->setProjectionMatrixAsPerspective(30.0, double(traits->width) / double(traits->height/2), 1.0, 1000.0); view->getCamera()->setProjectionMatrixAsPerspective(30.0, double(traits->width) / double(traits->height/2), 1.0, 1000.0);

View File

@@ -63,7 +63,7 @@ int main( int argc, char** argv )
// Create a node for outputting to the texture. // Create a node for outputting to the texture.
// It is OK to have just an empty node here, but seems inbuilt uniforms like osg_FrameTime won't work then. // It is OK to have just an empty node here, but seems inbuilt uniforms like osg_FrameTime won't work then.
// TODO: maybe we can have a custom drawable which also will implement glMemoryBarrier? // TODO: maybe we can have a custom drawable which also will implement glMemoryBarrier?
osg::ref_ptr<osg::Node> sourceNode = osgDB::readRefNodeFile("axes.osgt"); osg::Node* sourceNode = osgDB::readNodeFile("axes.osgt");
if ( !sourceNode ) sourceNode = new osg::Node; if ( !sourceNode ) sourceNode = new osg::Node;
sourceNode->setDataVariance( osg::Object::DYNAMIC ); sourceNode->setDataVariance( osg::Object::DYNAMIC );
sourceNode->getOrCreateStateSet()->setAttributeAndModes( computeProg.get() ); sourceNode->getOrCreateStateSet()->setAttributeAndModes( computeProg.get() );

View File

@@ -198,7 +198,7 @@ int main( int argc, char **argv )
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments); osg::Node* rootnode = osgDB::readNodeFiles(arguments);
if (!rootnode) if (!rootnode)
{ {
osg::notify(osg::NOTICE)<<"Please specify a model filename on the command line."<<std::endl; osg::notify(osg::NOTICE)<<"Please specify a model filename on the command line."<<std::endl;
@@ -211,7 +211,7 @@ int main( int argc, char **argv )
// ------------- Start of copy specific code ------------------------------------------------------- // ------------- Start of copy specific code -------------------------------------------------------
// do a deep copy, using MyCopyOp to reveal whats going on under the hood, // do a deep copy, using MyCopyOp to reveal whats going on under the good,
// in your own code you'd typically just use the basic osg::CopyOp something like // in your own code you'd typically just use the basic osg::CopyOp something like
osg::ref_ptr<osg::Node> mycopy = dynamic_cast<osg::Node*>(rootnode->clone(osg::CopyOp::DEEP_COPY_ALL)); osg::ref_ptr<osg::Node> mycopy = dynamic_cast<osg::Node*>(rootnode->clone(osg::CopyOp::DEEP_COPY_ALL));
std::cout << "Doing a deep copy of scene graph"<<std::endl; std::cout << "Doing a deep copy of scene graph"<<std::endl;

View File

@@ -95,10 +95,10 @@ int main(int argc, char *argv[])
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments); osg::Node* rootnode = osgDB::readNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // if not loaded assume no arguments passed in, try use default mode instead.
if (!rootnode) rootnode = osgDB::readRefNodeFile("cessna.osgt"); if (!rootnode) rootnode = osgDB::readNodeFile("cessna.osgt");
if (!rootnode) if (!rootnode)
{ {
@@ -107,7 +107,7 @@ int main(int argc, char *argv[])
} }
// create specular highlights // create specular highlights
create_specular_highlights(rootnode.get()); create_specular_highlights(rootnode);
// run optimization over the scene graph // run optimization over the scene graph
osgUtil::Optimizer optimzer; osgUtil::Optimizer optimzer;
@@ -119,5 +119,21 @@ int main(int argc, char *argv[])
// create the windows and run the threads. // create the windows and run the threads.
viewer.realize(); viewer.realize();
// now check to see if texture cube map is supported.
for(unsigned int contextID = 0;
contextID<osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts();
++contextID)
{
osg::TextureCubeMap::Extensions* tcmExt = osg::TextureCubeMap::getExtensions(contextID,false);
if (tcmExt)
{
if (!tcmExt->isCubeMapSupported())
{
std::cout<<"Warning: texture_cube_map not supported by OpenGL drivers, unable to run application."<<std::endl;
return 1;
}
}
}
return viewer.run(); return viewer.run();
} }

View File

@@ -129,7 +129,7 @@ int main(int argc, char** argv)
// load the data // load the data
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFile(file); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(file);
if (!loadedModel) if (!loadedModel)
{ {
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl; std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;

View File

@@ -224,7 +224,7 @@ public:
osg::StateSet *dstate= gm->getOrCreateStateSet( ); osg::StateSet *dstate= gm->getOrCreateStateSet( );
dstate->setMode( GL_LIGHTING, osg::StateAttribute::ON ); dstate->setMode( GL_LIGHTING, osg::StateAttribute::ON );
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/Brick-Std-Orange.TGA"); osg::Image* image = osgDB::readImageFile("Images/Brick-Std-Orange.TGA");
if (image) if (image)
{ {
osg::Texture2D* txt = new osg::Texture2D; osg::Texture2D* txt = new osg::Texture2D;
@@ -354,7 +354,7 @@ osg::Group *makedelaunay(const int ndcs)
osg::Vec3Array *points=new osg::Vec3Array; osg::Vec3Array *points=new osg::Vec3Array;
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/blueFlowers.png"); osg::Image* image = osgDB::readImageFile("Images/blueFlowers.png");
if (image) if (image)
{ {
osg::Texture2D* texture = new osg::Texture2D; osg::Texture2D* texture = new osg::Texture2D;
@@ -817,7 +817,7 @@ osg::Geometry *WallConstraint::makeWallGeometry() const
{ {
osg::ref_ptr<osg::Geometry> gm=new osg::Geometry; // the wall osg::ref_ptr<osg::Geometry> gm=new osg::Geometry; // the wall
if (texture!="") { if (texture!="") {
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture.c_str()); osg::Image* image = osgDB::readImageFile(texture.c_str());
if (image) if (image)
{ {
osg::Texture2D* txt = new osg::Texture2D; osg::Texture2D* txt = new osg::Texture2D;
@@ -1005,7 +1005,7 @@ deprecated_osg::Geometry *ArealConstraint::makeWallGeometry( osg::Vec3Array *pt)
tscx->retessellatePolygons(*(edges)); // find all edges tscx->retessellatePolygons(*(edges)); // find all edges
if (walltexture!="") { if (walltexture!="") {
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(walltexture.c_str()); osg::Image* image = osgDB::readImageFile(walltexture.c_str());
if (image) if (image)
{ {
osg::Texture2D* txt = new osg::Texture2D; osg::Texture2D* txt = new osg::Texture2D;
@@ -1062,7 +1062,7 @@ deprecated_osg::Geometry * ArealConstraint::makeAreal( osg::Vec3Array *points)
gm->setNormalArray(getCanopyNormals(points)); gm->setNormalArray(getCanopyNormals(points));
gm->setNormalBinding(deprecated_osg::Geometry::BIND_PER_PRIMITIVE); gm->setNormalBinding(deprecated_osg::Geometry::BIND_PER_PRIMITIVE);
gm->setTexCoordArray(0,getCanopyTexcoords(points)); gm->setTexCoordArray(0,getCanopyTexcoords(points));
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture); osg::Image* image = osgDB::readImageFile(texture);
if (image) if (image)
{ {
osg::Texture2D* txt = new osg::Texture2D; osg::Texture2D* txt = new osg::Texture2D;
@@ -1238,7 +1238,7 @@ deprecated_osg::Geometry * LinearConstraint::makeGeometry(const osg::Vec3Array *
if (_midline->size()>0) { if (_midline->size()>0) {
osg::ref_ptr<osg::Vec3Array> locpts=getPoints(points); osg::ref_ptr<osg::Vec3Array> locpts=getPoints(points);
if (texture!="") { if (texture!="") {
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture.c_str()); osg::Image* image = osgDB::readImageFile(texture.c_str());
if (image) if (image)
{ {
osg::Texture2D* txt = new osg::Texture2D; osg::Texture2D* txt = new osg::Texture2D;

View File

@@ -139,7 +139,7 @@ int main( int argc, char **argv )
bool needToSetHomePosition = false; bool needToSetHomePosition = false;
// read the scene from the list of file specified commandline args. // read the scene from the list of file specified commandline args.
osg::ref_ptr<osg::Node> scene = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles(arguments);
// if one hasn't been loaded create an earth and sun test model. // if one hasn't been loaded create an earth and sun test model.
if (!scene) if (!scene)

View File

@@ -303,7 +303,7 @@ bool DePee::createHUD()
osg::BoundingBox bb; osg::BoundingBox bb;
for(unsigned int i=0;i<geode->getNumDrawables();++i) for(unsigned int i=0;i<geode->getNumDrawables();++i)
{ {
bb.expandBy(geode->getDrawable(i)->getBoundingBox()); bb.expandBy(geode->getDrawable(i)->getBound());
} }
osg::Geometry* geom = new osg::Geometry; osg::Geometry* geom = new osg::Geometry;

View File

@@ -20,7 +20,7 @@
/*! /*!
The DePee class is main class for setting up and managing depth peeling. The DePee class is main class for setting up and managing depth peeling.
A DePee object can be seen as a virtual node, that has one parent and one child. The rendering of every child and subchil of this child is managed by the DePee node. Besides that, it handles a head up display. A DePee object can be seen as a virtual node, that has one parent and one child. The rendering of every child and subchil of this child is managed by the the DePee node. Besides that, it handles a head up display.
*/ */
class DePee : public osg::Referenced class DePee : public osg::Referenced
{ {

View File

@@ -232,7 +232,7 @@ int main( int argc, char **argv )
viewer.getCamera()->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR); viewer.getCamera()->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
// read the model to do depth peeling with // read the model to do depth peeling with
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFile(arguments.argv()[1]); osg::Node* loadedModel = osgDB::readNodeFile(arguments.argv()[1]);
if (!loadedModel) if (!loadedModel)
return 1; return 1;

View File

@@ -52,96 +52,18 @@
using namespace osg; using namespace osg;
struct CommandLineOptions osg::Node* createDistortionSubgraph(osg::Node* subgraph, const osg::Vec4& clearColour)
{
unsigned int width;
unsigned int height;
unsigned int tex_width;
unsigned int tex_height;
double sphere_radius;
double collar_radius;
double distance;
CommandLineOptions():
width(1024),
height(1024),
tex_width(1024),
tex_height(1024),
sphere_radius(1.0),
collar_radius(0.45),
distance(1.0)
{
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
if (!wsi)
{
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
return;
}
unsigned int width, height;
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
}
void read(osg::ArgumentParser& arguments)
{
while (arguments.read("--width",width)) {}
while (arguments.read("--height",height)) {}
while (arguments.read("--texture-width",tex_width) || arguments.read("--tx",tex_width) ) {}
while (arguments.read("--texture-height",tex_height) || arguments.read("--ty",tex_height) ) {}
while (arguments.read("--radius", sphere_radius)) {}
while (arguments.read("--collar", collar_radius)) {}
distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
while (arguments.read("--distance", distance)) {}
}
};
class WindowResizedHandler : public osgGA::GUIEventHandler
{
public:
WindowResizedHandler()
{
}
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv)
{
osg::Camera* camera = dynamic_cast<osg::Camera*>(object);
if (!camera) return false;
const osg::FrameStamp* fs = nv->getFrameStamp();
if (ea.getEventType()==osgGA::GUIEventAdapter::RESIZE)
{
OSG_NOTICE<<"Window resized event context="<<ea.getGraphicsContext()<<" frameNumber = "<<fs->getFrameNumber()<<std::endl;
OSG_NOTICE<<" WindowX="<<ea.getWindowX()<<std::endl;
OSG_NOTICE<<" WindowY="<<ea.getWindowY()<<std::endl;
OSG_NOTICE<<" WindowWidth="<<ea.getWindowWidth()<<std::endl;
OSG_NOTICE<<" WindowHeight="<<ea.getWindowHeight()<<std::endl;
// reset the Camera viewport and associated Texture's to make sure it tracks the new window size.
camera->resize(ea.getWindowWidth(), ea.getWindowHeight());
}
return false;
}
};
osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subgraph, const osg::Vec4& clearColour)
{ {
osg::Group* distortionNode = new osg::Group; osg::Group* distortionNode = new osg::Group;
unsigned int tex_width = 1024;
unsigned int tex_height = 1024;
osg::Texture2D* texture = new osg::Texture2D; osg::Texture2D* texture = new osg::Texture2D;
texture->setTextureSize(options.tex_width, options.tex_height); texture->setTextureSize(tex_width, tex_height);
texture->setInternalFormat(GL_RGBA); texture->setInternalFormat(GL_RGBA);
texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR); texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);
texture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR); texture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP_TO_EDGE);
texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP_TO_EDGE);
// set up the render to texture camera. // set up the render to texture camera.
{ {
@@ -157,7 +79,7 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
camera->setViewMatrix(osg::Matrixd::identity()); camera->setViewMatrix(osg::Matrixd::identity());
// set viewport // set viewport
camera->setViewport(0,0,options.tex_width,options.tex_height); camera->setViewport(0,0,tex_width,tex_height);
// set the camera to render before the main camera. // set the camera to render before the main camera.
camera->setRenderOrder(osg::Camera::PRE_RENDER); camera->setRenderOrder(osg::Camera::PRE_RENDER);
@@ -172,8 +94,6 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
camera->addChild(subgraph); camera->addChild(subgraph);
distortionNode->addChild(camera); distortionNode->addChild(camera);
camera->addEventCallback(new WindowResizedHandler());
} }
// set up the hud camera // set up the hud camera
@@ -266,13 +186,27 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
return distortionNode; return distortionNode;
} }
void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options) void setDomeFaces(osgViewer::Viewer& viewer, osg::ArgumentParser& arguments)
{ {
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
if (!wsi)
{
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
return;
}
unsigned int width, height;
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
while (arguments.read("--width",width)) {}
while (arguments.read("--height",height)) {}
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
traits->x = 0; traits->x = 0;
traits->y = 0; traits->y = 0;
traits->width = options.width; traits->width = width;
traits->height = options.height; traits->height = height;
traits->windowDecoration = true; traits->windowDecoration = true;
traits->doubleBuffer = true; traits->doubleBuffer = true;
traits->sharedContext = 0; traits->sharedContext = 0;
@@ -285,8 +219,8 @@ void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options)
} }
int center_x = options.width/2; int center_x = width/2;
int center_y = options.height/2; int center_y = height/2;
int camera_width = 256; int camera_width = 256;
int camera_height = 256; int camera_height = 256;
@@ -369,18 +303,27 @@ void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options)
} }
osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3& widthVector, const osg::Vec3& heightVector, osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3& widthVector, const osg::Vec3& heightVector,
CommandLineOptions& options) osg::ArgumentParser& arguments)
{ {
double sphere_radius = 1.0;
if (arguments.read("--radius", sphere_radius)) {}
double collar_radius = 0.45;
if (arguments.read("--collar", collar_radius)) {}
osg::Vec3d center(0.0,0.0,0.0); osg::Vec3d center(0.0,0.0,0.0);
osg::Vec3d eye(0.0,0.0,0.0); osg::Vec3d eye(0.0,0.0,0.0);
double distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
if (arguments.read("--distance", distance)) {}
bool centerProjection = false; bool centerProjection = false;
osg::Vec3d projector = eye - osg::Vec3d(0.0,0.0, options.distance); osg::Vec3d projector = eye - osg::Vec3d(0.0,0.0, distance);
osg::notify(osg::NOTICE)<<"Projector position = "<<projector<<std::endl; osg::notify(osg::NOTICE)<<"Projector position = "<<projector<<std::endl;
osg::notify(osg::NOTICE)<<"distance = "<<options.distance<<std::endl; osg::notify(osg::NOTICE)<<"distance = "<<distance<<std::endl;
// create the quad to visualize. // create the quad to visualize.
@@ -453,15 +396,15 @@ osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3
// osg::notify(osg::NOTICE)<<"theta = "<<theta<< "phi="<<phi<<std::endl; // osg::notify(osg::NOTICE)<<"theta = "<<theta<< "phi="<<phi<<std::endl;
double f = options.distance * sin(phi); double f = distance * sin(phi);
double e = options.distance * cos(phi) + sqrt( options.sphere_radius*options.sphere_radius - f*f); double e = distance * cos(phi) + sqrt( sphere_radius*sphere_radius - f*f);
double l = e * cos(phi); double l = e * cos(phi);
double h = e * sin(phi); double h = e * sin(phi);
double z = l - options.distance; double z = l - distance;
osg::Vec3 texcoord(h * cos(theta) / options.sphere_radius, osg::Vec3 texcoord(h * cos(theta) / sphere_radius,
h * sin(theta) / options.sphere_radius, h * sin(theta) / sphere_radius,
z / options.sphere_radius); z / sphere_radius);
vertices->push_back(cursor); vertices->push_back(cursor);
colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f)); colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
@@ -494,17 +437,33 @@ osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3
return geometry; return geometry;
} }
void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options) void setDomeCorrection(osgViewer::Viewer& viewer, osg::ArgumentParser& arguments)
{ {
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
if (!wsi)
{
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
return;
}
unsigned int width, height;
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
while (arguments.read("--width",width)) {}
while (arguments.read("--height",height)) {}
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
traits->x = 0; traits->x = 0;
traits->y = 0; traits->y = 0;
traits->width = options.width; traits->width = width;
traits->height = options.height; traits->height = height;
traits->windowDecoration = false; traits->windowDecoration = false;
traits->doubleBuffer = true; traits->doubleBuffer = true;
traits->sharedContext = 0; traits->sharedContext = 0;
osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get()); osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
if (!gc) if (!gc)
{ {
@@ -512,18 +471,18 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
return; return;
} }
int camera_width = options.tex_width; int tex_width = 512;
int camera_height = options.tex_height; int tex_height = 512;
int camera_width = tex_width;
int camera_height = tex_height;
osg::TextureCubeMap* texture = new osg::TextureCubeMap; osg::TextureCubeMap* texture = new osg::TextureCubeMap;
texture->setTextureSize(options.tex_width, options.tex_height); texture->setTextureSize(tex_width, tex_height);
texture->setInternalFormat(GL_RGB); texture->setInternalFormat(GL_RGB);
texture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::LINEAR); texture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::LINEAR);
texture->setFilter(osg::Texture::MAG_FILTER,osg::Texture::LINEAR); texture->setFilter(osg::Texture::MAG_FILTER,osg::Texture::LINEAR);
texture->setWrap(osg::Texture::WRAP_S,osg::Texture::CLAMP_TO_EDGE);
texture->setWrap(osg::Texture::WRAP_T,osg::Texture::CLAMP_TO_EDGE);
texture->setWrap(osg::Texture::WRAP_R,osg::Texture::CLAMP_TO_EDGE);
#if 0 #if 0
osg::Camera::RenderTargetImplementation renderTargetImplementation = osg::Camera::SEPERATE_WINDOW; osg::Camera::RenderTargetImplementation renderTargetImplementation = osg::Camera::SEPERATE_WINDOW;
@@ -655,7 +614,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
// distortion correction set up. // distortion correction set up.
{ {
osg::Geode* geode = new osg::Geode(); osg::Geode* geode = new osg::Geode();
geode->addDrawable(createDomeDistortionMesh(osg::Vec3(0.0f,0.0f,0.0f), osg::Vec3(options.width,0.0f,0.0f), osg::Vec3(0.0f,options.height,0.0f), options)); geode->addDrawable(createDomeDistortionMesh(osg::Vec3(0.0f,0.0f,0.0f), osg::Vec3(width,0.0f,0.0f), osg::Vec3(0.0f,height,0.0f), arguments));
// new we need to add the texture to the mesh, we do so by creating a // new we need to add the texture to the mesh, we do so by creating a
// StateSet to contain the Texture StateAttribute. // StateSet to contain the Texture StateAttribute.
@@ -667,7 +626,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
camera->setGraphicsContext(gc.get()); camera->setGraphicsContext(gc.get());
camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT ); camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
camera->setClearColor( osg::Vec4(0.1,0.1,1.0,1.0) ); camera->setClearColor( osg::Vec4(0.1,0.1,1.0,1.0) );
camera->setViewport(new osg::Viewport(0, 0, options.width, options.height)); camera->setViewport(new osg::Viewport(0, 0, width, height));
GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT; GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
camera->setDrawBuffer(buffer); camera->setDrawBuffer(buffer);
camera->setReadBuffer(buffer); camera->setReadBuffer(buffer);
@@ -676,7 +635,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
//camera->setInheritanceMask(camera->getInheritanceMask() & ~osg::CullSettings::CLEAR_COLOR & ~osg::CullSettings::COMPUTE_NEAR_FAR_MODE); //camera->setInheritanceMask(camera->getInheritanceMask() & ~osg::CullSettings::CLEAR_COLOR & ~osg::CullSettings::COMPUTE_NEAR_FAR_MODE);
//camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR); //camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
camera->setProjectionMatrixAsOrtho2D(0,options.width,0,options.height); camera->setProjectionMatrixAsOrtho2D(0,width,0,height);
camera->setViewMatrix(osg::Matrix::identity()); camera->setViewMatrix(osg::Matrix::identity());
// add subgraph to render // add subgraph to render
@@ -696,17 +655,14 @@ int main(int argc, char** argv)
// use an ArgumentParser object to manage the program arguments. // use an ArgumentParser object to manage the program arguments.
osg::ArgumentParser arguments(&argc,argv); osg::ArgumentParser arguments(&argc,argv);
CommandLineOptions options;
options.read(arguments);
// construct the viewer. // construct the viewer.
osgViewer::Viewer viewer(arguments); osgViewer::Viewer viewer;
// load the nodes from the commandline arguments. // load the nodes from the commandline arguments.
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // if not loaded assume no arguments passed in, try use default mode instead.
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt"); if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
if (!loadedModel) if (!loadedModel)
{ {
@@ -718,20 +674,20 @@ int main(int argc, char** argv)
if (arguments.read("--dome") || arguments.read("--puffer") ) if (arguments.read("--dome") || arguments.read("--puffer") )
{ {
setDomeCorrection(viewer, options); setDomeCorrection(viewer, arguments);
viewer.setSceneData( loadedModel ); viewer.setSceneData( loadedModel );
} }
else if (arguments.read("--faces")) else if (arguments.read("--faces"))
{ {
setDomeFaces(viewer, options); setDomeFaces(viewer, arguments);
viewer.setSceneData( loadedModel ); viewer.setSceneData( loadedModel );
} }
else else
{ {
osg::Node* distortionNode = createDistortionSubgraph( options, loadedModel.get(), viewer.getCamera()->getClearColor()); osg::Node* distortionNode = createDistortionSubgraph( loadedModel, viewer.getCamera()->getClearColor());
viewer.setSceneData( distortionNode ); viewer.setSceneData( distortionNode );
} }
@@ -782,9 +738,6 @@ int main(int argc, char** argv)
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
// add window resize handler
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
// add the state manipulator // add the state manipulator
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );

View File

@@ -97,7 +97,7 @@ createStateSet()
ss->setAttribute( program.get(), ss->setAttribute( program.get(),
osg::StateAttribute::ON | osg::StateAttribute::PROTECTED ); osg::StateAttribute::ON | osg::StateAttribute::PROTECTED );
osg::ref_ptr< osg::Image> iLogo = osgDB::readRefImageFile( "Images/osg128.png" ); osg::ref_ptr< osg::Image> iLogo = osgDB::readImageFile( "Images/osg128.png" );
if( !iLogo.valid() ) if( !iLogo.valid() )
{ {
osg::notify( osg::ALWAYS ) << "Can't open image file osg128.png" << std::endl; osg::notify( osg::ALWAYS ) << "Can't open image file osg128.png" << std::endl;

View File

@@ -51,7 +51,7 @@ osg::Node* createEarth()
geode->addDrawable(sd); geode->addDrawable(sd);
std::string filename = osgDB::findDataFile("Images/land_shallow_topo_2048.jpg"); std::string filename = osgDB::findDataFile("Images/land_shallow_topo_2048.jpg");
geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readRefImageFile(filename))); geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readImageFile(filename)));
osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode; osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode;
csn->setEllipsoidModel(new osg::EllipsoidModel()); csn->setEllipsoidModel(new osg::EllipsoidModel());

View File

@@ -19,10 +19,17 @@ void textInfo(osgText::Text* text)
for(unsigned int i = 0; i < s.size(); i++) for(unsigned int i = 0; i < s.size(); i++)
{ {
osg::Vec2 ul = (*gq.getCoords())[0 + (i * 4)]; // upperLeft osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft
osg::Vec2 ll = (*gq.getCoords())[1 + (i * 4)]; // lowerLeft osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft
osg::Vec2 lr = (*gq.getCoords())[2 + (i * 4)]; // lowerRight osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight
osg::Vec2 ur = (*gq.getCoords())[3 + (i * 4)]; // upperRight osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight
/*
osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)];
osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)];
osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)];
osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)];
*/
osg::notify(osg::NOTICE) osg::notify(osg::NOTICE)
<< "'" << static_cast<char>(s[i]) << "':" << "'" << static_cast<char>(s[i]) << "':"
@@ -62,7 +69,7 @@ osgText::Text* createLabel(const std::string& l, const char* f, unsigned int siz
static osg::Vec3 pos(10.0f, 10.0f, 0.0f); static osg::Vec3 pos(10.0f, 10.0f, 0.0f);
osgText::Text* label = new osgText::Text(); osgText::Text* label = new osgText::Text();
osg::ref_ptr<osgText::Font> font = osgText::readRefFontFile(f); osgText::Font* font = osgText::readFontFile(f);
label->setFont(font); label->setFont(font);
label->setCharacterSize(size); label->setCharacterSize(size);

View File

@@ -388,7 +388,7 @@ osg::Geode* ForestTechniqueManager::createTerrain(const osg::Vec3& origin, const
// --------------------------------------- // ---------------------------------------
osg::StateSet* stateset = new osg::StateSet(); osg::StateSet* stateset = new osg::StateSet();
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/lz.rgb"); osg::Image* image = osgDB::readImageFile("Images/lz.rgb");
if (image) if (image)
{ {
osg::Texture2D* texture = new osg::Texture2D; osg::Texture2D* texture = new osg::Texture2D;
@@ -812,9 +812,9 @@ class ShaderGeometry : public osg::Drawable
} }
} }
virtual osg::BoundingBox computeBoundingBox() const virtual osg::BoundingBox computeBound() const
{ {
osg::BoundingBox geom_box = _geometry->getBoundingBox(); osg::BoundingBox geom_box = _geometry->getBound();
osg::BoundingBox bb; osg::BoundingBox bb;
for(PositionSizeList::const_iterator itr = _trees.begin(); for(PositionSizeList::const_iterator itr = _trees.begin();
itr != _trees.end(); itr != _trees.end();
@@ -1182,7 +1182,7 @@ osg::Node* ForestTechniqueManager::createScene(unsigned int numTreesToCreates, u
osg::Texture2D *tex = new osg::Texture2D; osg::Texture2D *tex = new osg::Texture2D;
tex->setWrap( osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP ); tex->setWrap( osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP );
tex->setWrap( osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP ); tex->setWrap( osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP );
tex->setImage(osgDB::readRefImageFile("Images/tree0.rgba")); tex->setImage(osgDB::readImageFile("Images/tree0.rgba"));
osg::StateSet *dstate = new osg::StateSet; osg::StateSet *dstate = new osg::StateSet;
{ {

View File

@@ -23,6 +23,7 @@
#include <osg/Geometry> #include <osg/Geometry>
#include <osg/GLExtensions> #include <osg/GLExtensions>
#include <osg/Node> #include <osg/Node>
#include <osg/NodeCallback>
#include <osg/Notify> #include <osg/Notify>
#include <osg/observer_ptr> #include <osg/observer_ptr>
#include <osg/Projection> #include <osg/Projection>
@@ -132,10 +133,10 @@ void getPossibleConfigs(GraphicsContext* gc, BufferConfigList& colorConfigs,
unsigned contextID = gc->getState()->getContextID(); unsigned contextID = gc->getState()->getContextID();
colorConfigs.push_back(BufferConfig("RGBA8", GL_RGBA8, 8)); colorConfigs.push_back(BufferConfig("RGBA8", GL_RGBA8, 8));
depthConfigs.push_back(BufferConfig("D24", GL_DEPTH_COMPONENT24, 24)); depthConfigs.push_back(BufferConfig("D24", GL_DEPTH_COMPONENT24, 24));
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>(); FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
if (!ext->isRenderbufferMultisampleSupported()) if (!fboe->isSupported())
return; return;
if (ext->isMultisampleSupported) if (fboe->isMultisampleSupported())
glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples); glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples);
// isMultisampleCoverageSupported // isMultisampleCoverageSupported
if (isGLExtensionSupported(contextID, if (isGLExtensionSupported(contextID,
@@ -156,8 +157,9 @@ void getPossibleConfigs(GraphicsContext* gc, BufferConfigList& colorConfigs,
bool checkFramebufferStatus(GraphicsContext* gc, bool silent = false) bool checkFramebufferStatus(GraphicsContext* gc, bool silent = false)
{ {
State& state = *gc->getState(); State& state = *gc->getState();
osg::GLExtensions* ext = state.get<GLExtensions>(); unsigned contextID = state.getContextID();
switch(ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT)) { FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
switch(fboe->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT)) {
case GL_FRAMEBUFFER_COMPLETE_EXT: case GL_FRAMEBUFFER_COMPLETE_EXT:
break; break;
case GL_FRAMEBUFFER_UNSUPPORTED_EXT: case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
@@ -241,30 +243,30 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
} }
State& state = *gc->getState(); State& state = *gc->getState();
unsigned int contextID = state.getContextID(); unsigned int contextID = state.getContextID();
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>(); FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
data.fb->apply(state); data.fb->apply(state);
result = checkFramebufferStatus(gc, true); result = checkFramebufferStatus(gc, true);
if (!result) if (!result)
{ {
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0); fboe->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
return false; return false;
} }
int query; int query;
if (multisample) if (multisample)
{ {
GLuint colorRBID = colorRB->getObjectID(contextID, ext); GLuint colorRBID = colorRB->getObjectID(contextID, fboe);
ext->glBindRenderbuffer(GL_RENDERBUFFER_EXT, colorRBID); fboe->glBindRenderbuffer(GL_RENDERBUFFER_EXT, colorRBID);
if (csaa) if (csaa)
{ {
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
GL_RENDERBUFFER_COVERAGE_SAMPLES_NV, GL_RENDERBUFFER_COVERAGE_SAMPLES_NV,
&query); &query);
if (query < config.coverageSamples) if (query < config.coverageSamples)
result = false; result = false;
else else
config.coverageSamples = query; config.coverageSamples = query;
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
GL_RENDERBUFFER_COLOR_SAMPLES_NV, GL_RENDERBUFFER_COLOR_SAMPLES_NV,
&query); &query);
@@ -276,7 +278,7 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
} }
else else
{ {
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT, fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
GL_RENDERBUFFER_SAMPLES_EXT, GL_RENDERBUFFER_SAMPLES_EXT,
&query); &query);
if (query < config.depthSamples) if (query < config.depthSamples)
@@ -302,7 +304,7 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
result = false; result = false;
} }
} }
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0); fboe->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
return result; return result;
} }
@@ -695,15 +697,15 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
DisplaySettings* ds = viewer.getDisplaySettings() ? viewer.getDisplaySettings() : DisplaySettings::instance().get(); DisplaySettings* ds = viewer.getDisplaySettings() ? viewer.getDisplaySettings() : DisplaySettings::instance().get();
GraphicsContext::ScreenIdentifier si; GraphicsContext::ScreenIdentifier si;
si.readDISPLAY(); si.readDISPLAY();
si.setUndefinedScreenDetailsToDefaultScreen();
// displayNum has not been set so reset it to 0.
if (si.displayNum<0) si.displayNum = 0;
bool decoration = true; bool decoration = true;
if (x < 0) if (x < 0)
{ {
unsigned int w, h; unsigned int w, h;
wsi->getScreenResolution(si, w, h); wsi->getScreenResolution(si, w, h);
OSG_NOTICE<<"Screen resolution is "<<w<<", "<<h<<std::endl;
OSG_NOTICE<<"ScreenIdentifier "<<si.displayNum<<", "<<si.screenNum<<std::endl;
x = 0; x = 0;
y = 0; y = 0;
width = w; width = w;
@@ -711,9 +713,8 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
decoration = false; decoration = false;
} }
OSG_NOTICE<<"x = "<<x<<", y = "<<y<<", width = "<<width<<", height = "<<height<<std::endl; ref_ptr<GraphicsContext::Traits> traits
= new GraphicsContext::Traits(ds);
ref_ptr<GraphicsContext::Traits> traits = new GraphicsContext::Traits(ds);
traits->hostName = si.hostName; traits->hostName = si.hostName;
traits->displayNum = si.displayNum; traits->displayNum = si.displayNum;
traits->screenNum = si.screenNum; traits->screenNum = si.screenNum;
@@ -724,9 +725,10 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
traits->windowDecoration = decoration; traits->windowDecoration = decoration;
traits->doubleBuffer = true; traits->doubleBuffer = true;
traits->sharedContext = 0; traits->sharedContext = 0;
ref_ptr<GraphicsContext> gc
ref_ptr<GraphicsContext> gc = GraphicsContext::createGraphicsContext(traits.get()); = GraphicsContext::createGraphicsContext(traits.get());
osgViewer::GraphicsWindow* gw = dynamic_cast<osgViewer::GraphicsWindow*>(gc.get()); osgViewer::GraphicsWindow* gw
= dynamic_cast<osgViewer::GraphicsWindow*>(gc.get());
if (gw) if (gw)
{ {
OSG_NOTIFY(INFO)<<"View::setUpViewOnSingleScreen - GraphicsWindow has been created successfully."<<std::endl; OSG_NOTIFY(INFO)<<"View::setUpViewOnSingleScreen - GraphicsWindow has been created successfully."<<std::endl;
@@ -749,29 +751,20 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
} }
// Context has to be current to test for extensions // Context has to be current to test for extensions
gc->realize(); gc->realize();
if (!gc->makeCurrent()) gc->makeCurrent();
{
OSG_NOTIFY(NOTICE) << "Unable to create GraphicsWindow"<<std::endl;
gc->releaseContext();
gc->close(true);
return 0;
}
unsigned int contextID = gc->getState()->getContextID(); unsigned int contextID = gc->getState()->getContextID();
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>(); FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
if (!ext->isFrameBufferObjectSupported) if (!fboe->isSupported())
{ {
OSG_NOTIFY(NOTICE) << "Frame buffer objects are not supported\n"; OSG_NOTIFY(NOTICE) << "Frame buffer objects are not supported\n";
gc->releaseContext(); gc->releaseContext();
gc->close(true); gc->close(true);
return 0; return 0;
} }
if (isGLExtensionSupported(contextID, "GL_ARB_depth_buffer_float")) if (isGLExtensionSupported(contextID, "GL_ARB_depth_buffer_float"))
depthTextureEnum = GL_DEPTH_COMPONENT32F; depthTextureEnum = GL_DEPTH_COMPONENT32F;
else if (isGLExtensionSupported(contextID, "GL_NV_depth_buffer_float")) else if (isGLExtensionSupported(contextID, "GL_NV_depth_buffer_float"))
depthTextureEnum = GL_DEPTH_COMPONENT32F_NV; depthTextureEnum = GL_DEPTH_COMPONENT32F_NV;
BufferConfigList colorConfigs; BufferConfigList colorConfigs;
BufferConfigList depthConfigs; BufferConfigList depthConfigs;
vector<int> coverageConfigs; vector<int> coverageConfigs;
@@ -963,7 +956,7 @@ int main(int argc, char **argv)
arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION); arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION);
return 1; return 1;
} }
ref_ptr<Node> loadedModel = osgDB::readRefNodeFiles(arguments); ref_ptr<Node> loadedModel = osgDB::readNodeFiles(arguments);
if (!loadedModel) { if (!loadedModel) {
cerr << "couldn't load " << argv[1] << "\n"; cerr << "couldn't load " << argv[1] << "\n";
return 1; return 1;

View File

@@ -175,10 +175,10 @@ protected:
float zPos = -0.1; // note from Robert, was 0.1f, but now must be -0.1f to keep text visible??#!? due float zPos = -0.1; // note from Robert, was 0.1f, but now must be -0.1f to keep text visible??#!? due
// to some other change in the OSG not tracked down yet... // to some other change in the OSG not tracked down yet...
osg::ref_ptr<osgText::Font> arial = osgText::readRefFontFile("fonts/arial.ttf"); osg::ref_ptr<osgText::Font> arial = osgText::readFontFile("fonts/arial.ttf");
osg::ref_ptr<osgText::Text> hints = new osgText::Text; osg::ref_ptr<osgText::Text> hints = new osgText::Text;
hints->setFont(arial); hints->setFont(arial.get());
hints->setColor(_hints_color); hints->setColor(_hints_color);
hints->setAlignment(osgText::Text::CENTER_BOTTOM); hints->setAlignment(osgText::Text::CENTER_BOTTOM);
hints->setCharacterSize(13); hints->setCharacterSize(13);
@@ -336,10 +336,10 @@ int main(int argc, char *argv[])
} }
// read the scene from the list of file specified commandline args. // read the scene from the list of file specified commandline args.
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments); osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
// if not loaded assume no arguments passed in, try use default mode instead. // if not loaded assume no arguments passed in, try use default mode instead.
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("dumptruck.osgt"); if (!loadedModel) loadedModel = osgDB::readNodeFile("dumptruck.osgt");
if (!loadedModel) if (!loadedModel)
{ {

View File

@@ -117,14 +117,14 @@ int main(int argc, char *argv[])
} }
// load the image // load the image
osg::ref_ptr<osg::Image> startIm = osgDB::readRefImageFile(startName); osg::ref_ptr<osg::Image> startIm = osgDB::readImageFile(startName);
if (!startIm) { if (!startIm) {
std::cout << "Could not load start image.\n"; std::cout << "Could not load start image.\n";
return(1); return(1);
} }
osg::ref_ptr<osg::Node> scene = createScene(startIm.get()); osg::Node* scene = createScene(startIm.get());
// construct the viewer. // construct the viewer.
osgViewer::Viewer viewer; osgViewer::Viewer viewer;

View File

@@ -44,7 +44,7 @@
// wraps OpenGL very thinly and therefore uses all the same enum and naming conventions. The coordinate data is also // wraps OpenGL very thinly and therefore uses all the same enum and naming conventions. The coordinate data is also
// wrapped around OpenGL's vertex arrays and draw arrays/elements calls. Familiarity with // wrapped around OpenGL's vertex arrays and draw arrays/elements calls. Familiarity with
// OpenGL will help you understand the osg::Geometry class which encapsulate all this, or if you // OpenGL will help you understand the osg::Geometry class which encapsulate all this, or if you
// haven't learned OpenGL yet, learning osg::Geometry will help you understand how OpenGL // havn't learned OpenGL yet, learning osg::Geometry will help you understand how OpenGL
// works! // works!
// The osg::Geometry class "is a" subclass of osg::Drawable base class, so is an object that provides // The osg::Geometry class "is a" subclass of osg::Drawable base class, so is an object that provides
@@ -550,7 +550,7 @@ osg::Node* createBackground()
{ {
// we'll create a texture mapped quad to sit behind the Geometry // we'll create a texture mapped quad to sit behind the Geometry
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/primitives.gif"); osg::Image* image = osgDB::readImageFile("Images/primitives.gif");
if (!image) return NULL; if (!image) return NULL;

View File

@@ -46,7 +46,7 @@
#ifdef ENABLE_GLSL #ifdef ENABLE_GLSL
class SineAnimation: public osg::UniformCallback class SineAnimation: public osg::Uniform::Callback
{ {
public: public:
SineAnimation( float rate = 1.0f, float scale = 1.0f, float offset = 0.0f ) : SineAnimation( float rate = 1.0f, float scale = 1.0f, float offset = 0.0f ) :

View File

@@ -1,84 +0,0 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield
* Copyright (C) 2014 Pawel Ksiezopolski
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*
*/
#include "AggregateGeometryVisitor.h"
AggregateGeometryVisitor::AggregateGeometryVisitor( ConvertTrianglesOperator* ctOperator )
: osg::NodeVisitor( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
{
_ctOperator.setConverter(ctOperator);
init();
}
void AggregateGeometryVisitor::init()
{
_aggregatedGeometry = new osg::Geometry;
_ctOperator.initGeometry( _aggregatedGeometry.get() );
_matrixStack.clear();
}
AggregateGeometryVisitor::AddObjectResult AggregateGeometryVisitor::addObject( osg::Node* object, unsigned int typeID, unsigned int lodNumber )
{
unsigned int currentVertexFirst = _aggregatedGeometry->getVertexArray()->getNumElements();
_currentTypeID = typeID;
_currentLodNumber = lodNumber;
object->accept(*this);
unsigned int currentVertexCount = _aggregatedGeometry->getVertexArray()->getNumElements() - currentVertexFirst;
_aggregatedGeometry->addPrimitiveSet( new osg::DrawArrays( osg::PrimitiveSet::TRIANGLES, currentVertexFirst, currentVertexCount ) );
_matrixStack.clear();
return AddObjectResult( currentVertexFirst, currentVertexCount, _aggregatedGeometry->getNumPrimitiveSets()-1 );
}
void AggregateGeometryVisitor::apply( osg::Node& node )
{
bool pushed = _ctOperator.pushNode(&node);
traverse(node);
if( pushed ) _ctOperator.popNode();
}
void AggregateGeometryVisitor::apply( osg::Transform& transform )
{
bool pushed = _ctOperator.pushNode(&transform);
osg::Matrix matrix;
if( !_matrixStack.empty() )
matrix = _matrixStack.back();
transform.computeLocalToWorldMatrix( matrix, this );
_matrixStack.push_back( matrix );
traverse(transform);
_matrixStack.pop_back();
if( pushed ) _ctOperator.popNode();
}
void AggregateGeometryVisitor::apply( osg::Geode& geode )
{
bool pushed = _ctOperator.pushNode(&geode);
osg::Matrix matrix;
if(! _matrixStack.empty() )
matrix = _matrixStack.back();
for( unsigned int i=0; i<geode.getNumDrawables(); ++i)
{
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
if ( geom != NULL )
{
_ctOperator.setGeometryData( matrix, geom, _aggregatedGeometry.get(), (float) _currentTypeID, (float) _currentLodNumber );
geom->accept( _ctOperator );
}
}
traverse(geode);
if( pushed ) _ctOperator.popNode();
}

View File

@@ -1,290 +0,0 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield
* Copyright (C) 2014 Pawel Ksiezopolski
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*
*/
#ifndef AGREGATE_GEOMETRY_VISITOR_H
#define AGREGATE_GEOMETRY_VISITOR_H 1
#include <osg/Geode>
#include <osg/Geometry>
#include <osg/Transform>
#include <osg/NodeVisitor>
#include <osg/TriangleIndexFunctor>
// AggregateGeometryVisitor uses ConvertTrianglesOperator to create and fill osg::Geometry
// with data matching users needs
struct ConvertTrianglesOperator : public osg::Referenced
{
ConvertTrianglesOperator()
: osg::Referenced()
{
}
virtual void initGeometry( osg::Geometry* outputGeometry ) = 0;
virtual bool pushNode( osg::Node* node )
{
return false;
}
virtual void popNode() = 0;
virtual void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber ) = 0;
virtual void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 ) = 0;
};
class GetVec2FromArrayVisitor : public osg::ValueVisitor
{
public:
GetVec2FromArrayVisitor()
{
}
void apply( GLfloat& value )
{
out = osg::Vec2( value, 0.0 );
}
void apply( osg::Vec2& value )
{
out = osg::Vec2( value.x(), value.y() );
}
virtual void apply( osg::Vec2d& value )
{
out = osg::Vec2( value.x(), value.y() );
}
void apply( osg::Vec3& value )
{
out = osg::Vec2( value.x(), value.y() );
}
void apply( osg::Vec4& value )
{
out = osg::Vec2( value.x(), value.y() );
}
void apply( osg::Vec3d& value )
{
out = osg::Vec2( value.x(), value.y() );
}
void apply( osg::Vec4d& value )
{
out = osg::Vec2( value.x(), value.y() );
}
osg::Vec2 out;
};
// ConvertTrianglesOperatorClassic is a ConvertTrianglesOperator that creates
// aggregated geometry with standard set of vertex attributes : vertices, normals, color and texCoord0.
// texCoord1 holds additional information about vertex ( typeID, lodNumber, boneIndex )
struct ConvertTrianglesOperatorClassic : public ConvertTrianglesOperator
{
ConvertTrianglesOperatorClassic()
: ConvertTrianglesOperator(), _typeID(0.0f), _lodNumber(0.0f)
{
_boneIndices.push_back(0.0);
}
virtual void initGeometry( osg::Geometry* outputGeometry )
{
osg::Vec3Array* vertices = new osg::Vec3Array; outputGeometry->setVertexArray( vertices );
osg::Vec4Array* colors = new osg::Vec4Array; outputGeometry->setColorArray( colors, osg::Array::BIND_PER_VERTEX );
osg::Vec3Array* normals = new osg::Vec3Array; outputGeometry->setNormalArray( normals, osg::Array::BIND_PER_VERTEX );
osg::Vec2Array* texCoords0 = new osg::Vec2Array; outputGeometry->setTexCoordArray( 0, texCoords0 );
osg::Vec3Array* texCoords1 = new osg::Vec3Array; outputGeometry->setTexCoordArray( 1, texCoords1 );
outputGeometry->setStateSet(NULL);
}
virtual bool pushNode( osg::Node* node )
{
std::map<std::string,float>::iterator it = _boneNames.find( node->getName() );
if(it==_boneNames.end())
return false;
_boneIndices.push_back( it->second );
return true;
}
virtual void popNode()
{
_boneIndices.pop_back();
}
virtual void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber )
{
_matrix = matrix;
_inputVertices = dynamic_cast<osg::Vec3Array *>( inputGeometry->getVertexArray() );
_inputColors = dynamic_cast<osg::Vec4Array *>( inputGeometry->getColorArray() );
_inputNormals = dynamic_cast<osg::Vec3Array *>( inputGeometry->getNormalArray() );
_inputTexCoord0 = inputGeometry->getTexCoordArray(0);
_outputVertices = dynamic_cast<osg::Vec3Array *>( outputGeometry->getVertexArray() );
_outputColors = dynamic_cast<osg::Vec4Array *>( outputGeometry->getColorArray() );
_outputNormals = dynamic_cast<osg::Vec3Array *>( outputGeometry->getNormalArray() );
_outputTexCoord0 = dynamic_cast<osg::Vec2Array *>( outputGeometry->getTexCoordArray(0) );
_outputTexCoord1 = dynamic_cast<osg::Vec3Array *>( outputGeometry->getTexCoordArray(1) );
_typeID = typeID;
_lodNumber = lodNumber;
}
virtual void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 )
{
unsigned int ic1=i1, ic2=i2, ic3=i3, in1=i1, in2=i2, in3=i3, it01=i1, it02=i2, it03=i3;
if ( _inputColors!=NULL && _inputColors->size() == 1 )
{
ic1=0; ic2=0; ic3=0;
}
if ( _inputNormals!=NULL && _inputNormals->size() == 1 )
{
in1=0; in2=0; in3=0;
}
if ( _inputTexCoord0!=NULL && _inputTexCoord0->getNumElements()==1 )
{
it01=0; it02=0; it03=0;
}
_outputVertices->push_back( _inputVertices->at( i1 ) * _matrix );
_outputVertices->push_back( _inputVertices->at( i2 ) * _matrix );
_outputVertices->push_back( _inputVertices->at( i3 ) * _matrix );
if( _inputColors != NULL )
{
_outputColors->push_back( _inputColors->at( ic1 ) );
_outputColors->push_back( _inputColors->at( ic2 ) );
_outputColors->push_back( _inputColors->at( ic3 ) );
}
else
{
for(unsigned int i=0; i<3; ++i)
_outputColors->push_back( osg::Vec4(1.0,1.0,1.0,1.0) );
}
if( _inputNormals != NULL )
{
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in1 ), _matrix ) );
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in2 ), _matrix ) );
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in3 ), _matrix ) );
}
else
{
for(unsigned int i=0; i<3; ++i)
_outputNormals->push_back( osg::Vec3( 0.0,0.0,1.0 ) );
}
if( _inputTexCoord0 != NULL )
{
_inputTexCoord0->accept( it01, _inputTexCoord0Visitor );
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
_inputTexCoord0->accept( it02, _inputTexCoord0Visitor );
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
_inputTexCoord0->accept( it03, _inputTexCoord0Visitor );
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
}
else
{
for(unsigned int i=0; i<3; ++i)
_outputTexCoord0->push_back( osg::Vec2(0.0,0.0) );
}
for(unsigned int i=0; i<3; ++i)
_outputTexCoord1->push_back( osg::Vec3( _typeID, _lodNumber, _boneIndices.back() ) );
}
void registerBoneByName( const std::string& boneName, int boneIndex )
{
_boneNames[boneName] = float(boneIndex);
}
osg::Matrix _matrix;
osg::Vec3Array* _inputVertices;
osg::Vec4Array* _inputColors;
osg::Vec3Array* _inputNormals;
osg::Array* _inputTexCoord0;
osg::Vec3Array* _outputVertices;
osg::Vec4Array* _outputColors;
osg::Vec3Array* _outputNormals;
osg::Vec2Array* _outputTexCoord0;
osg::Vec3Array* _outputTexCoord1;
float _typeID;
float _lodNumber;
std::vector<float> _boneIndices;
std::map<std::string,float> _boneNames;
GetVec2FromArrayVisitor _inputTexCoord0Visitor;
};
class AggregateGeometryVisitor : public osg::NodeVisitor
{
public:
AggregateGeometryVisitor( ConvertTrianglesOperator* ctOperator );
void init();
// osg::TriangleIndexFunctor uses its template parameter as a base class, so we must use an adapter pattern to hack it
struct ConvertTrianglesBridge
{
inline void setConverter( ConvertTrianglesOperator* cto )
{
_converter = cto;
}
inline void initGeometry( osg::Geometry* outputGeometry )
{
_converter->initGeometry(outputGeometry);
}
inline bool pushNode( osg::Node* node )
{
return _converter->pushNode( node );
}
inline void popNode()
{
_converter->popNode();
}
inline void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber )
{
_converter->setGeometryData(matrix,inputGeometry,outputGeometry,typeID, lodNumber);
}
inline void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 )
{
_converter->operator()(i1,i2,i3);
}
osg::ref_ptr<ConvertTrianglesOperator> _converter;
};
// struct returning information about added object ( first vertex, vertex count, primitiveset index )
// used later to create indirect command texture buffers
struct AddObjectResult
{
AddObjectResult( unsigned int f, unsigned int c, unsigned int i )
: first(f), count(c), index(i)
{
}
unsigned int first;
unsigned int count;
unsigned int index;
};
AddObjectResult addObject( osg::Node* object, unsigned int typeID, unsigned int lodNumber );
void apply( osg::Node& node );
void apply( osg::Transform& transform );
void apply( osg::Geode& geode );
inline osg::Geometry* getAggregatedGeometry()
{
return _aggregatedGeometry.get();
}
protected:
osg::ref_ptr<osg::Geometry> _aggregatedGeometry;
osg::TriangleIndexFunctor<ConvertTrianglesBridge> _ctOperator;
std::vector<osg::Matrix> _matrixStack;
unsigned int _currentTypeID;
unsigned int _currentLodNumber;
};
#endif

View File

@@ -1,16 +0,0 @@
SET(TARGET_SRC
ShapeToGeometry.cpp
DrawIndirectPrimitiveSet.cpp
AggregateGeometryVisitor.cpp
osggpucull.cpp
)
SET(TARGET_H
ShapeToGeometry.h
DrawIndirectPrimitiveSet.h
AggregateGeometryVisitor.h
GpuCullShaders.h
)
#### end var setup ###
SETUP_EXAMPLE(osggpucull)

View File

@@ -1,139 +0,0 @@
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield
* Copyright (C) 2014 Pawel Ksiezopolski
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*
*/
#include "DrawIndirectPrimitiveSet.h"
#include <osg/State>
#include <osg/buffered_value>
#include <osg/ref_ptr>
#include <osg/GLExtensions>
#include <osg/Drawable>
void DrawArraysIndirect::draw(osg::State& state, bool useVertexBufferObjects) const
{
if( !_buffer.valid() )
return;
_buffer->bindBufferAs( state.getContextID(), GL_DRAW_INDIRECT_BUFFER );
// if you want to see how many primitives were rendered - uncomment code below, but
// be warned : it is a serious performance killer ( because of GPU->CPU roundtrip )
// osg::Drawable::Extensions *dext = osg::Drawable::getExtensions( state.getContextID(),true );
// int* tab = (int*)dext->glMapBuffer(GL_DRAW_INDIRECT_BUFFER,GL_READ_ONLY);
// int val = _indirect/sizeof(int);
// OSG_WARN<<"DrawArraysIndirect ("<<val<<"): "<< tab[val] << " " << tab[val+1] << " " << tab[val+2] << " " << tab[val+3] << std::endl;
// dext->glUnmapBuffer(GL_DRAW_INDIRECT_BUFFER);
DrawIndirectGLExtensions *ext = DrawIndirectGLExtensions::getExtensions( state.getContextID(),true );
ext->glDrawArraysIndirect( _mode, reinterpret_cast<const void*>(_indirect) );
_buffer->unbindBufferAs( state.getContextID(), GL_DRAW_INDIRECT_BUFFER );
}
void MultiDrawArraysIndirect::draw(osg::State& state, bool useVertexBufferObjects) const
{
if( !_buffer.valid() )
return;
_buffer->bindBufferAs( state.getContextID(), GL_DRAW_INDIRECT_BUFFER );
DrawIndirectGLExtensions *ext = DrawIndirectGLExtensions::getExtensions( state.getContextID(),true );
ext->glMultiDrawArraysIndirect( _mode, reinterpret_cast<const void*>(_indirect), _drawcount, _stride );
_buffer->unbindBufferAs( state.getContextID(), GL_DRAW_INDIRECT_BUFFER );
}
DrawIndirectGLExtensions::DrawIndirectGLExtensions( unsigned int contextID )
{
setupGLExtensions( contextID );
}
DrawIndirectGLExtensions::DrawIndirectGLExtensions( const DrawIndirectGLExtensions &rhs )
: Referenced()
{
_glDrawArraysIndirect = rhs._glDrawArraysIndirect;
_glMultiDrawArraysIndirect = rhs._glMultiDrawArraysIndirect;
_glMemoryBarrier = rhs._glMemoryBarrier;
}
void DrawIndirectGLExtensions::lowestCommonDenominator( const DrawIndirectGLExtensions &rhs )
{
if ( !rhs._glDrawArraysIndirect )
{
_glDrawArraysIndirect = rhs._glDrawArraysIndirect;
}
if ( !rhs._glMultiDrawArraysIndirect )
{
_glMultiDrawArraysIndirect = rhs._glMultiDrawArraysIndirect;
}
if ( !rhs._glMemoryBarrier )
{
_glMemoryBarrier = rhs._glMemoryBarrier;
}
}
void DrawIndirectGLExtensions::setupGLExtensions( unsigned int contextID )
{
_glDrawArraysIndirect = 0;
_glMultiDrawArraysIndirect = 0;
osg::setGLExtensionFuncPtr( _glDrawArraysIndirect, "glDrawArraysIndirect" );
osg::setGLExtensionFuncPtr( _glMultiDrawArraysIndirect, "glMultiDrawArraysIndirect" );
osg::setGLExtensionFuncPtr( _glMemoryBarrier, "glMemoryBarrier" );
}
void DrawIndirectGLExtensions::glDrawArraysIndirect(GLenum mode, const void * indirect) const
{
if ( _glDrawArraysIndirect )
{
_glDrawArraysIndirect( mode, indirect );
}
else
{
OSG_WARN<<"Error: glDrawArraysIndirect not supported by OpenGL driver"<<std::endl;
}
}
void DrawIndirectGLExtensions::glMultiDrawArraysIndirect(GLenum mode, const void *indirect, GLsizei drawcount, GLsizei stride)
{
if ( _glMultiDrawArraysIndirect )
{
_glMultiDrawArraysIndirect( mode, indirect, drawcount, stride );
}
else
{
OSG_WARN<<"Error: glMultiDrawArraysIndirect not supported by OpenGL driver"<<std::endl;
}
}
void DrawIndirectGLExtensions::glMemoryBarrier(GLbitfield barriers)
{
if ( _glMemoryBarrier )
{
_glMemoryBarrier( barriers );
}
else
{
OSG_WARN<<"Error: glMemoryBarrier not supported by OpenGL driver"<<std::endl;
}
}
typedef osg::buffered_value< osg::ref_ptr<DrawIndirectGLExtensions> > BufferedDrawIndirectGLExtensions;
static BufferedDrawIndirectGLExtensions bdiExtensions;
DrawIndirectGLExtensions* DrawIndirectGLExtensions::getExtensions( unsigned int contextID,bool createIfNotInitalized )
{
if ( !bdiExtensions[contextID] && createIfNotInitalized )
{
bdiExtensions[contextID] = new DrawIndirectGLExtensions( contextID );
}
return bdiExtensions[contextID].get();
}

Some files were not shown because too many files have changed in this diff Show More