Compare commits

..

1 Commits

Author SHA1 Message Date
Robert Osfield
7f2eaa4339 Release OpenSceneGraph-3.2.0 2013-07-24 17:47:38 +00:00
207 changed files with 1562 additions and 5003 deletions

View File

@@ -1,6 +1,6 @@
OpenSceneGraph Library 3.2.2 OpenSceneGraph Library 3.2.0
529 Contributors: 511 Contributors:
Firstname Surname Firstname Surname
----------------- -----------------
@@ -9,14 +9,14 @@ Don Burns
Stephan Huber Stephan Huber
Paul Martz Paul Martz
Mathias Fr<46>hlich Mathias Fr<46>hlich
Farshid Lashkari
Marco Jez Marco Jez
Farshid Lashkari
Wang Rui Wang Rui
Jean-S<>bastien Guay Jean-S<>bastien Guay
Ulrich Hertlein
Mike Weiblen Mike Weiblen
Sukender Ulrich Hertlein
Eric Wing Eric Wing
Sukender
Cedric Pinson Cedric Pinson
Brede Johansen Brede Johansen
Bob Kuehne Bob Kuehne
@@ -25,47 +25,43 @@ Geoff Michel
Wojciech Lewandowski Wojciech Lewandowski
Eric Sokolowsky Eric Sokolowsky
David Callu David Callu
Laurens Voerman
Colin McDonald
Trajce Nikolov Trajce Nikolov
Colin McDonald
Tim Moore Tim Moore
Martin Lavery Martin Lavery
Tree Laurens Voerman
Tree
Luigi Calori Luigi Calori
Mike Wittman Mike Wittman
Jason Beverage
Chris Hanson Chris Hanson
Roland Smeenk Roland Smeenk
Roger James Roger James
Mattias Helsing
Jeremy Moles Jeremy Moles
Jason Beverage
Jan Peciva Jan Peciva
Alberto Luaces
J.P. Delport J.P. Delport
Mattias Helsing
Magnus Kessler Magnus Kessler
David Fries David Fries
Andy Skinner Andy Skinner
Tom Jolley
Paul Melis Paul Melis
Alberto Luaces
Luc Frauciel Luc Frauciel
Tom Jolley
Pavel Moloshtan Pavel Moloshtan
Brad Christiansen Brad Christiansen
Olaf Flebbe Olaf Flebbe
Mathieu Marache Mathieu Marache
Jason Daly Jason Daly
Aurelien Albert
Art Tevs Art Tevs
Philip Lowman Philip Lowman
Per Fahlberg Per Fahlberg
Norman Vine Norman Vine
Lionel Lagarde
Terry Welsh Terry Welsh
Serge Lages Serge Lages
Romano Jos<6F> Magacho da Silva Lionel Lagarde
Pjotr Svetachov
Chris Denham Chris Denham
Alberto Farre Alberto Farre
Torben Dannhauer
Sherman Wilcox Sherman Wilcox
Robert Michael Robert Michael
Mourad Boufarguine Mourad Boufarguine
@@ -74,10 +70,13 @@ Adrian Egli
Ruben Lopez Ruben Lopez
Randall Hopper Randall Hopper
Jan Ciger Jan Ciger
Torben Dannhauer
Glenn Waldron Glenn Waldron
Gideon May Gideon May
Don Tidrow Don Tidrow
Aurelien Albert
Stephane Lamoliatte Stephane Lamoliatte
Romano Jos<6F> Magacho da Silva
Michael Gronager Michael Gronager
Martin Naylor Martin Naylor
Joakim Simonsson Joakim Simonsson
@@ -86,12 +85,10 @@ Daniel Sj
Bryan Thrall Bryan Thrall
Fabien Lavignotte Fabien Lavignotte
Andreas Ekstrand Andreas Ekstrand
Riccardo Corsi
Mike Connell Mike Connell
Melchior Franz Melchior Franz
Johannes Baeuerle Johannes Baeuerle
Thomas Hogarth Riccardo Corsi
Sebastian Messerschmidt
Rafa Gaitan Rafa Gaitan
Neil Hughes Neil Hughes
Martin Beckett Martin Beckett
@@ -104,6 +101,7 @@ Cory Riddell
Chuck Seberino Chuck Seberino
Boris Bralo Boris Bralo
Yefei He Yefei He
Thomas Hogarth
Sondra Iverson Sondra Iverson
Simon Julier Simon Julier
Rune Schmidt Jensen Rune Schmidt Jensen
@@ -121,16 +119,13 @@ Thibault Genessay
Sasa Bistrovic Sasa Bistrovic
Ravi Mathur Ravi Mathur
Ralf Habacker Ralf Habacker
Pjotr Svetachov
Neil Groves Neil Groves
Mikhail Izmestev
Markus Trenkwalder Markus Trenkwalder
Loic Dachary Loic Dachary
Joseph Steel Joseph Steel
Jordi Torres
John Shue John Shue
Brad Colbert Brad Colbert
Bj<EFBFBD>rn Blissing
Alexander Sinditskiy
Vivek Rajan Vivek Rajan
Uwe Woessner Uwe Woessner
Tony Horrobin Tony Horrobin
@@ -138,7 +133,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
@@ -147,24 +141,25 @@ Neil Salter
Mihai Radu Mihai Radu
Michael Hartman Michael Hartman
Martins Innus Martins Innus
Marc Helbling
Maciej Krol Maciej Krol
Lilin Xiong Lilin Xiong
Leandro Motta Barros Leandro Motta Barros
Jordi Torres
Johan Nouvel Johan Nouvel
Hartwig Wiesmann Hartwig Wiesmann
Donn Mielcarek Donn Mielcarek
Corbin Holtz Corbin Holtz
Blasius Czink Blasius Czink
Alexander Sinditskiy
Alexander Irion Alexander Irion
Toshiyuki Takahei Toshiyuki Takahei
Sebastien Grignard Sebastien Grignard
Ryan Kawicki
Rudolf Wiedemann Rudolf Wiedemann
Robert Milharcic Romano Magacho
Mikhail Izmestev
Maria Ten Maria Ten
Liang Aibin Liang Aibin
Kristofer Tingdahl
Konstantin Matveyev
Katharina Plugge Katharina Plugge
John Vidar Larring John Vidar Larring
John Kelso John Kelso
@@ -182,13 +177,14 @@ Alok Priyadarshi
Alberto Barbati Alberto Barbati
Alan Dickinson Alan Dickinson
Vladimir Shabanov Vladimir Shabanov
Vladimir Chebaev
Tugkan Calapoglu Tugkan Calapoglu
Tim Daoust Tim Daoust
Sohey Yamamoto Sohey Yamamoto
Sergey Leontyev Sergey Leontyev
Sebastian Messerschmidt
Santosh Gaikwad Santosh Gaikwad
Ryan Pavlik Ryan Pavlik
Robert Milharcic
Rene Molenaar Rene Molenaar
Piotr Domagalski Piotr Domagalski
Phil Atkin Phil Atkin
@@ -198,7 +194,6 @@ Mattias Linde
Mark Sciabica Mark Sciabica
Marcin Prus Marcin Prus
Lee Butler Lee Butler
Lars Nilsson
Konstantin Sinitsyn Konstantin Sinitsyn
Ken Sewell Ken Sewell
Julian Ortiz Julian Ortiz
@@ -216,7 +211,6 @@ Doug McCorkle
Donald Cipperly Donald Cipperly
Don Leich Don Leich
Dietmar Funck Dietmar Funck
Colin Cochran
Christian Buchner Christian Buchner
Charles Cole Charles Cole
Blake Williams Blake Williams
@@ -230,8 +224,9 @@ Zach Deedler
Yuzhong Shen Yuzhong Shen
Wee See Wee See
Warren Macchi Warren Macchi
Vladimir Chebaev
Vincent Bourdier Vincent Bourdier
Terrex Terrex
Tassilo Glander Tassilo Glander
Sylvain Marie Sylvain Marie
Steve Lunsford Steve Lunsford
@@ -247,7 +242,6 @@ Perry Miller
Pawel Ksiezopolski Pawel Ksiezopolski
Paul Palumbo Paul Palumbo
Paul Obermeier Paul Obermeier
Patrick Neary
Nguyen Van Truong Nguyen Van Truong
Nathan Cournia Nathan Cournia
Morten Haukness Morten Haukness
@@ -264,11 +258,11 @@ Martin Lambers
Martijn Kragtwijk Martijn Kragtwijk
Marius Heise Marius Heise
Marcin Hajder Marcin Hajder
Marcel Pursche
Lilith Bryant Lilith Bryant
Lars Nilsson
Kristofer Tingdahl
Kevin Moiule Kevin Moiule
Keith Steffen Keith Steffen
Julien Valentin
Julen Garcia Julen Garcia
Joseph Winston Joseph Winston
John Aughey John Aughey
@@ -276,8 +270,6 @@ Johannes Scholz
Joachim Pouderoux Joachim Pouderoux
Jean-Christophe Lombardo Jean-Christophe Lombardo
Javier Taibo Javier Taibo
Jannik Heller
Jan Klimke
James Moliere James Moliere
Jaap Glas Jaap Glas
Igor Kravtchenko Igor Kravtchenko
@@ -287,7 +279,6 @@ Guy Volckaert
Gustavo Wagner Gustavo Wagner
Guillaume Taze Guillaume Taze
Guillaume Chouvenc Guillaume Chouvenc
Giuseppe Donvito
Gill Peacegood Gill Peacegood
Gerrick Bivins Gerrick Bivins
George Tarantilis George Tarantilis
@@ -296,7 +287,7 @@ Eric Buehler
Eduardo Poyart Eduardo Poyart
Edgar Ellis Edgar Ellis
Dimi Christopoulos Dimi Christopoulos
Diane Delall<EFBFBD>e Diane Delallée
David Longest David Longest
David Ergo David Ergo
Daniel Trstenjak Daniel Trstenjak
@@ -304,9 +295,7 @@ Craig Bosma
Claus Scheiblauer Claus Scheiblauer
Christophe Loustaunau Christophe Loustaunau
Christian Ruzicka Christian Ruzicka
Bradley Baker Searles
Brad Anderegg Brad Anderegg
Bj<EFBFBD>rn Hein
Aric Aumann Aric Aumann
Andrew Sampson Andrew Sampson
Andrew Lorino Andrew Lorino
@@ -333,7 +322,6 @@ 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
@@ -346,7 +334,6 @@ Simon Buckley
Sid Byce Sid Byce
Shuxing Xiao Shuxing Xiao
Shane Arnott Shane Arnott
Sergey Kurdakov
Sebastien Kuntz Sebastien Kuntz
Ruth Lang Ruth Lang
Ruben Smelik Ruben Smelik
@@ -361,7 +348,6 @@ Rob Radtke
Rob Bloemkool Rob Bloemkool
Rick Pingry Rick Pingry
Rick Appleton Rick Appleton
Remo Eichenberger
Reinhard Sainitzer Reinhard Sainitzer
Rein Kadijk Rein Kadijk
Ragnar Hammarqvist Ragnar Hammarqvist
@@ -391,20 +377,18 @@ Nicolas Brodu
Nick Black Nick Black
Mojtaba Fathi Mojtaba Fathi
Mirko Viviani Mirko Viviani
Mikkel Gj<EFBFBD>l Mikkel Gjøl
Mike Krus
Mike Garrity Mike Garrity
Miha Rav<EFBFBD>elj Miha Ravsel
Michael Schanne
Michael Polak Michael Polak
Michael Morrison Michael Morrison
Michael Mc Donnell
Michael Logan Michael Logan
Michael Kapelko Michael Kapelko
Michael Bach Jensen Michael Bach Jensen
Max Rhiener Max Rhiener
Max Behensky Max Behensky
Mauricio Hofmam Mauricio Hofmam
Matthias Helsing
Matthew May Matthew May
Matthew Johnson-Roberson Matthew Johnson-Roberson
Matt Green Matt Green
@@ -419,6 +403,7 @@ Marius Kintel
Mario Guimaraes Mario Guimaraes
Marco Sciabica Marco Sciabica
Marco Lehmann Marco Lehmann
Marcel Pursche
Maik Keller Maik Keller
Lukas Diduch Lukas Diduch
Louis Hamilton Louis Hamilton
@@ -426,8 +411,10 @@ Lewis Harmon
Leigh Stivers Leigh Stivers
Laurence Muller Laurence Muller
Laura Cerritelli Laura Cerritelli
Lars Nillson
Kyle Centers Kyle Centers
Kristopher Bixler Kristopher Bixler
Konstantin Matveyev
Kim Seokhwan Kim Seokhwan
Kim Bale Kim Bale
Karsten Weiss Karsten Weiss
@@ -450,6 +437,7 @@ Jeroen den Dekker
Jay Zuckerman Jay Zuckerman
Jason Howlett Jason Howlett
Jason Ballenger Jason Ballenger
Jan Klimke
James Turner James Turner
James Killian James Killian
James Athey James Athey
@@ -484,7 +472,6 @@ Duvan Cope
Duncan Cavens Duncan Cavens
Drew Whitehouse Drew Whitehouse
Douglas A. Pouk Douglas A. Pouk
Dmitry Marakasov
Dean Iverson Dean Iverson
David Jung David Jung
Danny Valente Danny Valente
@@ -492,12 +479,9 @@ Daniel Stien
Dan Minor Dan Minor
C<EFBFBD>sar L. B. Silveira C<EFBFBD>sar L. B. Silveira
Cyril Brulebois Cyril Brulebois
Cl<EFBFBD>ment B<>sch
Clay Fowler Clay Fowler
Claus Steuer
Chuck Sembroski Chuck Sembroski
Christopher Blaesius Christopher Blaesius
Christopher Baker
Christophe Herreman Christophe Herreman
Christian Noon Christian Noon
Christian Kaser Christian Kaser
@@ -509,6 +493,8 @@ Bruno Herbelin
Brian Keener Brian Keener
Brandon Hamm Brandon Hamm
Bora Utka Bora Utka
Bj<EFBFBD>rn Hein
Bjorn Blissing
Bill Prendergast Bill Prendergast
Bernardt Duvenhage Bernardt Duvenhage
Benoit Laniel Benoit Laniel
@@ -516,9 +502,7 @@ 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
@@ -530,6 +514,4 @@ Alberto Jaspe
Alan Purvis Alan Purvis
Alan Ott Alan Ott
Alan Harris Alan Harris
Adrien Grandemange
Adrian Clark
Adam Richard Adam Richard

View File

@@ -22,30 +22,25 @@ 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()
@@ -53,7 +48,7 @@ PROJECT(OpenSceneGraph)
SET(OPENSCENEGRAPH_MAJOR_VERSION 3) SET(OPENSCENEGRAPH_MAJOR_VERSION 3)
SET(OPENSCENEGRAPH_MINOR_VERSION 2) SET(OPENSCENEGRAPH_MINOR_VERSION 2)
SET(OPENSCENEGRAPH_PATCH_VERSION 2) SET(OPENSCENEGRAPH_PATCH_VERSION 0)
SET(OPENSCENEGRAPH_SOVERSION 100) 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
@@ -85,13 +80,6 @@ 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
IF(NOT CMAKE_BUILD_TYPE)
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
ENDIF(NOT CMAKE_BUILD_TYPE)
## Option to enable Android build using AndroidNDK ## Option to enable Android build using AndroidNDK
OPTION(OSG_BUILD_PLATFORM_ANDROID OFF) OPTION(OSG_BUILD_PLATFORM_ANDROID OFF)
IF(OSG_BUILD_PLATFORM_ANDROID) IF(OSG_BUILD_PLATFORM_ANDROID)
@@ -246,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
@@ -263,16 +247,13 @@ IF(APPLE)
#you need to manually set the default sdk version here #you need to manually set the default sdk version here
SET (IPHONE_SDKVER "6.0" CACHE STRING "IOS SDK-Version") SET (IPHONE_SDKVER "6.0" CACHE STRING "IOS SDK-Version")
SET (IPHONE_VERSION_MIN "4.2" CACHE STRING "IOS minimum os version, use 7.0 or greater to get 64bit support")
#the below is taken from ogre, it states the gcc stuff needs to happen before PROJECT() is called. I've no clue if we even need it #the below is taken from ogre, it states the gcc stuff needs to happen before PROJECT() is called. I've no clue if we even need it
# Force gcc <= 4.2 on iPhone # Force gcc <= 4.2 on iPhone
IF(IPHONE_VERSION_MIN LESS "6.0") include(CMakeForceCompiler)
include(CMakeForceCompiler) CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU)
CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU) CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU)
CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU) SET(GCC_THUMB_SUPPORT NO)
SET(GCC_THUMB_SUPPORT NO)
ENDIF()
#set either the device sdk or the simulator sdk. Can't find away to separate these in the same project #set either the device sdk or the simulator sdk. Can't find away to separate these in the same project
IF(OSG_BUILD_PLATFORM_IPHONE) IF(OSG_BUILD_PLATFORM_IPHONE)
@@ -527,17 +508,11 @@ IF(WIN32 AND NOT ANDROID)
INCLUDE(Find3rdPartyDependencies) INCLUDE(Find3rdPartyDependencies)
ENDIF() ENDIF()
#
# 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()
# Common to all platforms except android: # Common to all platforms except android:
FIND_PACKAGE(Freetype) FIND_PACKAGE(FreeType)
FIND_PACKAGE(Inventor) FIND_PACKAGE(Inventor)
FIND_PACKAGE(Jasper) FIND_PACKAGE(Jasper)
FIND_PACKAGE(OpenEXR) FIND_PACKAGE(OpenEXR)
@@ -617,14 +592,7 @@ 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)
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()
@@ -824,7 +792,11 @@ 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.
SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused) # 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 -fpermissive)
# 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
@@ -841,14 +813,6 @@ ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
# CMake lacks an elseif, so other non-gcc, non-VS compilers need # CMake lacks an elseif, so other non-gcc, non-VS compilers need
# to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should # to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should
# remain unset. # remain unset.
IF (APPLE)
# set standard lib, clang defaults to c++0x
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++ -Wno-overloaded-virtual -Wno-conversion")
set(WARNING_CFLAGS "")
ENDIF()
ENDIF() ENDIF()
# This part is for the CMake menu option to toggle the warnings on/off. # This part is for the CMake menu option to toggle the warnings on/off.
@@ -908,14 +872,8 @@ IF(APPLE AND NOT ANDROID)
#set iphone arch and flags taken from http://sites.google.com/site/michaelsafyan/coding/resources/how-to-guides/cross-compile-for-the-iphone/how-to-cross-compile-for-the-iphone-using-cmake #set iphone arch and flags taken from http://sites.google.com/site/michaelsafyan/coding/resources/how-to-guides/cross-compile-for-the-iphone/how-to-cross-compile-for-the-iphone-using-cmake
IF(OSG_BUILD_PLATFORM_IPHONE) IF(OSG_BUILD_PLATFORM_IPHONE)
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} -miphoneos-version-min=4.1 -mno-thumb -arch armv6 -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()
SET(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64" CACHE STRING "Build architectures for iOS" 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()
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)
@@ -947,7 +905,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")
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)

View File

@@ -1,4 +1,4 @@
# Check for availability of atomic operations # Check for availability of atomic operations
# This module defines # This module defines
# OPENTHREADS_HAVE_ATOMIC_OPS # OPENTHREADS_HAVE_ATOMIC_OPS
@@ -15,143 +15,123 @@ IF (OPENTHREADS_ATOMIC_USE_MUTEX)
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1) SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1)
ELSE() ELSE()
# as the test does not work for IOS hardcode the ATOMIC implementation
IF(OSG_BUILD_PLATFORM_IPHONE_SIMULATOR OR OSG_BUILD_PLATFORM_IPHONE)
SET(_OPENTHREADS_ATOMIC_USE_GCC_BUILTINS 0)
SET(_OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS 0)
SET(_OPENTHREADS_ATOMIC_USE_SUN 0)
SET(_OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED 0)
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 0)
SET(_OPENTHREADS_ATOMIC_USE_BSD_ATOMIC 1) INCLUDE(CheckCXXSourceRuns)
ELSE() # Do step by step checking,
INCLUDE(CheckCXXSourceRuns) CHECK_CXX_SOURCE_RUNS("
#include <cstdlib>
# Do step by step checking, int main()
CHECK_CXX_SOURCE_RUNS(" {
#include <cstdlib> unsigned value = 0;
void* ptr = &value;
__sync_add_and_fetch(&value, 1);
__sync_synchronize();
__sync_sub_and_fetch(&value, 1);
if (!__sync_bool_compare_and_swap(&value, 0, 1))
return EXIT_FAILURE;
int main() if (!__sync_bool_compare_and_swap(&ptr, ptr, ptr))
{ return EXIT_FAILURE;
unsigned value = 0;
void* ptr = &value;
__sync_add_and_fetch(&value, 1);
__sync_synchronize();
__sync_sub_and_fetch(&value, 1);
if (!__sync_bool_compare_and_swap(&value, 0, 1))
return EXIT_FAILURE;
if (!__sync_bool_compare_and_swap(&ptr, ptr, ptr)) return EXIT_SUCCESS;
return EXIT_FAILURE; }
" _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS)
return EXIT_SUCCESS; CHECK_CXX_SOURCE_RUNS("
} #include <stdlib.h>
" _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS)
CHECK_CXX_SOURCE_RUNS(" int main(int, const char**)
#include <stdlib.h> {
unsigned value = 0;
void* ptr = &value;
__add_and_fetch(&value, 1);
__synchronize(value);
__sub_and_fetch(&value, 1);
if (!__compare_and_swap(&value, 0, 1))
return EXIT_FAILURE;
int main(int, const char**) if (!__compare_and_swap((unsigned long*)&ptr, (unsigned long)ptr, (unsigned long)ptr))
{ return EXIT_FAILURE;
unsigned value = 0;
void* ptr = &value;
__add_and_fetch(&value, 1);
__synchronize(value);
__sub_and_fetch(&value, 1);
if (!__compare_and_swap(&value, 0, 1))
return EXIT_FAILURE;
if (!__compare_and_swap((unsigned long*)&ptr, (unsigned long)ptr, (unsigned long)ptr)) return EXIT_SUCCESS;
return EXIT_FAILURE; }
" _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS)
return EXIT_SUCCESS; CHECK_CXX_SOURCE_RUNS("
} #include <atomic.h>
" _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS) #include <cstdlib>
CHECK_CXX_SOURCE_RUNS(" int main(int, const char**)
#include <atomic.h> {
#include <cstdlib> uint_t value = 0;
void* ptr = &value;
atomic_inc_uint_nv(&value);
membar_consumer();
atomic_dec_uint_nv(&value);
if (0 != atomic_cas_uint(&value, 0, 1))
return EXIT_FAILURE;
int main(int, const char**) if (ptr != atomic_cas_ptr(&ptr, ptr, ptr))
{ return EXIT_FAILURE;
uint_t value = 0;
void* ptr = &value;
atomic_inc_uint_nv(&value);
membar_consumer();
atomic_dec_uint_nv(&value);
if (0 != atomic_cas_uint(&value, 0, 1))
return EXIT_FAILURE;
if (ptr != atomic_cas_ptr(&ptr, ptr, ptr)) return EXIT_SUCCESS;
return EXIT_FAILURE; }
" _OPENTHREADS_ATOMIC_USE_SUN)
return EXIT_SUCCESS; CHECK_CXX_SOURCE_RUNS("
} #include <windows.h>
" _OPENTHREADS_ATOMIC_USE_SUN) #include <intrin.h>
#include <cstdlib>
CHECK_CXX_SOURCE_RUNS(" #pragma intrinsic(_InterlockedAnd)
#include <windows.h> #pragma intrinsic(_InterlockedOr)
#include <intrin.h> #pragma intrinsic(_InterlockedXor)
#include <cstdlib>
#pragma intrinsic(_InterlockedAnd) int main(int, const char**)
#pragma intrinsic(_InterlockedOr) {
#pragma intrinsic(_InterlockedXor) volatile long value = 0;
long data = 0;
long* volatile ptr = &data;
int main(int, const char**) InterlockedIncrement(&value);
{ MemoryBarrier();
volatile long value = 0; InterlockedDecrement(&value);
long data = 0;
long* volatile ptr = &data;
InterlockedIncrement(&value); if (0 != InterlockedCompareExchange(&value, 1, 0))
MemoryBarrier(); return EXIT_FAILURE;
InterlockedDecrement(&value);
if (0 != InterlockedCompareExchange(&value, 1, 0)) if (ptr != InterlockedCompareExchangePointer((PVOID volatile*)&ptr, (PVOID)ptr, (PVOID)ptr))
return EXIT_FAILURE; return EXIT_FAILURE;
if (ptr != InterlockedCompareExchangePointer((PVOID volatile*)&ptr, (PVOID)ptr, (PVOID)ptr)) return EXIT_SUCCESS;
return EXIT_FAILURE; }
" _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED)
return EXIT_SUCCESS; CHECK_CXX_SOURCE_RUNS("
} #include <libkern/OSAtomic.h>
" _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED)
CHECK_CXX_SOURCE_RUNS(" int main()
#include <libkern/OSAtomic.h> {
volatile int32_t value = 0;
long data = 0;
long * volatile ptr = &data;
int main() OSAtomicIncrement32(&value);
{ OSMemoryBarrier();
volatile int32_t value = 0; OSAtomicDecrement32(&value);
long data = 0; OSAtomicCompareAndSwapInt(value, 1, &value);
long * volatile ptr = &data; OSAtomicCompareAndSwapPtr(ptr, ptr, (void * volatile *)&ptr);
}
OSAtomicIncrement32(&value); " _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
OSMemoryBarrier();
OSAtomicDecrement32(&value);
OSAtomicCompareAndSwapInt(value, 1, &value);
OSAtomicCompareAndSwapPtr(ptr, ptr, (void * volatile *)&ptr);
}
" _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
IF(NOT _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND
NOT _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS AND
NOT _OPENTHREADS_ATOMIC_USE_SUN AND
NOT _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED AND
NOT _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1)
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()
IF(NOT _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS AND
NOT _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS AND
NOT _OPENTHREADS_ATOMIC_USE_SUN AND
NOT _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED AND
NOT _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1)
ENDIF() ENDIF()
ENDIF() ENDIF()

View File

@@ -1,20 +1,22 @@
# Locate Apple AVFoundation (next-generation QTKit) # Locate Apple AVFoundation (next-generation QTKit)
# This module defines # This module defines
# AV_FOUNDATION_LIBRARY # AV_FOUNDATION_LIBRARY
# AV_FOUNDATION_FOUND, if false, do not try to link to gdal # AV_FOUNDATION_FOUND, if false, do not try to link to gdal
# AV_FOUNDATION_INCLUDE_DIR, where to find the headers
# #
# $AV_FOUNDATION_DIR is an environment variable that would # $AV_FOUNDATION_DIR is an environment variable that would
# correspond to the ./configure --prefix=$AV_FOUNDATION_DIR # correspond to the ./configure --prefix=$AV_FOUNDATION_DIR
# #
# Created by Stephan Maximilian Huber # Created by Stephan Maximilian Huber
IF(APPLE) IF(APPLE)
FIND_PATH(AV_FOUNDATION_INCLUDE_DIR AVFoundation/AVFoundation.h)
FIND_LIBRARY(AV_FOUNDATION_LIBRARY AVFoundation) FIND_LIBRARY(AV_FOUNDATION_LIBRARY AVFoundation)
ENDIF() ENDIF()
SET(AV_FOUNDATION_FOUND "NO") SET(AV_FOUNDATION_FOUND "NO")
IF(AV_FOUNDATION_LIBRARY) IF(AV_FOUNDATION_LIBRARY AND AV_FOUNDATION_INCLUDE_DIR)
SET(AV_FOUNDATION_FOUND "YES") SET(AV_FOUNDATION_FOUND "YES")
ENDIF() ENDIF()
@@ -30,11 +32,11 @@ 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") IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8")
# nothing special here ;-) # nothing special here ;-)
ELSE() ELSE()
MESSAGE("AVFoundation disabled for SDK < 10.8") MESSAGE("AVFoundation disabled for SDK < 10.8")
SET(AV_FOUNDATION_FOUND "NO") SET(AV_FOUNDATION_FOUND "NO")
ENDIF() ENDIF()
ENDIF() ENDIF()
ENDIF() ENDIF()

0
CMakeModules/FindAsio.cmake Normal file → Executable file
View File

View File

@@ -242,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 NAMES libboost_filesystem boost_filesystem boost_filesystem-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_54
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
@@ -250,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 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
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
@@ -258,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 NAMES libboost_system boost_system boost_system-mt libboost_system-${COLLADA_BUILDNAME}0-mt libboost_system-${COLLADA_BUILDNAME}0-mt-1_54
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
@@ -266,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 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
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

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,15 +44,10 @@ 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/FBXSDK20151
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.2"
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.2"
/Applications/Autodesk/FBXSDK20142
/Applications/Autodesk/FBXSDK20141 /Applications/Autodesk/FBXSDK20141
) )
#I think the last line in the search path is an old typo, but let's search for 2014.1 anyway - LV
# search for headers & debug/release libraries # search for headers & debug/release libraries
FIND_PATH(FBX_INCLUDE_DIR "fbxsdk.h" FIND_PATH(FBX_INCLUDE_DIR "fbxsdk.h"
@@ -83,21 +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/FBXSDK20141 /Applications/Autodesk/FBXSDK20141
) )
@@ -119,41 +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/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

@@ -48,7 +48,7 @@ FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
/opt/csw /opt/csw
/opt /opt
/usr/freeware /usr/freeware
PATH_SUFFIXES include include/freetype2 PATH_SUFFIXES include
) )
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
@@ -74,20 +74,6 @@ FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
/usr/freeware/include/freetype2 /usr/freeware/include/freetype2
) )
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 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_LIBRARY(FREETYPE_LIBRARY FIND_LIBRARY(FREETYPE_LIBRARY
NAMES freetype libfreetype freetype219 NAMES freetype libfreetype freetype219
PATHS PATHS

View File

@@ -1,13 +1,13 @@
# Locate gdal # Locate gdal
# This module defines # This module defines
# OSG_LIBRARY # OSG_LIBRARY
# OSG_FOUND, if false, do not try to link to gdal # OSG_FOUND, if false, do not try to link to gdal
# OSG_INCLUDE_DIR, where to find the headers # OSG_INCLUDE_DIR, where to find the headers
# #
# $OSG_DIR is an environment variable that would # $OSG_DIR is an environment variable that would
# correspond to the ./configure --prefix=$OSG_DIR # correspond to the ./configure --prefix=$OSG_DIR
# #
# Created by Robert Osfield. # Created by Robert Osfield.
FIND_PATH(OSG_INCLUDE_DIR osg/Node FIND_PATH(OSG_INCLUDE_DIR osg/Node
${OSG_DIR}/include ${OSG_DIR}/include
@@ -59,7 +59,7 @@ MACRO(FIND_OSG_LIBRARY MYLIBRARY MYLIBRARYNAME)
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSG_ROOT]/lib [HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;OSG_ROOT]/lib
/usr/freeware/lib64 /usr/freeware/lib64
) )
FIND_LIBRARY(${MYLIBRARY} FIND_LIBRARY(${MYLIBRARY}
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}" NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
PATHS PATHS
@@ -107,7 +107,7 @@ MACRO(FIND_OSG_LIBRARY MYLIBRARY MYLIBRARYNAME)
ENDIF(NOT MYLIBRARY) ENDIF(NOT MYLIBRARY)
ENDIF( NOT ${MYLIBRARY}_DEBUG ) ENDIF( NOT ${MYLIBRARY}_DEBUG )
ENDMACRO(FIND_OSG_LIBRARY LIBRARY LIBRARYNAME) ENDMACRO(FIND_OSG_LIBRARY LIBRARY LIBRARYNAME)
FIND_OSG_LIBRARY(OSG_LIBRARY osg) FIND_OSG_LIBRARY(OSG_LIBRARY osg)
@@ -126,7 +126,7 @@ FIND_OSG_LIBRARY(OSGANIMATION_LIBRARY osgAnimation)
FIND_OSG_LIBRARY(OSGPARTICLE_LIBRARY osgParticle) FIND_OSG_LIBRARY(OSGPARTICLE_LIBRARY osgParticle)
FIND_OSG_LIBRARY(OSGSHADOW_LIBRARY osgShadow) FIND_OSG_LIBRARY(OSGSHADOW_LIBRARY osgShadow)
FIND_OSG_LIBRARY(OSGPRESENTATION_LIBRARY osgPresentation) FIND_OSG_LIBRARY(OSGPRESENTATION_LIBRARY osgPresentation)
FIND_OSG_LIBRARY(OSGSIM_LIBRARY osgSim) FIND_OSG_LIBRARY(OSGSIM osgSim)
FIND_OSG_LIBRARY(OPENTHREADS_LIBRARY OpenThreads) FIND_OSG_LIBRARY(OPENTHREADS_LIBRARY OpenThreads)

View File

@@ -63,8 +63,8 @@ ELSE()
ENDIF() ENDIF()
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

@@ -5,9 +5,7 @@ IF(PKG_CONFIG_FOUND)
INCLUDE(FindPkgConfig) INCLUDE(FindPkgConfig)
#Version 2.35 introduces the rsvg_cleanup function which is used PKG_CHECK_MODULES(RSVG librsvg-2.0)
PKG_CHECK_MODULES(RSVG librsvg-2.0>=2.35)
PKG_CHECK_MODULES(CAIRO cairo) PKG_CHECK_MODULES(CAIRO cairo)
IF (RSVG_FOUND AND NOT CAIRO_FOUND) IF (RSVG_FOUND AND NOT CAIRO_FOUND)

0
CMakeModules/FindZeroConf.cmake Normal file → Executable file
View File

View File

@@ -5,7 +5,7 @@
# 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 existance 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
####################################################################################################### #######################################################################################################
@@ -87,12 +87,12 @@ MACRO(LINK_CORELIB_DEFAULT CORELIB_NAME)
SET(ALL_GL_LIBRARIES ${ALL_GL_LIBRARIES} ${OPENGL_egl_LIBRARY}) SET(ALL_GL_LIBRARIES ${ALL_GL_LIBRARIES} ${OPENGL_egl_LIBRARY})
ENDIF() ENDIF()
LINK_EXTERNAL(${CORELIB_NAME} ${ALL_GL_LIBRARIES}) LINK_EXTERNAL(${CORELIB_NAME} ${ALL_GL_LIBRARIES})
LINK_WITH_VARIABLES(${CORELIB_NAME} OPENTHREADS_LIBRARY) LINK_WITH_VARIABLES(${CORELIB_NAME} OPENTHREADS_LIBRARY)
IF(OPENSCENEGRAPH_SONAMES) IF(OPENSCENEGRAPH_SONAMES)
SET_TARGET_PROPERTIES(${CORELIB_NAME} PROPERTIES VERSION ${OPENSCENEGRAPH_VERSION} SOVERSION ${OPENSCENEGRAPH_SOVERSION}) SET_TARGET_PROPERTIES(${CORELIB_NAME} PROPERTIES VERSION ${OPENSCENEGRAPH_VERSION} SOVERSION ${OPENSCENEGRAPH_SOVERSION})
ENDIF(OPENSCENEGRAPH_SONAMES) ENDIF(OPENSCENEGRAPH_SONAMES)
ENDMACRO(LINK_CORELIB_DEFAULT CORELIB_NAME) ENDMACRO(LINK_CORELIB_DEFAULT CORELIB_NAME)
@@ -112,11 +112,11 @@ MACRO(SETUP_LINK_LIBRARIES)
###################################################################### ######################################################################
# #
# This set up the libraries to link to, it assumes there are two variable: one common for a group of examples or plugins # This set up the libraries to link to, it assumes there are two variable: one common for a group of examples or plugins
# kept in the variable TARGET_COMMON_LIBRARIES and an example or plugin specific kept in TARGET_ADDED_LIBRARIES # kept in the variable TARGET_COMMON_LIBRARIES and an example or plugin specific kept in TARGET_ADDED_LIBRARIES
# they are combined in a single list checked for unicity # they are combined in a single list checked for unicity
# the suffix ${CMAKE_DEBUG_POSTFIX} is used for differentiating optimized and debug # the suffix ${CMAKE_DEBUG_POSTFIX} is used for differentiating optimized and debug
# #
# a second variable TARGET_EXTERNAL_LIBRARIES hold the list of libraries not differentiated between debug and optimized # a second variable TARGET_EXTERNAL_LIBRARIES hold the list of libraries not differentiated between debug and optimized
################################################################################## ##################################################################################
SET(TARGET_LIBRARIES ${TARGET_COMMON_LIBRARIES}) SET(TARGET_LIBRARIES ${TARGET_COMMON_LIBRARIES})
@@ -151,7 +151,7 @@ MACRO(SETUP_LINK_LIBRARIES)
ENDIF(TARGET_LIBRARIES_VARS) ENDIF(TARGET_LIBRARIES_VARS)
IF(MSVC AND OSG_MSVC_VERSIONED_DLL) IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
#when using full path name to specify linkage, it seems that already linked libs must be specified #when using full path name to specify linkage, it seems that already linked libs must be specified
LINK_EXTERNAL(${TARGET_TARGETNAME} ${ALL_GL_LIBRARIES}) LINK_EXTERNAL(${TARGET_TARGETNAME} ${ALL_GL_LIBRARIES})
ENDIF(MSVC AND OSG_MSVC_VERSIONED_DLL) ENDIF(MSVC AND OSG_MSVC_VERSIONED_DLL)
ENDMACRO(SETUP_LINK_LIBRARIES) ENDMACRO(SETUP_LINK_LIBRARIES)
@@ -213,7 +213,7 @@ ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
MACRO(SETUP_LIBRARY LIB_NAME) MACRO(SETUP_LIBRARY LIB_NAME)
IF(ANDROID) IF(ANDROID)
SETUP_ANDROID_LIBRARY(${LIB_NAME}) SETUP_ANDROID_LIBRARY(${LIB_NAME})
ELSE() ELSE()
SET(TARGET_NAME ${LIB_NAME} ) SET(TARGET_NAME ${LIB_NAME} )
SET(TARGET_TARGETNAME ${LIB_NAME} ) SET(TARGET_TARGETNAME ${LIB_NAME} )
@@ -224,13 +224,10 @@ MACRO(SETUP_LIBRARY LIB_NAME)
${TARGET_SRC} ${TARGET_SRC}
) )
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES FOLDER "OSG Core") SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES FOLDER "OSG Core")
IF(APPLE)
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "")
ENDIF()
IF(TARGET_LABEL) IF(TARGET_LABEL)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
ENDIF(TARGET_LABEL) ENDIF(TARGET_LABEL)
IF(TARGET_LIBRARIES) IF(TARGET_LIBRARIES)
LINK_INTERNAL(${LIB_NAME} ${TARGET_LIBRARIES}) LINK_INTERNAL(${LIB_NAME} ${TARGET_LIBRARIES})
ENDIF() ENDIF()
@@ -241,14 +238,14 @@ MACRO(SETUP_LIBRARY LIB_NAME)
LINK_WITH_VARIABLES(${LIB_NAME} ${TARGET_LIBRARIES_VARS}) LINK_WITH_VARIABLES(${LIB_NAME} ${TARGET_LIBRARIES_VARS})
ENDIF(TARGET_LIBRARIES_VARS) ENDIF(TARGET_LIBRARIES_VARS)
LINK_CORELIB_DEFAULT(${LIB_NAME}) LINK_CORELIB_DEFAULT(${LIB_NAME})
ENDIF() 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(ANDROID) IF(ANDROID)
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME}) SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
ELSE() ELSE()
SET(TARGET_NAME ${PLUGIN_NAME} ) SET(TARGET_NAME ${PLUGIN_NAME} )
@@ -271,33 +268,38 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
SET(PACKAGE_COMPONENT libopenscenegraph) SET(PACKAGE_COMPONENT libopenscenegraph)
ENDIF(${ARGC} GREATER 1) ENDIF(${ARGC} GREATER 1)
# Add the VisualStudio versioning info # Add the VisualStudio versioning info
SET(TARGET_SRC ${TARGET_SRC} ${OPENSCENEGRAPH_VERSIONINFO_RC}) SET(TARGET_SRC ${TARGET_SRC} ${OPENSCENEGRAPH_VERSIONINFO_RC})
# here we use the command to generate the library # here we use the command to generate the library
IF (DYNAMIC_OPENSCENEGRAPH) IF (DYNAMIC_OPENSCENEGRAPH)
ADD_LIBRARY(${TARGET_TARGETNAME} MODULE ${TARGET_SRC} ${TARGET_H}) ADD_LIBRARY(${TARGET_TARGETNAME} MODULE ${TARGET_SRC} ${TARGET_H})
ELSE (DYNAMIC_OPENSCENEGRAPH) ELSE (DYNAMIC_OPENSCENEGRAPH)
ADD_LIBRARY(${TARGET_TARGETNAME} STATIC ${TARGET_SRC} ${TARGET_H}) ADD_LIBRARY(${TARGET_TARGETNAME} STATIC ${TARGET_SRC} ${TARGET_H})
ENDIF(DYNAMIC_OPENSCENEGRAPH) ENDIF(DYNAMIC_OPENSCENEGRAPH)
IF(MSVC) #not sure if needed, but for plugins only Msvc need the d suffix
IF(NOT MSVC)
IF(NOT UNIX)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES DEBUG_POSTFIX "")
ENDIF(NOT UNIX)
ELSE(NOT MSVC)
IF(NOT CMAKE24) IF(NOT CMAKE24)
SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS}") # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "${OSG_PLUGINS}") # Sets the ouput to be /osgPlugin-X.X.X ; also ensures the /Debug /Release are removed
ELSE(NOT CMAKE24) ELSE(NOT CMAKE24)
IF(OSG_MSVC_VERSIONED_DLL) IF(OSG_MSVC_VERSIONED_DLL)
#this is a hack... the build place is set to lib/<debug or release> by LIBARARY_OUTPUT_PATH equal to OUTPUT_LIBDIR #this is a hack... the build place is set to lib/<debug or release> by LIBARARY_OUTPUT_PATH equal to OUTPUT_LIBDIR
#the .lib will be crated in ../ so going straight in lib by the IMPORT_PREFIX property #the .lib will be crated in ../ so going straight in lib by the IMPORT_PREFIX property
#because we want dll placed in OUTPUT_BINDIR ie the bin folder sibling of lib, we can use ../../bin to go there, #because we want dll placed in OUTPUT_BINDIR ie the bin folder sibling of lib, we can use ../../bin to go there,
#it is hardcoded, we should compute OUTPUT_BINDIR position relative to OUTPUT_LIBDIR ... to be implemented #it is hardcoded, we should compute OUTPUT_BINDIR position relative to OUTPUT_LIBDIR ... to be implemented
#changing bin to something else breaks this hack #changing bin to something else breaks this hack
#the dll are placed in bin/${OSG_PLUGINS} #the dll are placed in bin/${OSG_PLUGINS}
IF(NOT MSVC_IDE) IF(NOT MSVC_IDE)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS}/") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS}/")
ELSE(NOT MSVC_IDE) ELSE(NOT MSVC_IDE)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../../bin/${OSG_PLUGINS}/" IMPORT_PREFIX "../") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../../bin/${OSG_PLUGINS}/" IMPORT_PREFIX "../")
ENDIF(NOT MSVC_IDE) ENDIF(NOT MSVC_IDE)
@@ -311,18 +313,16 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
ENDIF(OSG_MSVC_VERSIONED_DLL) ENDIF(OSG_MSVC_VERSIONED_DLL)
ENDIF(NOT CMAKE24) ENDIF(NOT CMAKE24)
ENDIF(MSVC) ENDIF(NOT MSVC)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Plugins") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Plugins")
IF(APPLE)
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "")
ENDIF()
SETUP_LINK_LIBRARIES() SETUP_LINK_LIBRARIES()
#the installation path are differentiated for win32 that install in bib versus other architecture that install in lib${LIB_POSTFIX}/${OSG_PLUGINS} #the installation path are differentiated for win32 that install in bib versus other architecture that install in lib${LIB_POSTFIX}/${OSG_PLUGINS}
IF(WIN32) IF(WIN32)
INSTALL(TARGETS ${TARGET_TARGETNAME} INSTALL(TARGETS ${TARGET_TARGETNAME}
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})
@@ -350,11 +350,11 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
ENDIF(NOT TARGET_LABEL) ENDIF(NOT TARGET_LABEL)
IF(${IS_COMMANDLINE_APP}) IF(${IS_COMMANDLINE_APP})
ADD_EXECUTABLE(${TARGET_TARGETNAME} ${TARGET_SRC} ${TARGET_H}) ADD_EXECUTABLE(${TARGET_TARGETNAME} ${TARGET_SRC} ${TARGET_H})
ELSE(${IS_COMMANDLINE_APP}) ELSE(${IS_COMMANDLINE_APP})
IF(APPLE) IF(APPLE)
# SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION}") # SET(MACOSX_BUNDLE_LONG_VERSION_STRING "${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION}")
# Short Version is the "marketing version". It is the version # Short Version is the "marketing version". It is the version
@@ -363,8 +363,6 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
# Bundle version is the version the OS looks at. # Bundle version is the version the OS looks at.
SET(MACOSX_BUNDLE_BUNDLE_VERSION "${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION}") SET(MACOSX_BUNDLE_BUNDLE_VERSION "${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION}")
SET(MACOSX_BUNDLE_GUI_IDENTIFIER "org.openscenegraph.${TARGET_TARGETNAME}" ) SET(MACOSX_BUNDLE_GUI_IDENTIFIER "org.openscenegraph.${TARGET_TARGETNAME}" )
# replace underscore by hyphen
STRING(REGEX REPLACE "_" "-" MACOSX_BUNDLE_GUI_IDENTIFIER ${MACOSX_BUNDLE_GUI_IDENTIFIER})
SET(MACOSX_BUNDLE_BUNDLE_NAME "${TARGET_NAME}" ) SET(MACOSX_BUNDLE_BUNDLE_NAME "${TARGET_NAME}" )
# SET(MACOSX_BUNDLE_ICON_FILE "myicon.icns") # SET(MACOSX_BUNDLE_ICON_FILE "myicon.icns")
# SET(MACOSX_BUNDLE_COPYRIGHT "") # SET(MACOSX_BUNDLE_COPYRIGHT "")
@@ -384,7 +382,7 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
ENDIF(APPLE) ENDIF(APPLE)
ADD_EXECUTABLE(${TARGET_TARGETNAME} ${PLATFORM_SPECIFIC_CONTROL} ${TARGET_SRC} ${TARGET_H}) ADD_EXECUTABLE(${TARGET_TARGETNAME} ${PLATFORM_SPECIFIC_CONTROL} ${TARGET_SRC} ${TARGET_H})
ENDIF(${IS_COMMANDLINE_APP}) ENDIF(${IS_COMMANDLINE_APP})
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
@@ -398,11 +396,7 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "") # Ensure the /Debug /Release are removed SET_OUTPUT_DIR_PROPERTY_260(${TARGET_TARGETNAME} "") # Ensure the /Debug /Release are removed
ENDIF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL) ENDIF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL)
IF(APPLE) SETUP_LINK_LIBRARIES()
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "")
ENDIF()
SETUP_LINK_LIBRARIES()
ENDMACRO(SETUP_EXE) ENDMACRO(SETUP_EXE)
@@ -416,11 +410,11 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME)
ELSE(${ARGC} GREATER 1) ELSE(${ARGC} GREATER 1)
SET(IS_COMMANDLINE_APP 0) SET(IS_COMMANDLINE_APP 0)
ENDIF(${ARGC} GREATER 1) ENDIF(${ARGC} GREATER 1)
SETUP_EXE(${IS_COMMANDLINE_APP}) SETUP_EXE(${IS_COMMANDLINE_APP})
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Applications") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Applications")
IF(APPLE) IF(APPLE)
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin) INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
ELSE(APPLE) ELSE(APPLE)
@@ -445,13 +439,13 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME)
ELSE(${ARGC} GREATER 1) ELSE(${ARGC} GREATER 1)
SET(IS_COMMANDLINE_APP 0) SET(IS_COMMANDLINE_APP 0)
ENDIF(${ARGC} GREATER 1) ENDIF(${ARGC} GREATER 1)
SETUP_EXE(${IS_COMMANDLINE_APP}) SETUP_EXE(${IS_COMMANDLINE_APP})
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Examples") SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Examples")
IF(APPLE) IF(APPLE)
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 )
ENDIF(APPLE) ENDIF(APPLE)
@@ -489,7 +483,7 @@ MACRO(HANDLE_MSVC_DLL)
ENDIF(${ARGC} GREATER 1) ENDIF(${ARGC} GREATER 1)
SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "") # Ensure the /Debug /Release are removed SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "") # Ensure the /Debug /Release are removed
IF(NOT MSVC_IDE) IF(NOT MSVC_IDE)
IF (NOT CMAKE24) IF (NOT CMAKE24)
BUILDER_VERSION_GREATER(2 8 0) BUILDER_VERSION_GREATER(2 8 0)
IF(NOT VALID_BUILDER_VERSION) IF(NOT VALID_BUILDER_VERSION)
@@ -522,12 +516,8 @@ MACRO(HANDLE_MSVC_DLL)
ELSE (NOT CMAKE24) ELSE (NOT CMAKE24)
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../") SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
ENDIF (NOT CMAKE24) ENDIF (NOT CMAKE24)
ENDIF(NOT MSVC_IDE) ENDIF(NOT MSVC_IDE)
# SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/osg${OPENSCENEGRAPH_SOVERSION}-") # SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/osg${OPENSCENEGRAPH_SOVERSION}-")
# SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES IMPORT_PREFIX "../") # SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES IMPORT_PREFIX "../")
ENDMACRO(HANDLE_MSVC_DLL) ENDMACRO(HANDLE_MSVC_DLL)
MACRO(REMOVE_CXX_FLAG flag)
STRING(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
ENDMACRO()

2184
ChangeLog

File diff suppressed because it is too large Load Diff

View File

@@ -1,63 +1,6 @@
OSG News OSG News
======== ========
= OpenSceneGraph 3.2.2 maintance release provides a number of bug and build fixes over the 3.2.1 stable release
PERTHSHIRE, Scotland - 4th August 2015 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.2.2, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.2.2 is 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.2 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
=== Open-source development delivers industry-leading features and performance ===
The OpenSceneGraph 3.2.2 stable release is the culmination of 16 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 and 3.2.1 stable releases. The changes made are focused on addressing bugs and improving build support for latest compilers, OS updates and 3rd changes to Party Libraries.
=== 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 [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 [http://www.openscenegraph.com OpenSceneGraph Professional Services], based in Scotland, and [http://www.alphapixel.com AlphaPixel] based in the USA, and a range of [wiki:Community/Contractors 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 [http://www.openscenegraph.org/index.php/about/197-contributors-to-openscenegraph-3-2-2 individuals] from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.
= OpenSceneGraph 3.2.1 stable release provides a number of bug and build fixes to the 3.2.0 stable release
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.
=== 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.
=== 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 [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 [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
* 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 [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.2 release improves support iOS and Android, supports a range of new OpenGL features much more. = !OpenSceneGraph 3.2 release improves support iOS and Android, supports a range of new OpenGL features much more.
PERTHSHIRE, Scotland - 24th July 2013 - !OpenSceneGraph Professional Services announces the release of !OpenSceneGraph 3.2, 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. PERTHSHIRE, Scotland - 24th July 2013 - !OpenSceneGraph Professional Services announces the release of !OpenSceneGraph 3.2, 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.

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

View File

@@ -23,7 +23,7 @@ more indepth instructions.
Robert Osfield. Robert Osfield.
Project Lead. Project Lead.
4th July 2014. 24th July 2013.
-- --

View File

@@ -557,7 +557,6 @@ int main( int argc, char **argv )
// if user request help write it out to cout. // if user request help write it out to cout.
if (arguments.read("-h") || arguments.read("--help")) if (arguments.read("-h") || arguments.read("--help"))
{ {
osg::setNotifyLevel(osg::NOTICE);
usage( arguments.getApplicationName().c_str(), 0 ); usage( arguments.getApplicationName().c_str(), 0 );
//arguments.getApplicationUsage()->write(std::cout); //arguments.getApplicationUsage()->write(std::cout);
return 1; return 1;

View File

@@ -254,13 +254,7 @@ const char* invalidNames[] =
"GraphicsContext*", "GraphicsContext*",
"Apple", "Apple",
"GeometryNew", "GeometryNew",
"FrameBufferObject", "FrameBufferObject"
"Lua",
"VolumeTile",
"PushStackValueVisitor",
"RayIntersector",
"OpenSceneGraph-Data",
"Node"
}; };
@@ -353,7 +347,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"},
@@ -461,27 +454,7 @@ TypoCorrection typoCorrections[] =
{"Eskland","Ekstrand"}, {"Eskland","Ekstrand"},
{"Baeuerele","Baeuerle"}, {"Baeuerele","Baeuerle"},
{"Bauerle","Baeuerle"}, {"Bauerle","Baeuerle"},
{"Baeurele","Baeuerle"}, {"Baeurele","Baeuerle"}
{"Nillson","Nilsson"},
{"Bjorn","Bj<EFBFBD>rn"},
{"Björn","Bj<EFBFBD>rn"},
{"Stepan","Stephan"},
{"Kristoger","Kristofer"},
{"Blessing","Blissing"},
{"Dannahuer","Dannhauer"},
{"Chebeav", "Chebaev"},
{"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>"}
}; };
@@ -589,8 +562,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",
@@ -623,8 +594,6 @@ NameCorrection nameCorrections[] =
"Romano", "Jos<EFBFBD> Magacho da Silva"}, "Romano", "Jos<EFBFBD> Magacho da Silva"},
{"Rommano", "Silva", {"Rommano", "Silva",
"Romano", "Jos<EFBFBD> Magacho da Silva"}, "Romano", "Jos<EFBFBD> Magacho da Silva"},
{"Romano", "Magacho",
"Romano", "Jos<EFBFBD> Magacho da Silva"},
{"Leandro", "Motta", {"Leandro", "Motta",
"Leandro", "Motta Barros"}, "Leandro", "Motta Barros"},
{"Leandro", "Motto", {"Leandro", "Motto",
@@ -650,19 +619,7 @@ NameCorrection nameCorrections[] =
{"Tyge", "", {"Tyge", "",
"Tyge", "L<EFBFBD>vset"}, "Tyge", "L<EFBFBD>vset"},
{"Ricard", "Schmidt", {"Ricard", "Schmidt",
"Richard", "Schmidt"}, "Richard", "Schmidt"}
{"Matthias", "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"}
}; };
@@ -994,9 +951,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
@@ -1005,9 +960,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

@@ -31,7 +31,6 @@
#include <osgGA/Device> #include <osgGA/Device>
#include <iostream> #include <iostream>
#include <stdint.h>
#include <osg/GLExtensions> #include <osg/GLExtensions>
@@ -91,7 +90,7 @@ public:
if (!_extensionInitialized) setUpExtensions(); if (!_extensionInitialized) setUpExtensions();
if (_glClientWaitSync) if (_glClientWaitSync)
{ {
if (_previousSync) if (_previousSync)
{ {
unsigned int num_seconds = 1; unsigned int num_seconds = 1;
@@ -127,7 +126,7 @@ public:
typedef void (GL_APIENTRY * PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values); typedef void (GL_APIENTRY * PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
bool _extensionInitialized; bool _extensionInitialized;
PFNGLFENCESYNCPROC _glFenceSync; PFNGLFENCESYNCPROC _glFenceSync;
PFNGLISSYNCPROC _glIsSync; PFNGLISSYNCPROC _glIsSync;
PFNGLDELETESYNCPROC _glDeleteSync; PFNGLDELETESYNCPROC _glDeleteSync;
@@ -188,7 +187,7 @@ int main(int argc, char** argv)
); );
} }
} }
std::string device; std::string device;
while(arguments.read("--device", device)) while(arguments.read("--device", device))
{ {

View File

@@ -1,12 +1,12 @@
/* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield /* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield
* *
* This software is open source and may be redistributed and/or modified under * This software is open source and may be redistributed and/or modified under
* the terms of the GNU General Public License (GPL) version 2.0. * the terms of the GNU General Public License (GPL) version 2.0.
* The full license is in LICENSE.txt file included with this distribution,. * The full license is in LICENSE.txt file included with this distribution,.
* *
* This software is distributed in the hope that it will be useful, * This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* include LICENSE.txt for more details. * include LICENSE.txt for more details.
*/ */
@@ -39,9 +39,9 @@
#elif defined(__sgi) #elif defined(__sgi)
#include <unistd.h> #include <unistd.h>
#include <net/soioctl.h> #include <net/soioctl.h>
#elif defined(__CYGWIN__) #elif defined(__CYGWIN__)
#include <unistd.h> #include <unistd.h>
#elif defined(__sun) #elif defined(__sun)
#include <unistd.h> #include <unistd.h>
#include <sys/sockio.h> #include <sys/sockio.h>
#elif defined (__APPLE__) #elif defined (__APPLE__)
@@ -249,7 +249,7 @@ void CameraPacket::writeEventQueue(osgViewer::Viewer& viewer)
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// //
// Reciever // Reciever
// //
Receiver::Receiver( void ) Receiver::Receiver( void )
{ {
@@ -338,7 +338,7 @@ void Receiver::sync( void )
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || \ #if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || \
defined(__DragonFly__) defined(__DragonFly__)
socklen_t socklen_t
#else #else
int int
#endif #endif
@@ -381,7 +381,7 @@ void Receiver::sync( void )
////////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////
// //
// Broadcaster // Broadcaster
// //
Broadcaster::Broadcaster( void ) Broadcaster::Broadcaster( void )
{ {

View File

@@ -1,12 +1,12 @@
/* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield /* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield
* *
* This software is open source and may be redistributed and/or modified under * This software is open source and may be redistributed and/or modified under
* the terms of the GNU General Public License (GPL) version 2.0. * the terms of the GNU General Public License (GPL) version 2.0.
* The full license is in LICENSE.txt file included with this distribution,. * The full license is in LICENSE.txt file included with this distribution,.
* *
* This software is distributed in the hope that it will be useful, * This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* include LICENSE.txt for more details. * include LICENSE.txt for more details.
*/ */
@@ -29,7 +29,7 @@
// //
// Class definition for the recipient of a broadcasted message // Class definition for the recipient of a broadcasted message
// //
class Receiver class Receiver
{ {
public : public :
@@ -68,7 +68,7 @@ class Receiver
// //
// Class definition for broadcasting a buffer to a LAN // Class definition for broadcasting a buffer to a LAN
// //
class Broadcaster class Broadcaster
{ {
public : public :
@@ -84,7 +84,7 @@ class Broadcaster
// 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 );
@@ -112,15 +112,15 @@ class Broadcaster
class CameraPacket { class CameraPacket {
public: public:
static const unsigned int MAX_NUM_EVENTS; static const unsigned int MAX_NUM_EVENTS;
static const unsigned int SWAP_BYTES_COMPARE; static const unsigned int SWAP_BYTES_COMPARE;
CameraPacket():_masterKilled(false) CameraPacket():_masterKilled(false)
{ {
_byte_order = SWAP_BYTES_COMPARE; _byte_order = SWAP_BYTES_COMPARE;
} }
void setPacket(const osg::Matrix& matrix,const osg::FrameStamp* frameStamp) void setPacket(const osg::Matrix& matrix,const osg::FrameStamp* frameStamp)
{ {
_matrix = matrix; _matrix = matrix;
@@ -129,20 +129,20 @@ class CameraPacket {
_frameStamp = *frameStamp; _frameStamp = *frameStamp;
} }
} }
void getModelView(osg::Matrix& matrix,float angle_offset=0.0f) void getModelView(osg::Matrix& matrix,float angle_offset=0.0f)
{ {
matrix = _matrix * osg::Matrix::rotate(osg::DegreesToRadians(angle_offset),0.0f,1.0f,0.0f); matrix = _matrix * osg::Matrix::rotate(osg::DegreesToRadians(angle_offset),0.0f,1.0f,0.0f);
} }
void readEventQueue(osgViewer::Viewer& viewer); void readEventQueue(osgViewer::Viewer& viewer);
void writeEventQueue(osgViewer::Viewer& viewer); void writeEventQueue(osgViewer::Viewer& viewer);
void setMasterKilled(const bool flag) { _masterKilled = flag; } void setMasterKilled(const bool flag) { _masterKilled = flag; }
const bool getMasterKilled() const { return _masterKilled; } const bool getMasterKilled() const { return _masterKilled; }
unsigned int _byte_order; unsigned int _byte_order;
bool _masterKilled; bool _masterKilled;
osg::Matrix _matrix; osg::Matrix _matrix;
@@ -150,11 +150,11 @@ class CameraPacket {
// note don't use a ref_ptr as used elsewhere for FrameStamp // note don't use a ref_ptr as used elsewhere for FrameStamp
// since we don't want to copy the pointer - but the memory. // since we don't want to copy the pointer - but the memory.
// FrameStamp doesn't have a private destructor to allow // FrameStamp doesn't have a private destructor to allow
// us to do this, even though its a reference counted object. // us to do this, even though its a reference counted object.
osg::FrameStamp _frameStamp; osg::FrameStamp _frameStamp;
osgGA::EventQueue::Events _events; osgGA::EventQueue::Events _events;
}; };
class DataConverter class DataConverter
@@ -186,22 +186,22 @@ class DataConverter
{ {
if (_currentPtr+1>=_endPtr) return; if (_currentPtr+1>=_endPtr) return;
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read1(char* ptr) inline void read1(char* ptr)
{ {
if (_currentPtr+1>=_endPtr) return; if (_currentPtr+1>=_endPtr) return;
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
inline void write2(char* ptr) inline void write2(char* ptr)
{ {
if (_currentPtr+2>=_endPtr) return; if (_currentPtr+2>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read2(char* ptr) inline void read2(char* ptr)
@@ -210,13 +210,13 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -224,10 +224,10 @@ class DataConverter
{ {
if (_currentPtr+4>=_endPtr) return; if (_currentPtr+4>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read4(char* ptr) inline void read4(char* ptr)
@@ -236,17 +236,17 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+3) = *(_currentPtr++); *(ptr+3) = *(_currentPtr++);
*(ptr+2) = *(_currentPtr++); *(ptr+2) = *(_currentPtr++);
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -254,15 +254,15 @@ class DataConverter
{ {
if (_currentPtr+8>=_endPtr) return; if (_currentPtr+8>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read8(char* ptr) inline void read8(char* ptr)
@@ -272,27 +272,27 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+7) = *(_currentPtr++); *(ptr+7) = *(_currentPtr++);
*(ptr+6) = *(_currentPtr++); *(ptr+6) = *(_currentPtr++);
*(ptr+5) = *(_currentPtr++); *(ptr+5) = *(_currentPtr++);
*(ptr+4) = *(_currentPtr++); *(ptr+4) = *(_currentPtr++);
*(ptr+3) = *(_currentPtr++); *(ptr+3) = *(_currentPtr++);
*(ptr+2) = *(_currentPtr++); *(ptr+2) = *(_currentPtr++);
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -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);
@@ -322,13 +322,13 @@ class DataConverter
void write(const osgGA::GUIEventAdapter& event); void write(const osgGA::GUIEventAdapter& event);
void read(osgGA::GUIEventAdapter& event); void read(osgGA::GUIEventAdapter& event);
void write(CameraPacket& cameraPacket); void write(CameraPacket& cameraPacket);
void read(CameraPacket& cameraPacket); void read(CameraPacket& cameraPacket);
char* startPtr() { return _startPtr; } char* startPtr() { return _startPtr; }
unsigned int numBytes() { return _numBytes; } unsigned int numBytes() { return _numBytes; }
protected: protected:
char* _startPtr; char* _startPtr;
@@ -341,4 +341,4 @@ class DataConverter
#endif #endif

View File

@@ -1,12 +1,12 @@
/* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield /* -*-c++-*- Present3D - Copyright (C) 1999-2006 Robert Osfield
* *
* This software is open source and may be redistributed and/or modified under * This software is open source and may be redistributed and/or modified under
* the terms of the GNU General Public License (GPL) version 2.0. * the terms of the GNU General Public License (GPL) version 2.0.
* The full license is in LICENSE.txt file included with this distribution,. * The full license is in LICENSE.txt file included with this distribution,.
* *
* This software is distributed in the hope that it will be useful, * This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of * but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* include LICENSE.txt for more details. * include LICENSE.txt for more details.
*/ */
@@ -135,14 +135,14 @@ void setViewer(osgViewer::Viewer& viewer, float width, float height, float dista
class ForwardToDeviceEventHandler : public osgGA::GUIEventHandler { class ForwardToDeviceEventHandler : public osgGA::GUIEventHandler {
public: public:
ForwardToDeviceEventHandler(osgGA::Device* device) : osgGA::GUIEventHandler(), _device(device) {} 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 *)
{ {
OSG_INFO<<"ForwardToDeviceEventHandler::setEvent("<<ea.getKey()<<")"<<std::endl; OSG_INFO<<"ForwardToDeviceEventHandler::setEvent("<<ea.getKey()<<")"<<std::endl;
_device->sendEvent(ea); _device->sendEvent(ea);
return false; return false;
} }
private: private:
osg::ref_ptr<osgGA::Device> _device; osg::ref_ptr<osgGA::Device> _device;
}; };
@@ -161,7 +161,7 @@ class FollowMouseCallback: public osgGA::GUIEventHandler
if (!transform) return false; if (!transform) return false;
osg::NotifySeverity level = osg::INFO; osg::NotifySeverity level = osg::INFO;
switch(ea.getEventType()) switch(ea.getEventType())
{ {
case(osgGA::GUIEventAdapter::PUSH): case(osgGA::GUIEventAdapter::PUSH):
@@ -284,7 +284,7 @@ enum P3DApplicationType
void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_options, const std::string& cursorFileName) void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_options, const std::string& cursorFileName)
{ {
if (!loadedModel) return; if (!loadedModel) return;
#if !defined(OSG_GLES2_AVAILABLE) && !defined(OSG_GL3_AVAILABLE) #if !defined(OSG_GLES2_AVAILABLE) && !defined(OSG_GL3_AVAILABLE)
// add back in enabling of the GL_ALPHA_TEST to get around the core OSG no longer setting it by default for opaque bins. // add back in enabling of the GL_ALPHA_TEST to get around the core OSG no longer setting it by default for opaque bins.
@@ -312,7 +312,7 @@ void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name)
{ {
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())); viewer.getEventHandlers().push_front(new ForwardToDeviceEventHandler(dev.get()));
} }
@@ -327,7 +327,7 @@ 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);
// set up the usage document, in case we need to print out how to use this program. // set up the usage document, in case we need to print out how to use this program.
arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName()); arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName());
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the application for presenting 3D interactive slide shows."); arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the application for presenting 3D interactive slide shows.");
@@ -386,10 +386,10 @@ int main( int argc, char **argv )
#ifdef USE_SDL #ifdef USE_SDL
SDLIntegration sdlIntegration; SDLIntegration sdlIntegration;
osg::notify(osg::INFO)<<"USE_SDL"<<std::endl; osg::notify(osg::INFO)<<"USE_SDL"<<std::endl;
#endif #endif
bool doSetViewer = true; bool doSetViewer = true;
std::string configurationFile; std::string configurationFile;
@@ -402,7 +402,7 @@ int main( int argc, char **argv )
while (arguments.read("-c",configurationFile)) {} while (arguments.read("-c",configurationFile)) {}
osg::Vec4 clearColor(0.0f,0.0f,0.0f,0.0f); osg::Vec4 clearColor(0.0f,0.0f,0.0f,0.0f);
while (arguments.read("--clear-color",clearColor[0],clearColor[1],clearColor[2],clearColor[3])) {} while (arguments.read("--clear-color",clearColor[0],clearColor[1],clearColor[2],clearColor[3])) {}
std::string filename; std::string filename;
@@ -441,7 +441,7 @@ int main( int argc, char **argv )
// construct the viewer. // construct the viewer.
osgViewer::Viewer viewer(arguments); osgViewer::Viewer viewer(arguments);
// set clear colour to black by default. // set clear colour to black by default.
viewer.getCamera()->setClearColor(clearColor); viewer.getCamera()->setClearColor(clearColor);
@@ -467,12 +467,12 @@ int main( int argc, char **argv )
while (arguments.read("--device", device)) while (arguments.read("--device", device))
{ {
addDeviceTo(viewer, device); addDeviceTo(viewer, device);
} }
if (arguments.read("--http-control")) if (arguments.read("--http-control"))
{ {
std::string server_address = "localhost"; std::string server_address = "localhost";
std::string server_port = "8080"; std::string server_port = "8080";
std::string document_root = "htdocs"; std::string document_root = "htdocs";
@@ -489,21 +489,11 @@ int main( int argc, char **argv )
viewer.addDevice(rest_http_device.get()); viewer.addDevice(rest_http_device.get());
} }
} }
// set up stereo masks // set up stereo masks
viewer.getCamera()->setCullMask(0xffffffff);
viewer.getCamera()->setCullMaskLeft(0x00000001); viewer.getCamera()->setCullMaskLeft(0x00000001);
viewer.getCamera()->setCullMaskRight(0x00000002); viewer.getCamera()->setCullMaskRight(0x00000002);
bool assignLeftCullMaskForMono = true;
if (assignLeftCullMaskForMono)
{
viewer.getCamera()->setCullMask(viewer.getCamera()->getCullMaskLeft());
}
else
{
viewer.getCamera()->setCullMask(0xffffffff);
}
// set up the camera manipulators. // set up the camera manipulators.
{ {
@@ -519,7 +509,7 @@ int main( int argc, char **argv )
while (arguments.read("-p",pathfile)) while (arguments.read("-p",pathfile))
{ {
osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile); osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile);
if (apm || !apm->valid()) if (apm || !apm->valid())
{ {
unsigned int num = keyswitchManipulator->getNumMatrixManipulators(); unsigned int num = keyswitchManipulator->getNumMatrixManipulators();
keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm ); keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm );
@@ -557,12 +547,12 @@ int main( int argc, char **argv )
bool hideCursor = (showCursor=="No" || showCursor=="NO" || showCursor=="no"); bool hideCursor = (showCursor=="No" || showCursor=="NO" || showCursor=="no");
while (arguments.read("--set-viewer")) { doSetViewer = true; } while (arguments.read("--set-viewer")) { doSetViewer = true; }
while (arguments.read("--no-set-viewer")) { doSetViewer = false; } while (arguments.read("--no-set-viewer")) { doSetViewer = false; }
// if we want to hide the cursor override the custom cursor. // if we want to hide the cursor override the custom cursor.
if (hideCursor) cursorFileName.clear(); if (hideCursor) cursorFileName.clear();
// cluster related entries. // cluster related entries.
int socketNumber=8100; int socketNumber=8100;
@@ -609,7 +599,7 @@ int main( int argc, char **argv )
viewer.getUpdateVisitor()->setTraversalMode(updateTraversalMode); viewer.getUpdateVisitor()->setTraversalMode(updateTraversalMode);
} }
// register the slide event handler - which moves the presentation from slide to slide, layer to layer. // register the slide event handler - which moves the presentation from slide to slide, layer to layer.
osg::ref_ptr<osgPresentation::SlideEventHandler> seh = new osgPresentation::SlideEventHandler(&viewer); osg::ref_ptr<osgPresentation::SlideEventHandler> seh = new osgPresentation::SlideEventHandler(&viewer);
viewer.addEventHandler(seh.get()); viewer.addEventHandler(seh.get());
@@ -630,7 +620,7 @@ 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 relase_and_compile = false; bool relase_and_compile = false;
while (arguments.read("--release-and-compile")) while (arguments.read("--release-and-compile"))
{ {
relase_and_compile = true; relase_and_compile = true;
} }
@@ -641,7 +631,7 @@ int main( int argc, char **argv )
viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false); viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS; optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS;
} }
// //
// osgDB::Registry::instance()->getOrCreateDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false); // osgDB::Registry::instance()->getOrCreateDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
// optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS; // optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS;
// osg::Texture::getTextureObjectManager()->setExpiryDelay(0.0f); // osg::Texture::getTextureObjectManager()->setExpiryDelay(0.0f);
@@ -667,7 +657,7 @@ int main( int argc, char **argv )
float width = osg::DisplaySettings::instance()->getScreenWidth(); float width = osg::DisplaySettings::instance()->getScreenWidth();
float height = osg::DisplaySettings::instance()->getScreenHeight(); float height = osg::DisplaySettings::instance()->getScreenHeight();
float distance = osg::DisplaySettings::instance()->getScreenDistance(); float distance = osg::DisplaySettings::instance()->getScreenDistance();
while (arguments.read("-s", width, height, distance)) while (arguments.read("-s", width, height, distance))
{ {
osg::DisplaySettings::instance()->setScreenDistance(distance); osg::DisplaySettings::instance()->setScreenDistance(distance);
osg::DisplaySettings::instance()->setScreenHeight(height); osg::DisplaySettings::instance()->setScreenHeight(height);
@@ -697,11 +687,11 @@ int main( int argc, char **argv )
else if (strcmp(str,"master")==0) P3DApplicationType = MASTER; else if (strcmp(str,"master")==0) P3DApplicationType = MASTER;
else if (strcmp(str,"slave")==0) P3DApplicationType = SLAVE; else if (strcmp(str,"slave")==0) P3DApplicationType = SLAVE;
} }
while (arguments.read("--viewer")) { P3DApplicationType = VIEWER; } while (arguments.read("--viewer")) { P3DApplicationType = VIEWER; }
while (arguments.read("--master")) { P3DApplicationType = MASTER; } while (arguments.read("--master")) { P3DApplicationType = MASTER; }
while (arguments.read("--slave")) { P3DApplicationType = SLAVE; } while (arguments.read("--slave")) { P3DApplicationType = SLAVE; }
while (arguments.read("--version")) while (arguments.read("--version"))
{ {
std::string appTypeName = "invalid"; std::string appTypeName = "invalid";
@@ -790,7 +780,7 @@ int main( int argc, char **argv )
// if no model has been successfully loaded report failure. // if no model has been successfully loaded report failure.
if (!loadedModel) if (!loadedModel)
{ {
osg::notify(osg::INFO) << arguments.getApplicationName() <<": No data loaded" << std::endl; osg::notify(osg::INFO) << arguments.getApplicationName() <<": No data loaded" << std::endl;
return 1; return 1;
@@ -806,12 +796,12 @@ int main( int argc, char **argv )
for(unsigned int i=0; i<loadedModel->getNumDescriptions(); ++i) for(unsigned int i=0; i<loadedModel->getNumDescriptions(); ++i)
{ {
const std::string& desc = loadedModel->getDescription(i); const std::string& desc = loadedModel->getDescription(i);
if (desc=="loop") if (desc=="loop")
{ {
osg::notify(osg::NOTICE)<<"Enabling looping"<<std::endl; osg::notify(osg::NOTICE)<<"Enabling looping"<<std::endl;
seh->setLoopPresentation(true); seh->setLoopPresentation(true);
} }
else if (desc=="auto") else if (desc=="auto")
{ {
osg::notify(osg::NOTICE)<<"Enabling auto run"<<std::endl; osg::notify(osg::NOTICE)<<"Enabling auto run"<<std::endl;
seh->setAutoSteppingActive(true); seh->setAutoSteppingActive(true);
@@ -840,7 +830,7 @@ int main( int argc, char **argv )
} }
// pass the model to the slide event handler so it knows which to manipulate. // pass the model to the slide event handler so it knows which to manipulate.
seh->set(loadedModel.get()); seh->set(loadedModel.get());
@@ -853,7 +843,7 @@ int main( int argc, char **argv )
osgDB::writeNodeFile(*loadedModel,outputFileName); osgDB::writeNodeFile(*loadedModel,outputFileName);
return 0; return 0;
} }
if (!cursorFileName.empty() || hideCursor) if (!cursorFileName.empty() || hideCursor)
{ {
@@ -875,7 +865,7 @@ int main( int argc, char **argv )
osg::Timer_t startOfFrameTick = osg::Timer::instance()->tick(); osg::Timer_t startOfFrameTick = osg::Timer::instance()->tick();
double targetFrameTime = 1.0/targetFrameRate; double targetFrameTime = 1.0/targetFrameRate;
if (exportName.empty()) if (exportName.empty())
{ {
// objects for managing the broadcasting and recieving of camera packets. // objects for managing the broadcasting and recieving of camera packets.
@@ -904,7 +894,7 @@ int main( int argc, char **argv )
startOfFrameTick = osg::Timer::instance()->tick(); startOfFrameTick = osg::Timer::instance()->tick();
#if 0 #if 0
if (kmcb) if (kmcb)
{ {
double time = kmcb->getTime(); double time = kmcb->getTime();
@@ -920,9 +910,9 @@ int main( int argc, char **argv )
{ {
// take camera zero as the guide. // take camera zero as the guide.
osg::Matrix modelview(viewer.getCamera()->getViewMatrix()); osg::Matrix modelview(viewer.getCamera()->getViewMatrix());
cp.setPacket(modelview,viewer.getFrameStamp()); cp.setPacket(modelview,viewer.getFrameStamp());
// cp.readEventQueue(viewer); // cp.readEventQueue(viewer);
scratchPad.reset(); scratchPad.reset();
@@ -932,7 +922,7 @@ int main( int argc, char **argv )
scratchPad.read(cp); scratchPad.read(cp);
bc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes()); bc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes());
std::cout << "bc.sync()"<<scratchPad.numBytes()<<std::endl; std::cout << "bc.sync()"<<scratchPad.numBytes()<<std::endl;
bc.sync(); bc.sync();
@@ -942,13 +932,13 @@ int main( int argc, char **argv )
rc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes()); rc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes());
rc.sync(); rc.sync();
scratchPad.reset(); scratchPad.reset();
scratchPad.read(cp); scratchPad.read(cp);
// cp.writeEventQueue(viewer); // cp.writeEventQueue(viewer);
if (cp.getMasterKilled()) if (cp.getMasterKilled())
{ {
std::cout << "Received master killed."<<std::endl; std::cout << "Received master killed."<<std::endl;
// break out of while (!done) loop since we've now want to shut down. // break out of while (!done) loop since we've now want to shut down.
@@ -982,7 +972,7 @@ int main( int argc, char **argv )
seh->selectSlide(previous_ActiveSlide, previous_ActiveLayer); seh->selectSlide(previous_ActiveSlide, previous_ActiveLayer);
continue; continue;
} }
// update the scene by traversing it with the the update visitor which will // update the scene by traversing it with the the update visitor which will
@@ -1006,7 +996,7 @@ int main( int argc, char **argv )
{ {
ExportHTML::write(seh.get(), viewer, exportName); ExportHTML::write(seh.get(), viewer, exportName);
} }
return 0; return 0;
} }

View File

@@ -48,13 +48,13 @@ 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:
CameraPacket():_masterKilled(false) CameraPacket():_masterKilled(false)
{ {
_byte_order = SWAP_BYTES_COMPARE; _byte_order = SWAP_BYTES_COMPARE;
} }
void setPacket(const osg::Matrix& matrix,const osg::FrameStamp* frameStamp) void setPacket(const osg::Matrix& matrix,const osg::FrameStamp* frameStamp)
{ {
_matrix = matrix; _matrix = matrix;
@@ -63,20 +63,20 @@ class CameraPacket {
_frameStamp = *frameStamp; _frameStamp = *frameStamp;
} }
} }
void getModelView(osg::Matrix& matrix,float angle_offset=0.0f) void getModelView(osg::Matrix& matrix,float angle_offset=0.0f)
{ {
matrix = _matrix * osg::Matrix::rotate(osg::DegreesToRadians(angle_offset),0.0f,1.0f,0.0f); matrix = _matrix * osg::Matrix::rotate(osg::DegreesToRadians(angle_offset),0.0f,1.0f,0.0f);
} }
void readEventQueue(osgViewer::Viewer& viewer); void readEventQueue(osgViewer::Viewer& viewer);
void writeEventQueue(osgViewer::Viewer& viewer); void writeEventQueue(osgViewer::Viewer& viewer);
void setMasterKilled(const bool flag) { _masterKilled = flag; } void setMasterKilled(const bool flag) { _masterKilled = flag; }
const bool getMasterKilled() const { return _masterKilled; } const bool getMasterKilled() const { return _masterKilled; }
unsigned int _byte_order; unsigned int _byte_order;
bool _masterKilled; bool _masterKilled;
osg::Matrix _matrix; osg::Matrix _matrix;
@@ -84,11 +84,11 @@ class CameraPacket {
// note don't use a ref_ptr as used elsewhere for FrameStamp // note don't use a ref_ptr as used elsewhere for FrameStamp
// since we don't want to copy the pointer - but the memory. // since we don't want to copy the pointer - but the memory.
// FrameStamp doesn't have a private destructor to allow // FrameStamp doesn't have a private destructor to allow
// us to do this, even though its a reference counted object. // us to do this, even though its a reference counted object.
osg::FrameStamp _frameStamp; osg::FrameStamp _frameStamp;
osgGA::EventQueue::Events _events; osgGA::EventQueue::Events _events;
}; };
class DataConverter class DataConverter
@@ -112,7 +112,7 @@ class DataConverter
bool _swapBytes; bool _swapBytes;
char* _currentPtr; char* _currentPtr;
void reset() void reset()
{ {
_currentPtr = _startPtr; _currentPtr = _startPtr;
@@ -122,22 +122,22 @@ class DataConverter
{ {
if (_currentPtr+1>=_endPtr) return; if (_currentPtr+1>=_endPtr) return;
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read1(char* ptr) inline void read1(char* ptr)
{ {
if (_currentPtr+1>=_endPtr) return; if (_currentPtr+1>=_endPtr) return;
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
inline void write2(char* ptr) inline void write2(char* ptr)
{ {
if (_currentPtr+2>=_endPtr) return; if (_currentPtr+2>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read2(char* ptr) inline void read2(char* ptr)
@@ -146,13 +146,13 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -160,10 +160,10 @@ class DataConverter
{ {
if (_currentPtr+4>=_endPtr) return; if (_currentPtr+4>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read4(char* ptr) inline void read4(char* ptr)
@@ -172,17 +172,17 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+3) = *(_currentPtr++); *(ptr+3) = *(_currentPtr++);
*(ptr+2) = *(_currentPtr++); *(ptr+2) = *(_currentPtr++);
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -190,15 +190,15 @@ class DataConverter
{ {
if (_currentPtr+8>=_endPtr) return; if (_currentPtr+8>=_endPtr) return;
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr++); *(_currentPtr++) = *(ptr++);
*(_currentPtr++) = *(ptr); *(_currentPtr++) = *(ptr);
} }
inline void read8(char* ptr) inline void read8(char* ptr)
@@ -208,27 +208,27 @@ class DataConverter
if (_swapBytes) if (_swapBytes)
{ {
*(ptr+7) = *(_currentPtr++); *(ptr+7) = *(_currentPtr++);
*(ptr+6) = *(_currentPtr++); *(ptr+6) = *(_currentPtr++);
*(ptr+5) = *(_currentPtr++); *(ptr+5) = *(_currentPtr++);
*(ptr+4) = *(_currentPtr++); *(ptr+4) = *(_currentPtr++);
*(ptr+3) = *(_currentPtr++); *(ptr+3) = *(_currentPtr++);
*(ptr+2) = *(_currentPtr++); *(ptr+2) = *(_currentPtr++);
*(ptr+1) = *(_currentPtr++); *(ptr+1) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
else else
{ {
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr++) = *(_currentPtr++); *(ptr++) = *(_currentPtr++);
*(ptr) = *(_currentPtr++); *(ptr) = *(_currentPtr++);
} }
} }
@@ -241,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)
{ {
@@ -361,16 +361,16 @@ class DataConverter
event.setModKeyMask(readUInt()); event.setModKeyMask(readUInt());
event.setTime(readDouble()); event.setTime(readDouble());
} }
void write(CameraPacket& cameraPacket) void write(CameraPacket& cameraPacket)
{ {
writeUInt(cameraPacket._byte_order); writeUInt(cameraPacket._byte_order);
writeUInt(cameraPacket._masterKilled); writeUInt(cameraPacket._masterKilled);
write(cameraPacket._matrix); write(cameraPacket._matrix);
write(cameraPacket._frameStamp); write(cameraPacket._frameStamp);
writeUInt(cameraPacket._events.size()); writeUInt(cameraPacket._events.size());
for(osgGA::EventQueue::Events::iterator itr = cameraPacket._events.begin(); for(osgGA::EventQueue::Events::iterator itr = cameraPacket._events.begin();
itr != cameraPacket._events.end(); itr != cameraPacket._events.end();
@@ -387,12 +387,12 @@ class DataConverter
{ {
_swapBytes = !_swapBytes; _swapBytes = !_swapBytes;
} }
cameraPacket._masterKilled = readUInt()!=0; cameraPacket._masterKilled = readUInt()!=0;
read(cameraPacket._matrix); read(cameraPacket._matrix);
read(cameraPacket._frameStamp); read(cameraPacket._frameStamp);
cameraPacket._events.clear(); cameraPacket._events.clear();
unsigned int numEvents = readUInt(); unsigned int numEvents = readUInt();
for(unsigned int i=0;i<numEvents;++i) for(unsigned int i=0;i<numEvents;++i)
@@ -409,7 +409,7 @@ void CameraPacket::readEventQueue(osgViewer::Viewer& viewer)
_events.clear(); _events.clear();
osgViewer::ViewerBase::Contexts contexts; osgViewer::ViewerBase::Contexts contexts;
viewer.getContexts(contexts); viewer.getContexts(contexts);
for(osgViewer::ViewerBase::Contexts::iterator citr =contexts.begin(); citr != contexts.end(); ++citr) for(osgViewer::ViewerBase::Contexts::iterator citr =contexts.begin(); citr != contexts.end(); ++citr)
{ {
@@ -423,7 +423,7 @@ void CameraPacket::readEventQueue(osgViewer::Viewer& viewer)
} }
_events.insert(_events.end(), gw_events.begin(), gw_events.end()); _events.insert(_events.end(), gw_events.begin(), gw_events.end());
} }
viewer.getEventQueue()->copyEvents(_events); viewer.getEventQueue()->copyEvents(_events);
osg::notify(osg::INFO)<<"written events = "<<_events.size()<<std::endl; osg::notify(osg::INFO)<<"written events = "<<_events.size()<<std::endl;
@@ -449,7 +449,7 @@ 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);
// set up the usage document, in case we need to print out how to use this program. // set up the usage document, in case we need to print out how to use this program.
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the example which demonstrates how to approach implementation of clustering."); arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the example which demonstrates how to approach implementation of clustering.");
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ..."); arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
@@ -459,7 +459,7 @@ int main( int argc, char **argv )
arguments.getApplicationUsage()->addCommandLineOption("-n <int>","Socket number to transmit packets"); arguments.getApplicationUsage()->addCommandLineOption("-n <int>","Socket number to transmit packets");
arguments.getApplicationUsage()->addCommandLineOption("-f <float>","Field of view of camera"); arguments.getApplicationUsage()->addCommandLineOption("-f <float>","Field of view of camera");
arguments.getApplicationUsage()->addCommandLineOption("-o <float>","Offset angle of camera"); arguments.getApplicationUsage()->addCommandLineOption("-o <float>","Offset angle of camera");
// construct the viewer. // construct the viewer.
osgViewer::Viewer viewer; osgViewer::Viewer viewer;
@@ -468,12 +468,12 @@ int main( int argc, char **argv )
ViewerMode viewerMode = STAND_ALONE; ViewerMode viewerMode = STAND_ALONE;
while (arguments.read("-m")) viewerMode = MASTER; while (arguments.read("-m")) viewerMode = MASTER;
while (arguments.read("-s")) viewerMode = SLAVE; while (arguments.read("-s")) viewerMode = SLAVE;
int socketNumber=8100; int socketNumber=8100;
while (arguments.read("-n",socketNumber)) ; while (arguments.read("-n",socketNumber)) ;
float camera_fov=-1.0f; float camera_fov=-1.0f;
while (arguments.read("-f",camera_fov)) while (arguments.read("-f",camera_fov))
{ {
} }
@@ -497,7 +497,7 @@ int main( int argc, char **argv )
arguments.writeErrorMessages(std::cout); arguments.writeErrorMessages(std::cout);
return 1; return 1;
} }
if (arguments.argc()<=1) if (arguments.argc()<=1)
{ {
arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION); arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION);
@@ -514,13 +514,13 @@ int main( int argc, char **argv )
{ {
double fovy, aspectRatio, zNear, zFar; double fovy, aspectRatio, zNear, zFar;
viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar); viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar);
double original_fov = atan(tan(osg::DegreesToRadians(fovy)*0.5)*aspectRatio)*2.0; double original_fov = atan(tan(osg::DegreesToRadians(fovy)*0.5)*aspectRatio)*2.0;
std::cout << "setting lens perspective : original "<<original_fov<<" "<<fovy<<std::endl; std::cout << "setting lens perspective : original "<<original_fov<<" "<<fovy<<std::endl;
fovy = atan(tan(osg::DegreesToRadians(camera_fov)*0.5)/aspectRatio)*2.0; fovy = atan(tan(osg::DegreesToRadians(camera_fov)*0.5)/aspectRatio)*2.0;
viewer.getCamera()->setProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar); viewer.getCamera()->setProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar);
viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar); viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio,zNear, zFar);
original_fov = atan(tan(osg::DegreesToRadians(fovy)*0.5)*aspectRatio)*2.0; original_fov = atan(tan(osg::DegreesToRadians(fovy)*0.5)*aspectRatio)*2.0;
std::cout << "setting lens perspective : new "<<original_fov<<" "<<fovy<<std::endl; std::cout << "setting lens perspective : new "<<original_fov<<" "<<fovy<<std::endl;
@@ -549,13 +549,13 @@ int main( int argc, char **argv )
rc.setPort(static_cast<short int>(socketNumber)); rc.setPort(static_cast<short int>(socketNumber));
bool masterKilled = false; bool masterKilled = false;
DataConverter scratchPad(1024); DataConverter scratchPad(1024);
while( !viewer.done() && !masterKilled ) while( !viewer.done() && !masterKilled )
{ {
osg::Timer_t startTick = osg::Timer::instance()->tick(); osg::Timer_t startTick = osg::Timer::instance()->tick();
viewer.advance(); viewer.advance();
// special handling for working as a cluster. // special handling for working as a cluster.
@@ -563,12 +563,12 @@ int main( int argc, char **argv )
{ {
case(MASTER): case(MASTER):
{ {
// take camera zero as the guide. // take camera zero as the guide.
osg::Matrix modelview(viewer.getCamera()->getViewMatrix()); osg::Matrix modelview(viewer.getCamera()->getViewMatrix());
cp->setPacket(modelview,viewer.getFrameStamp()); cp->setPacket(modelview,viewer.getFrameStamp());
cp->readEventQueue(viewer); cp->readEventQueue(viewer);
scratchPad.reset(); scratchPad.reset();
@@ -578,11 +578,11 @@ int main( int argc, char **argv )
scratchPad.read(*cp); scratchPad.read(*cp);
bc.setBuffer(scratchPad._startPtr, scratchPad._numBytes); bc.setBuffer(scratchPad._startPtr, scratchPad._numBytes);
std::cout << "bc.sync()"<<scratchPad._numBytes<<std::endl; std::cout << "bc.sync()"<<scratchPad._numBytes<<std::endl;
bc.sync(); bc.sync();
} }
break; break;
case(SLAVE): case(SLAVE):
@@ -591,13 +591,13 @@ int main( int argc, char **argv )
rc.setBuffer(scratchPad._startPtr, scratchPad._numBytes); rc.setBuffer(scratchPad._startPtr, scratchPad._numBytes);
rc.sync(); rc.sync();
scratchPad.reset(); scratchPad.reset();
scratchPad.read(*cp); scratchPad.read(*cp);
cp->writeEventQueue(viewer); cp->writeEventQueue(viewer);
if (cp->getMasterKilled()) if (cp->getMasterKilled())
{ {
std::cout << "Received master killed."<<std::endl; std::cout << "Received master killed."<<std::endl;
// break out of while (!done) loop since we've now want to shut down. // break out of while (!done) loop since we've now want to shut down.
@@ -609,9 +609,9 @@ int main( int argc, char **argv )
// no need to anything here, just a normal interactive viewer. // no need to anything here, just a normal interactive viewer.
break; break;
} }
osg::Timer_t endTick = osg::Timer::instance()->tick(); osg::Timer_t endTick = osg::Timer::instance()->tick();
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 the update visitor which will // update the scene by traversing it with the the update visitor which will
@@ -623,14 +623,14 @@ int main( int argc, char **argv )
{ {
osg::Matrix modelview; osg::Matrix modelview;
cp->getModelView(modelview,camera_offset); cp->getModelView(modelview,camera_offset);
viewer.getCamera()->setViewMatrix(modelview); viewer.getCamera()->setViewMatrix(modelview);
} }
// fire off the cull and draw traversals of the scene. // fire off the cull and draw traversals of the scene.
if(!masterKilled) if(!masterKilled)
viewer.renderingTraversals(); viewer.renderingTraversals();
} }
// if we are master clean up by telling all slaves that we're going down. // if we are master clean up by telling all slaves that we're going down.
@@ -638,7 +638,7 @@ int main( int argc, char **argv )
{ {
// need to broadcast my death. // need to broadcast my death.
cp->setPacket(osg::Matrix::identity(),viewer.getFrameStamp()); cp->setPacket(osg::Matrix::identity(),viewer.getFrameStamp());
cp->setMasterKilled(true); cp->setMasterKilled(true);
scratchPad.reset(); scratchPad.reset();
scratchPad.write(*cp); scratchPad.write(*cp);

View File

@@ -30,7 +30,7 @@
static const char* computeSrc = { static const char* computeSrc = {
"#version 430\n" "#version 430\n"
"uniform float osg_FrameTime;\n" "uniform float osg_FrameTime;\n"
"layout (r32f, binding =0) uniform image2D targetTex;\n" "uniform image2D targetTex;\n"
"layout (local_size_x = 16, local_size_y = 16) in;\n" "layout (local_size_x = 16, local_size_y = 16) in;\n"
"void main() {\n" "void main() {\n"
" ivec2 storePos = ivec2(gl_GlobalInvocationID.xy);\n" " ivec2 storePos = ivec2(gl_GlobalInvocationID.xy);\n"

View File

@@ -99,14 +99,12 @@ Node *makeTerrain( void )
for( i = 0; i < m * n; i++ ) for( i = 0; i < m * n; i++ )
{ {
float* vc = vertex[i]; v[i][0] = vertex[i][0] - dbcenter[0];
v[i][0] = vc[0] - dbcenter[0]; v[i][1] = vertex[i][1] - dbcenter[1];
v[i][1] = vc[1] - dbcenter[1]; v[i][2] = vertex[i][2];
v[i][2] = vc[2];
float* tc = texcoord[i]; t[i][0] = texcoord[i][0] + 0.025;
t[i][0] = tc[0]; t[i][1] = texcoord[i][1];
t[i][1] = tc[1];
} }
Geometry *geom = new Geometry; Geometry *geom = new Geometry;

View File

@@ -1,3 +1,14 @@
# INCLUDE_DIRECTORIES( ${OPENAL_INCLUDE_DIR} )
# SET(TARGET_EXTERNAL_LIBRARIES ${OPENAL_LIBRARY} alut)
IF (SDL_FOUND)
SET(TARGET_EXTERNAL_LIBRARIES ${SDL_LIBRARY} )
INCLUDE_DIRECTORIES(${SDL_INCLUDE_DIR} )
ADD_DEFINITIONS(-DUSE_SDL)
IF (MINGW)
SET(TARGET_EXTERNAL_LIBRARIES ${TARGET_EXTERNAL_LIBRARIES} winmm dinput ddraw dxguid)
ENDIF()
ENDIF(SDL_FOUND)
SET(TARGET_SRC osgmultiplemovies.cpp ) SET(TARGET_SRC osgmultiplemovies.cpp )
SET(TARGET_ADDED_LIBRARIES osgGA ) SET(TARGET_ADDED_LIBRARIES osgGA )

View File

@@ -20,7 +20,7 @@
void configureShaders( osg::StateSet* stateSet ) void configureShaders( osg::StateSet* stateSet )
{ {
const std::string vertexSource = const std::string vertexSource =
"#version 140 \n" "#version 140 \n"
" \n" " \n"
"uniform mat4 osg_ModelViewProjectionMatrix; \n" "uniform mat4 osg_ModelViewProjectionMatrix; \n"
@@ -41,7 +41,7 @@ void configureShaders( osg::StateSet* stateSet )
"} \n"; "} \n";
osg::Shader* vShader = new osg::Shader( osg::Shader::VERTEX, vertexSource ); osg::Shader* vShader = new osg::Shader( osg::Shader::VERTEX, vertexSource );
const std::string fragmentSource = const std::string fragmentSource =
"#version 140 \n" "#version 140 \n"
" \n" " \n"
"in vec4 color; \n" "in vec4 color; \n"
@@ -90,16 +90,16 @@ int main( int argc, char** argv )
return( 1 ); return( 1 );
} }
osgViewer::Viewer viewer;
// Create a Camera that uses the above OpenGL context. // Create a Camera that uses the above OpenGL context.
osg::Camera* cam = viewer.getCamera(); osg::Camera* cam = new osg::Camera;
cam->setGraphicsContext( gc.get() ); cam->setGraphicsContext( gc.get() );
// Must set perspective projection for fovy and aspect. // Must set perspective projection for fovy and aspect.
cam->setProjectionMatrix( osg::Matrix::perspective( 30., (double)width/(double)height, 1., 100. ) ); cam->setProjectionMatrix( osg::Matrix::perspective( 30., (double)width/(double)height, 1., 100. ) );
// Unlike OpenGL, OSG viewport does *not* default to window dimensions. // Unlike OpenGL, OSG viewport does *not* default to window dimensions.
cam->setViewport( new osg::Viewport( 0, 0, width, height ) ); cam->setViewport( new osg::Viewport( 0, 0, width, height ) );
osgViewer::Viewer viewer;
viewer.setCamera( cam );
viewer.setSceneData( root ); viewer.setSceneData( root );
// for non GL3/GL4 and non GLES2 platforms we need enable the osg_ uniforms that the shaders will use, // for non GL3/GL4 and non GLES2 platforms we need enable the osg_ uniforms that the shaders will use,
@@ -118,7 +118,7 @@ OSG currently support OpenGL 3.x on Windows. This comment block describes the
necessary configuration steps. necessary configuration steps.
Get the draft gl3.h header file from OpenGL.org and put it in a folder called Get the draft gl3.h header file from OpenGL.org and put it in a folder called
GL3 somewhere on your hard drive. OSG includes this header as <GL3/gl3.h>. Get <EFBFBD>GL3<EFBFBD> somewhere on your hard drive. OSG includes this header as <GL3/gl3.h>. Get
gl3.h from here: gl3.h from here:
http://www.opengl.org/registry/ http://www.opengl.org/registry/
@@ -128,7 +128,7 @@ several changes.
* Add the path to <GL3/gl3.h> to the CMake compiler flags, CMAKE_CXX_FLAGS and * Add the path to <GL3/gl3.h> to the CMake compiler flags, CMAKE_CXX_FLAGS and
CMAKE_CXX_FLAGS_DEBUG (for release and debug builds; others if you use other CMAKE_CXX_FLAGS_DEBUG (for release and debug builds; others if you use other
build configurations). The text to add should look something like this: build configurations). The text to add should look something like this:
/I C:\GLHeader /I <EFBFBD>C:\GLHeader<EFBFBD>
The folder GLHeader should contain a subfolder GL3, which in turn contains The folder GLHeader should contain a subfolder GL3, which in turn contains
gl3.h. gl3.h.

View File

@@ -1,13 +1,6 @@
/* A demonstration of Tessellation Shaders in OpenScenegraph. /* A demonstration of Tessellation Shaders in OpenScenegraph.
*
* Instructions:
* Press plus to increase tesselation and minus to decrease it.
* Press right arrow to increase inner tesselation and left arrow to decrease it.
* Press up arrow to increase outer tesselation and down arrow to decrease it.
*
* Original code by Philip Rideout * Original code by Philip Rideout
* Adapted to OpenScenegraph by John Kaniarz * Adapted to OpenScenegraph by John Kaniarz
* Additional work by Michael Mc Donnell
*/ */
#include <osg/Program> #include <osg/Program>
@@ -120,8 +113,7 @@ static const char* fragSource = {
"}\n" "}\n"
}; };
osg::ref_ptr<osg::Geode> CreateIcosahedron(osg::Program *program) osg::ref_ptr<osg::Geode> CreateIcosahedron(osg::Program *program){
{
osg::Geode *geode=new osg::Geode(); osg::Geode *geode=new osg::Geode();
osg::Geometry *geometry = new osg::Geometry(); osg::Geometry *geometry = new osg::Geometry();
const unsigned int Faces[] = { const unsigned int Faces[] = {
@@ -171,16 +163,10 @@ osg::ref_ptr<osg::Geode> CreateIcosahedron(osg::Program *program)
geometry->setVertexArray(vertices); geometry->setVertexArray(vertices);
geometry->addPrimitiveSet(new osg::DrawElementsUInt(osg::PrimitiveSet::PATCHES,IndexCount,Faces)); geometry->addPrimitiveSet(new osg::DrawElementsUInt(osg::PrimitiveSet::PATCHES,IndexCount,Faces));
// Expand the bounding box, otherwise the geometry is clipped in front when tessellating.
osg::BoundingBox bbox(osg::Vec3(-1.0f, -1.9f, -1.0f), osg::Vec3(1.0f, 1.0f, 1.0f));
geometry->setInitialBound(bbox);
geode->addDrawable(geometry); geode->addDrawable(geometry);
return geode; return geode;
} }
osg::ref_ptr<osg::Program> createProgram(){
osg::ref_ptr<osg::Program> createProgram()
{
osg::Program *program = new osg::Program(); osg::Program *program = new osg::Program();
program->addShader(new osg::Shader(osg::Shader::VERTEX,vertSource)); program->addShader(new osg::Shader(osg::Shader::VERTEX,vertSource));
program->addShader(new osg::Shader(osg::Shader::TESSCONTROL,tessControlSource)); program->addShader(new osg::Shader(osg::Shader::TESSCONTROL,tessControlSource));
@@ -193,74 +179,38 @@ osg::ref_ptr<osg::Program> createProgram()
return program; return program;
} }
class KeyboardEventHandler : public osgGA::GUIEventHandler float tessInner=1.0f;
{ float tessOuter=1.0f;
public: osg::ref_ptr<osg::Uniform> tessInnerU = new osg::Uniform("TessLevelInner",tessInner);
KeyboardEventHandler(osg::ref_ptr<osg::Uniform> tessInnerU, osg::ref_ptr<osg::Uniform> tessOuterU): osg::ref_ptr<osg::Uniform> tessOuterU = new osg::Uniform("TessLevelOuter",tessOuter);
_tessInnerU(tessInnerU),
_tessOuterU(tessOuterU)
{
tessInnerU->get(_tessInner);
tessOuterU->get(_tessOuter);
}
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& gaa) class KeyboardEventHandler : public osgGA::GUIEventHandler {
{ public:
KeyboardEventHandler():osgGA::GUIEventHandler(){}
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& gaa){
if(ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN){ if(ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN){
switch (ea.getKey()){ switch (ea.getKey()){
case osgGA::GUIEventAdapter::KEY_Up: case osgGA::GUIEventAdapter::KEY_Up:
increaseOuterTesselation(); tessOuter++;
tessOuterU->set(tessOuter);
return true; return true;
case osgGA::GUIEventAdapter::KEY_Down: case osgGA::GUIEventAdapter::KEY_Down:
decreaseOuterTesselation(); tessOuter--;
tessOuter=std::max(1.0f,tessOuter);
tessOuterU->set(tessOuter);
return true; return true;
case osgGA::GUIEventAdapter::KEY_Left: case osgGA::GUIEventAdapter::KEY_Left:
decreaseInnerTesselation(); tessInner--;
tessInner=std::max(1.0f,tessInner);
tessInnerU->set(tessInner);
return true; return true;
case osgGA::GUIEventAdapter::KEY_Right: case osgGA::GUIEventAdapter::KEY_Right:
increaseInnerTesselation(); tessInner++;
return true; tessInnerU->set(tessInner);
case osgGA::GUIEventAdapter::KEY_Plus:
case osgGA::GUIEventAdapter::KEY_KP_Add:
increaseInnerTesselation();
increaseOuterTesselation();
return true;
case osgGA::GUIEventAdapter::KEY_Minus:
case osgGA::GUIEventAdapter::KEY_KP_Subtract:
decreaseInnerTesselation();
decreaseOuterTesselation();
return true; return true;
} }
} }
return osgGA::GUIEventHandler::handle(ea, gaa); return osgGA::GUIEventHandler::handle(ea,gaa);
}
private:
osg::ref_ptr<osg::Uniform> _tessInnerU;
osg::ref_ptr<osg::Uniform> _tessOuterU;
float _tessInner;
float _tessOuter;
void increaseInnerTesselation()
{
_tessInnerU->set(++_tessInner);
}
void decreaseInnerTesselation()
{
_tessInner = std::max(1.0f, _tessInner-1.0f);
_tessInnerU->set(_tessInner);
}
void increaseOuterTesselation()
{
_tessOuterU->set(++_tessOuter);
}
void decreaseOuterTesselation()
{
_tessOuter = std::max(1.0f, _tessOuter-1.0f);
_tessOuterU->set(_tessOuter);
} }
}; };
@@ -270,9 +220,6 @@ int main(int argc, char* argv[])
viewer.setUpViewInWindow(100,100,800,600); viewer.setUpViewInWindow(100,100,800,600);
osg::ref_ptr<osg::Program> program = createProgram(); osg::ref_ptr<osg::Program> program = createProgram();
osg::ref_ptr<osg::Geode> geode = CreateIcosahedron(program.get()); osg::ref_ptr<osg::Geode> geode = CreateIcosahedron(program.get());
osg::ref_ptr<osg::Uniform> tessInnerU = new osg::Uniform("TessLevelInner", 1.0f);
osg::ref_ptr<osg::Uniform> tessOuterU = new osg::Uniform("TessLevelOuter", 1.0f);
osg::StateSet *state; osg::StateSet *state;
state = geode->getOrCreateStateSet(); state = geode->getOrCreateStateSet();
state->addUniform(new osg::Uniform("AmbientMaterial",osg::Vec3(0.04f, 0.04f, 0.04f))); state->addUniform(new osg::Uniform("AmbientMaterial",osg::Vec3(0.04f, 0.04f, 0.04f)));
@@ -282,7 +229,7 @@ int main(int argc, char* argv[])
state->addUniform(tessOuterU.get()); state->addUniform(tessOuterU.get());
state->setAttribute(new osg::PatchParameter(3)); state->setAttribute(new osg::PatchParameter(3));
state->setAttribute(program.get()); state->setAttribute(program.get());
// switch on the uniforms that track the modelview and projection matrices // switch on the uniforms that track the modelview and projection matrices
osgViewer::Viewer::Windows windows; osgViewer::Viewer::Windows windows;
viewer.getWindows(windows); viewer.getWindows(windows);
@@ -294,8 +241,8 @@ int main(int argc, char* argv[])
s->setUseModelViewAndProjectionUniforms(true); s->setUseModelViewAndProjectionUniforms(true);
s->setUseVertexAttributeAliasing(true); s->setUseVertexAttributeAliasing(true);
} }
viewer.addEventHandler(new KeyboardEventHandler(tessInnerU, tessOuterU)); viewer.addEventHandler(new KeyboardEventHandler());
viewer.setSceneData(geode.get()); viewer.setSceneData(geode.get());
return viewer.run(); return viewer.run();
} }

View File

@@ -1,6 +1,6 @@
FILE(GLOB ui_files_1 "English.lproj/*.strings") FILE(GLOB ui_files_1 "English.lproj/*.strings")
FILE(GLOB ui_files_2 "English.lproj/MainMenu.nib/*.nib") FILE(GLOB ui_files_2 "English.lproj/MainMenu.nib/*.nib")
SET(TARGET_SRC ViewerCocoa.mm main.mm Info.plist ${ui_files_1} ${ui_files_2}) SET(TARGET_SRC ViewerCocoa.mm main.m Info.plist ${ui_files_1} ${ui_files_2})
SET(TARGET_EXTERNAL_LIBRARIES osg ${COCOA_LIBRARY}) SET(TARGET_EXTERNAL_LIBRARIES osg ${COCOA_LIBRARY})
SET_SOURCE_FILES_PROPERTIES(Info.plist PROPERTIES MACOSX_PACKAGE_LOCATION .) SET_SOURCE_FILES_PROPERTIES(Info.plist PROPERTIES MACOSX_PACKAGE_LOCATION .)

View File

@@ -17,7 +17,7 @@
*/ */
// //
// main.mm // main.m
// osgsimpleviewerCocoa // osgsimpleviewerCocoa
// //
// Created by Eric Wing on 11/13/06. // Created by Eric Wing on 11/13/06.

View File

@@ -1,19 +1,17 @@
SET(TARGET_SRC SET(TARGET_SRC
iphoneViewerAppDelegate.h iphoneViewerAppDelegate.h
iphoneViewerAppDelegate.mm iphoneViewerAppDelegate.mm
main.m main.m
osgPlugins.h osgPlugins.h
osgIPhoneViewer-Info.plist osgIPhoneViewer-Info.plist
) )
SET(TARGET_ADDED_LIBRARIES osgdb_osg osgdb_imageio osgdb_avfoundation) SET(TARGET_ADDED_LIBRARIES osgdb_osg osgdb_freetype osgdb_imageio)
#backup setting #backup setting
SET(TMP_OSG_BUILD_APPLICATION_BUNDLES {$OSG_BUILD_APPLICATION_BUNDLES}) SET(TMP_OSG_BUILD_APPLICATION_BUNDLES {$OSG_BUILD_APPLICATION_BUNDLES})
SET(OSG_BUILD_APPLICATION_BUNDLES TRUE) SET(OSG_BUILD_APPLICATION_BUNDLES TRUE)
SETUP_EXAMPLE(osgViewerIPhone) SETUP_EXAMPLE(osgViewerIPhone)
SET_TARGET_PROPERTIES(example_osgViewerIPhone PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer")
#restore setting #restore setting
SET(OSG_BUILD_APPLICATION_BUNDLES {$TMP_OSG_BUILD_APPLICATION_BUNDLES}) SET(OSG_BUILD_APPLICATION_BUNDLES {$TMP_OSG_BUILD_APPLICATION_BUNDLES})
SET(CMAKE_EXE_LINKER_FLAGS "-framework QuartzCore -framework Foundation -framework OpenGLES -framework UIKit -framework ImageIO -framework CoreImage -framework MobileCoreServices -framework CoreGraphics") SET(CMAKE_EXE_LINKER_FLAGS "-framework QuartzCore -framework Foundation -framework OpenGLES -framework UIKit")

View File

@@ -5,6 +5,7 @@
#include <osgDB/ReadFile> #include <osgDB/ReadFile>
#include <osg/MatrixTransform> #include <osg/MatrixTransform>
#include <osg/CameraNode>
#include <osgText/Text> #include <osgText/Text>
#include <osgViewer/Viewer> #include <osgViewer/Viewer>
@@ -16,7 +17,7 @@
UIWindow* _window; //main application window UIWindow* _window; //main application window
CADisplayLink* _displayLink; UIAccelerationValue accel[3];
osg::ref_ptr<osgViewer::Viewer> _viewer; osg::ref_ptr<osgViewer::Viewer> _viewer;
osg::ref_ptr<osg::MatrixTransform> _root; osg::ref_ptr<osg::MatrixTransform> _root;

View File

@@ -1,243 +1,39 @@
// Created by Thomas Hogarth 2009 //Created by Thomas Hogarth 2009
// cleaned up by Stephan Huber 2013
//
//This exampe shows how to render osg into an existing windw. Apple recommends apps only have one window on IPhone so this
// will be your best bet.
// //
// this example will create a fullscreen window showing a grey box. You can interact with it via
// multi-touch gestures.
#import "iphoneViewerAppDelegate.h" #import "iphoneViewerAppDelegate.h"
#include <osgGA/MultiTouchTrackballManipulator> #include <osgGA/TrackballManipulator>
#include <osg/ShapeDrawable> #include <osg/ShapeDrawable>
//inckude the iphone specific windowing stuff
//include the iphone specific windowing stuff
#include <osgViewer/api/IOS/GraphicsWindowIOS> #include <osgViewer/api/IOS/GraphicsWindowIOS>
#define kAccelerometerFrequency 30.0 // Hz
#define kFilteringFactor 0.1
@implementation iphoneViewerAppDelegate @implementation iphoneViewerAppDelegate
@synthesize _window; @synthesize _window;
osg::Camera* createHUD(unsigned int w, unsigned int h)
{
// create a camera to set up the projection and model view matrices, and the subgraph to draw in the HUD
osg::Camera* camera = new osg::Camera;
// set the projection matrix
camera->setProjectionMatrix(osg::Matrix::ortho2D(0,w,0,h));
// set the view matrix
camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
camera->setViewMatrix(osg::Matrix::identity());
// only clear the depth buffer
camera->setClearMask(GL_DEPTH_BUFFER_BIT);
// draw subgraph after main camera view.
camera->setRenderOrder(osg::Camera::POST_RENDER);
// we don't want the camera to grab event focus from the viewers main camera(s).
camera->setAllowEventFocus(false);
// add to this camera a subgraph to render
{
osg::Geode* geode = new osg::Geode();
std::string timesFont("fonts/arial.ttf");
// turn lighting off for the text and disable depth test to ensure it's always ontop.
osg::StateSet* stateset = geode->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
osg::Vec3 position(50.0f,h-50,0.0f);
{
osgText::Text* text = new osgText::Text;
geode->addDrawable( text );
text->setFont(timesFont);
text->setPosition(position);
text->setText("A simple multi-touch-example\n1 touch = rotate, \n2 touches = drag + scale, \n3 touches = home");
}
camera->addChild(geode);
}
return camera;
}
class TestMultiTouchEventHandler : public osgGA::GUIEventHandler {
public:
TestMultiTouchEventHandler(osg::Group* parent_group)
: osgGA::GUIEventHandler(),
_cleanupOnNextFrame(false)
{
createTouchRepresentations(parent_group, 10);
}
private:
void createTouchRepresentations(osg::Group* parent_group, unsigned int num_objects)
{
// create some geometry which is shown for every touch-point
for(unsigned int i = 0; i != num_objects; ++i)
{
std::ostringstream ss;
osg::Geode* geode = new osg::Geode();
osg::ShapeDrawable* drawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(0,0,0), 100));
drawable->setColor(osg::Vec4(0.5, 0.5, 0.5,1));
geode->addDrawable(drawable);
ss << "Touch " << i;
osgText::Text* text = new osgText::Text;
geode->addDrawable( text );
drawable->setDataVariance(osg::Object::DYNAMIC);
_drawables.push_back(drawable);
text->setFont("fonts/arial.ttf");
text->setPosition(osg::Vec3(110,0,0));
text->setText(ss.str());
_texts.push_back(text);
text->setDataVariance(osg::Object::DYNAMIC);
osg::MatrixTransform* mat = new osg::MatrixTransform();
mat->addChild(geode);
mat->setNodeMask(0x0);
_mats.push_back(mat);
parent_group->addChild(mat);
}
parent_group->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
}
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *)
{
switch(ea.getEventType())
{
case osgGA::GUIEventAdapter::FRAME:
if (_cleanupOnNextFrame) {
cleanup(0);
_cleanupOnNextFrame = false;
}
break;
case osgGA::GUIEventAdapter::PUSH:
case osgGA::GUIEventAdapter::DRAG:
case osgGA::GUIEventAdapter::RELEASE:
{
// is this a multi-touch event?
if (!ea.isMultiTouchEvent())
return false;
unsigned int j(0);
// iterate over all touch-points and update the geometry
unsigned num_touch_ended(0);
for(osgGA::GUIEventAdapter::TouchData::iterator i = ea.getTouchData()->begin(); i != ea.getTouchData()->end(); ++i, ++j)
{
const osgGA::GUIEventAdapter::TouchData::TouchPoint& tp = (*i);
_mats[j]->setMatrix(osg::Matrix::translate(tp.x, ea.getWindowHeight() - tp.y, 0));
_mats[j]->setNodeMask(0xffff);
std::ostringstream ss;
ss << "Touch " << tp.id;
_texts[j]->setText(ss.str());
switch (tp.phase)
{
case osgGA::GUIEventAdapter::TOUCH_BEGAN:
_drawables[j]->setColor(osg::Vec4(0,1,0,1));
std::cout << "touch began: " << ss.str() << std::endl;
break;
case osgGA::GUIEventAdapter::TOUCH_MOVED:
//std::cout << "touch moved: " << ss.str() << std::endl;
_drawables[j]->setColor(osg::Vec4(1,1,1,1));
break;
case osgGA::GUIEventAdapter::TOUCH_ENDED:
_drawables[j]->setColor(osg::Vec4(1,0,0,1));
std::cout << "touch ended: " << ss.str() << std::endl;
++num_touch_ended;
break;
case osgGA::GUIEventAdapter::TOUCH_STATIONERY:
_drawables[j]->setColor(osg::Vec4(0.8,0.8,0.8,1));
break;
default:
break;
}
}
// hide unused geometry
cleanup(j);
//check if all touches ended
if ((ea.getTouchData()->getNumTouchPoints() > 0) && (ea.getTouchData()->getNumTouchPoints() == num_touch_ended))
{
_cleanupOnNextFrame = true;
}
// reposition mouse-pointer
aa.requestWarpPointer((ea.getWindowX() + ea.getWindowWidth()) / 2.0, (ea.getWindowY() + ea.getWindowHeight()) / 2.0);
}
break;
default:
break;
}
return false;
}
void cleanup(unsigned int j)
{
for(unsigned k = j; k < _mats.size(); ++k) {
_mats[k]->setNodeMask(0x0);
}
}
std::vector<osg::ShapeDrawable*> _drawables;
std::vector<osg::MatrixTransform*> _mats;
std::vector<osgText::Text*> _texts;
bool _cleanupOnNextFrame;
};
// //
//Called once app has finished launching, create the viewer then realize. Can't call viewer->run as will //Called once app has finished launching, create the viewer then realize. Can't call viewer->run as will
//block the final inialization of the windowing system //block the final inialization of the windowing system
// //
- (void)applicationDidFinishLaunching:(UIApplication *)application { - (void)applicationDidFinishLaunching:(UIApplication *)application {
std::string test_string;
test_string = "huhu";
//get the screen size //get the screen size
CGRect lFrame = [[UIScreen mainScreen] bounds]; CGRect lFrame = [[UIScreen mainScreen] bounds];
unsigned int w = lFrame.size.width; unsigned int w = lFrame.size.width;
unsigned int h = lFrame.size.height; unsigned int h = lFrame.size.height;
//create the viewer
_viewer = new osgViewer::Viewer();
/*
// If you want full control over the graphics context / window creation, please uncomment this section
// create the main window at screen size // create the main window at screen size
self._window = [[UIWindow alloc] initWithFrame: lFrame]; self._window = [[UIWindow alloc] initWithFrame: lFrame];
@@ -245,7 +41,7 @@ private:
[_window makeKeyAndVisible]; [_window makeKeyAndVisible];
//create our graphics context directly so we can pass our own window //create our graphics context directly so we can pass our own window
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits; osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
// Init the Windata Variable that holds the handle for the Window to display OSG in. // Init the Windata Variable that holds the handle for the Window to display OSG in.
@@ -257,65 +53,97 @@ private:
traits->width = w; traits->width = w;
traits->height = h; traits->height = h;
traits->depth = 16; //keep memory down, default is currently 24 traits->depth = 16; //keep memory down, default is currently 24
//traits->alpha = 8;
//traits->stencil = 8;
traits->windowDecoration = false; traits->windowDecoration = false;
traits->doubleBuffer = true; traits->doubleBuffer = true;
traits->sharedContext = 0; traits->sharedContext = 0;
traits->setInheritedWindowPixelFormat = true; traits->setInheritedWindowPixelFormat = true;
traits->samples = 4; //traits->windowName = "osgViewer";
traits->sampleBuffers = 1;
traits->inheritedWindowData = windata; traits->inheritedWindowData = windata;
// Create the Graphics Context // Create the Graphics Context
osg::ref_ptr<osg::GraphicsContext> graphicsContext = osg::GraphicsContext::createGraphicsContext(traits.get()); osg::ref_ptr<osg::GraphicsContext> graphicsContext = osg::GraphicsContext::createGraphicsContext(traits.get());
// if the context was created then attach to our viewer //create the viewer
_viewer = new osgViewer::Viewer();
//if the context was created then attach to our viewer
if(graphicsContext) if(graphicsContext)
{ {
_viewer->getCamera()->setGraphicsContext(graphicsContext); _viewer->getCamera()->setGraphicsContext(graphicsContext);
_viewer->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width, traits->height)); _viewer->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
} }
*/
//create scene and attch to viewer
//create root //create root
_root = new osg::MatrixTransform(); _root = new osg::MatrixTransform();
//load and attach scene model //load and attach scene model
osg::ref_ptr<osg::Node> model = (osgDB::readNodeFile("hog.osg")); osg::ref_ptr<osg::Node> model = (osgDB::readNodeFile("hog.osg"));
if (model) { _root->addChild(model);
_root->addChild(model);
}
else {
osg::Geode* geode = new osg::Geode();
osg::ShapeDrawable* drawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(1,1,1), 1));
geode->addDrawable(drawable);
_root->addChild(geode);
}
osg::Camera* hud_camera = createHUD(w,h); osg::Geode* geode = new osg::Geode();
_root->addChild(hud_camera); osg::ShapeDrawable* drawable = new osg::ShapeDrawable(new osg::Box(osg::Vec3(1,1,1), 1));
geode->addDrawable(drawable);
_root->addChild(geode);
_viewer->setSceneData(_root.get());
_viewer->setCameraManipulator(new osgGA::MultiTouchTrackballManipulator());
_viewer->addEventHandler(new TestMultiTouchEventHandler(hud_camera));
// sun single-threaded //create and attach ortho camera for hud text
_viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded); osg::ref_ptr<osg::CameraNode> _hudCamera = new osg::CameraNode;
_viewer->realize(); // set the projection matrix
_hudCamera->setProjectionMatrix(osg::Matrix::ortho2D(0,w,0,h));
// render a frame so the window-manager shows some content and not only an empty + black window // set the view matrix
_viewer->frame(); _hudCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
_hudCamera->setViewMatrix(osg::Matrix::identity());
// only clear the depth buffer
_hudCamera->setClearMask(GL_DEPTH_BUFFER_BIT);
// create a display link, which will update our scene on every screen-refresh // draw subgraph after main camera view.
_displayLink = [application.keyWindow.screen displayLinkWithTarget:self selector:@selector(updateScene)]; _hudCamera->setRenderOrder(osg::CameraNode::POST_RENDER);
[_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode]; _root->addChild(_hudCamera.get());
//attcg text to hud
/*osg::ref_ptr<osgText::Text> text = new osgText::Text;
osg::ref_ptr<osg::Geode> textGeode = new osg::Geode();
osg::StateSet* stateset = textGeode->getOrCreateStateSet();
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
textGeode->addDrawable( text );
_hudCamera->addChild(textGeode.get());
std::string timesFont("arial.ttf");
osg::Vec3 position = osg::Vec3(w/2.0f, h/2.0f, 0.0f);
osg::Vec3 delta(0.0f,-120.0f,0.0f);
text->setFont(timesFont);
text->setCharacterSize(20.0,1.0);
text->setColor(osg::Vec4(0.8,0.8,0.8,1.0));
text->setPosition(position);
text->setMaximumHeight(480);
text->setMaximumWidth(320);
text->setAlignment(osgText::Text::CENTER_CENTER );
text->setText("It's a Hogs life...");*/
_viewer->setSceneData(_root.get());
_viewer->setCameraManipulator(new osgGA::TrackballManipulator);
_viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);//SingleThreaded DrawThreadPerContext
//
//_viewer->realize();
osg::setNotifyLevel(osg::DEBUG_FP);
[NSTimer scheduledTimerWithTimeInterval:1.0/30.0 target:self selector:@selector(updateScene) userInfo:nil repeats:YES];
//Configure and start accelerometer
[[UIAccelerometer sharedAccelerometer] setUpdateInterval:(1.0 / kAccelerometerFrequency)];
[[UIAccelerometer sharedAccelerometer] setDelegate:self];
} }
@@ -337,15 +165,21 @@ private:
} }
-(void)applicationWillTerminate:(UIApplication *)application { -(void)applicationWillTerminate:(UIApplication *)application{
if (_displayLink)
[_displayLink invalidate];
_displayLink = NULL;
_root = NULL; _root = NULL;
_viewer = NULL; _viewer = NULL;
} }
//
//Accelorometer
//
- (void)accelerometer:(UIAccelerometer*)accelerometer didAccelerate:(UIAcceleration*)acceleration
{
//Use a basic low-pass filter to only keep the gravity in the accelerometer values
accel[0] = acceleration.x * kFilteringFactor + accel[0] * (1.0 - kFilteringFactor);
accel[1] = acceleration.y * kFilteringFactor + accel[1] * (1.0 - kFilteringFactor);
accel[2] = acceleration.z * kFilteringFactor + accel[2] * (1.0 - kFilteringFactor);
}
- (void)dealloc { - (void)dealloc {

View File

@@ -14,6 +14,6 @@ USE_GRAPICSWINDOW_IMPLEMENTATION(IOS)
USE_OSGPLUGIN(osg) USE_OSGPLUGIN(osg)
USE_OSGPLUGIN(imageio) USE_OSGPLUGIN(imageio)
USE_OSGPLUGIN(avfoundation)
//USE_OSGPLUGIN(freetype) USE_OSGPLUGIN(freetype)

View File

@@ -97,8 +97,8 @@ void cOSG::InitCameraConfig(void)
// Create the Graphics Context // Create the Graphics Context
osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get()); osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
// Init Master Camera for this View // Init a new Camera (Master for this View)
osg::ref_ptr<osg::Camera> camera = mViewer->getCamera(); osg::ref_ptr<osg::Camera> camera = new osg::Camera;
// Assign Graphics Context to the Camera // Assign Graphics Context to the Camera
camera->setGraphicsContext(gc); camera->setGraphicsContext(gc);

View File

@@ -93,13 +93,7 @@ int main( int argc, char** argv )
{ {
osg::ArgumentParser arguments(&argc, argv); osg::ArgumentParser arguments(&argc, argv);
#if QT_VERSION >= 0x050000
// Qt5 is currently crashing and reporting "Cannot make QOpenGLContext current in a different thread" when the viewer is run multi-threaded, this is regression from Qt4
osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::SingleThreaded;
#else
osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext; osgViewer::ViewerBase::ThreadingModel threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext;
#endif
while (arguments.read("--SingleThreaded")) threadingModel = osgViewer::ViewerBase::SingleThreaded; while (arguments.read("--SingleThreaded")) threadingModel = osgViewer::ViewerBase::SingleThreaded;
while (arguments.read("--CullDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext; while (arguments.read("--CullDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext;
while (arguments.read("--DrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::DrawThreadPerContext; while (arguments.read("--DrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::DrawThreadPerContext;

View File

@@ -1115,8 +1115,7 @@ int main( int argc, char **argv )
if (image_3d.valid()) if (image_3d.valid())
{ {
image_3d->setFileName(name_no_ext + ".dds"); image_3d->setFileName(name_no_ext + ".dds");
osg::ref_ptr<osgDB::Options> options = new osgDB::Options("ddsNoAutoFlipWrite");; osgDB::writeImageFile(*image_3d, image_3d->getFileName());
osgDB::writeImageFile(*image_3d, image_3d->getFileName(), options.get());
} }
osgDB::writeNodeFile(*volume, outputFile); osgDB::writeNodeFile(*volume, outputFile);
} }

View File

@@ -20,8 +20,8 @@ extern "C" {
#define OPENTHREADS_MAJOR_VERSION 3 #define OPENTHREADS_MAJOR_VERSION 3
#define OPENTHREADS_MINOR_VERSION 2 #define OPENTHREADS_MINOR_VERSION 2
#define OPENTHREADS_PATCH_VERSION 1 #define OPENTHREADS_PATCH_VERSION 0
#define OPENTHREADS_SOVERSION 20 #define OPENTHREADS_SOVERSION 13
/** OpenThreadsGetVersion() returns the library version number. /** OpenThreadsGetVersion() returns the library version number.
* Numbering convention : OpenThreads-1.0 will return 1.0 from OpenThreadsGetVersion. */ * Numbering convention : OpenThreads-1.0 will return 1.0 from OpenThreadsGetVersion. */

View File

@@ -51,12 +51,6 @@ class BoundingBoxImpl
-FLT_MAX) -FLT_MAX)
{} {}
template<typename BT>
inline BoundingBoxImpl(const BoundingBoxImpl<BT>& bb) :
_min(bb._min),
_max(bb._max)
{}
/** Creates a bounding box initialized to the given extents. */ /** Creates a bounding box initialized to the given extents. */
inline BoundingBoxImpl(value_type xmin, value_type ymin, value_type zmin, inline BoundingBoxImpl(value_type xmin, value_type ymin, value_type zmin,
value_type xmax, value_type ymax, value_type zmax) : value_type xmax, value_type ymax, value_type zmax) :
@@ -79,9 +73,6 @@ class BoundingBoxImpl
-FLT_MAX); -FLT_MAX);
} }
inline bool operator == (const BoundingBoxImpl& rhs) const { return _min==rhs._min && _max==rhs._max; }
inline bool operator != (const BoundingBoxImpl& rhs) const { return _min!=rhs._min || _max!=rhs._max; }
/** Returns true if the bounding box extents are valid, false otherwise. */ /** Returns true if the bounding box extents are valid, false otherwise. */
inline bool valid() const inline bool valid() const
{ {
@@ -198,8 +189,7 @@ class BoundingBoxImpl
/** Expands this bounding box to include the given sphere. /** Expands this bounding box to include the given sphere.
* If this box is uninitialized, set it to include sh. */ * If this box is uninitialized, set it to include sh. */
template<typename BST> void expandBy(const BoundingSphereImpl<VT>& sh)
void expandBy(const BoundingSphereImpl<BST>& sh)
{ {
if (!sh.valid()) return; if (!sh.valid()) return;
@@ -237,15 +227,6 @@ class BoundingBoxImpl
(v.y()>=_min.y() && v.y()<=_max.y()) && (v.y()>=_min.y() && v.y()<=_max.y()) &&
(v.z()>=_min.z() && v.z()<=_max.z()); (v.z()>=_min.z() && v.z()<=_max.z());
} }
/** Returns true if this bounding box contains the specified coordinate allowing for specific epsilon. */
inline bool contains(const vec_type& v, value_type epsilon) const
{
return valid() &&
((v.x()+epsilon)>=_min.x() && (v.x()-epsilon)<=_max.x()) &&
((v.y()+epsilon)>=_min.y() && (v.y()-epsilon)<=_max.y()) &&
((v.z()+epsilon)>=_min.z() && (v.z()-epsilon)<=_max.z());
}
}; };
typedef BoundingBoxImpl<Vec3f> BoundingBoxf; typedef BoundingBoxImpl<Vec3f> BoundingBoxf;

View File

@@ -63,9 +63,6 @@ class BoundingSphereImpl
* otherwise. */ * otherwise. */
inline bool valid() const { return _radius>=0.0; } inline bool valid() const { return _radius>=0.0; }
inline bool operator == (const BoundingSphereImpl& rhs) const { return _center==rhs._center && _radius==rhs._radius; }
inline bool operator != (const BoundingSphereImpl& rhs) const { return _center!=rhs._center || _radius==rhs._radius; }
/** Set the bounding sphere to the given center/radius using floats. */ /** Set the bounding sphere to the given center/radius using floats. */
inline void set(const vec_type& center,value_type radius) inline void set(const vec_type& center,value_type radius)
{ {
@@ -113,13 +110,11 @@ class BoundingSphereImpl
/** Expands the sphere to encompass the given box. Repositions the /** Expands the sphere to encompass the given box. Repositions the
* sphere center to minimize the radius increase. */ * sphere center to minimize the radius increase. */
template<typename BBT> void expandBy(const BoundingBoxImpl<VT>& bb);
void expandBy(const BoundingBoxImpl<BBT>& bb);
/** Expands the sphere to encompass the given box. Does not /** Expands the sphere to encompass the given box. Does not
* repositions the sphere center. */ * repositions the sphere center. */
template<typename BBT> void expandRadiusBy(const BoundingBoxImpl<VT>& bb);
void expandRadiusBy(const BoundingBoxImpl<BBT>& bb);
/** Returns true if v is within the sphere. */ /** Returns true if v is within the sphere. */
inline bool contains(const vec_type& v) const inline bool contains(const vec_type& v) const
@@ -140,12 +135,12 @@ class BoundingSphereImpl
template<typename VT> template<typename VT>
template<typename vector_type> template<typename vector_type>
void BoundingSphereImpl<VT>::expandBy(const vector_type& v) void BoundingSphereImpl<VT>::expandBy(const vector_type& v)
{ {
if (valid()) if (valid())
{ {
vec_type dv = vec_type(v)-_center; vec_type dv = v-_center;
value_type r = dv.length(); value_type r = dv.length();
if (r>_radius) if (r>_radius)
{ {
@@ -162,12 +157,12 @@ void BoundingSphereImpl<VT>::expandBy(const vector_type& v)
} }
template<typename VT> template<typename VT>
template<typename vector_type> template<typename vector_type>
void BoundingSphereImpl<VT>::expandRadiusBy(const vector_type& v) void BoundingSphereImpl<VT>::expandRadiusBy(const vector_type& v)
{ {
if (valid()) if (valid())
{ {
value_type r = (vec_type(v)-_center).length(); value_type r = (v-_center).length();
if (r>_radius) _radius = r; if (r>_radius) _radius = r;
// else do nothing as vertex is within sphere. // else do nothing as vertex is within sphere.
} }
@@ -249,8 +244,7 @@ void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingSphereImpl& sh)
} }
template<typename VT> template<typename VT>
template<typename BBT> void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<VT>& bb)
void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<BBT>& bb)
{ {
if (bb.valid()) if (bb.valid())
{ {
@@ -280,8 +274,7 @@ void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<BBT>& bb)
} }
template<typename VT> template<typename VT>
template<typename BBT> void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingBoxImpl<VT>& bb)
void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingBoxImpl<BBT>& bb)
{ {
if (bb.valid()) if (bb.valid())
{ {

View File

@@ -27,7 +27,7 @@ inline void clampGEQUAL(T& value,const T minValue,const char* valueName)
{ {
if (value<minValue) if (value<minValue)
{ {
notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is below permitted minimum, clamping to "<<minValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is below permitted minimum, clampping to "<<minValue<<"."<< std::endl;
value = minValue; value = minValue;
} }
} }
@@ -40,7 +40,7 @@ inline void clampLEQUAL(T& value,const T maxValue,const char* valueName)
{ {
if (value>maxValue) if (value>maxValue)
{ {
notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is above permitted maximum, clamping to "<<maxValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is above permitted maximum, clampping to "<<maxValue<<"."<< std::endl;
value = maxValue; value = maxValue;
} }
} }
@@ -55,13 +55,13 @@ inline void clampBetweenRange(T& value,const T minValue,const T maxValue,const c
{ {
if (value<minValue) if (value<minValue)
{ {
notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is below permitted minimum, clamping to "<<minValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is below permitted minimum, clampping to "<<minValue<<"."<< std::endl;
value = minValue; value = minValue;
} }
else else
if (value>maxValue) if (value>maxValue)
{ {
notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is above permitted maximum, clamping to "<<maxValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<" of "<<value<<" is above permitted maximum, clampping to "<<maxValue<<"."<< std::endl;
value = maxValue; value = maxValue;
} }
@@ -75,7 +75,7 @@ inline void clampArrayElementGEQUAL(A& value,unsigned int i,const T minValue,con
{ {
if (value[i]<minValue) if (value[i]<minValue)
{ {
notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is below permitted minimum, clamping to "<<minValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is below permitted minimum, clampping to "<<minValue<<"."<< std::endl;
value[i] = minValue; value[i] = minValue;
} }
} }
@@ -88,7 +88,7 @@ inline void clampArrayElementLEQUAL(A& value,unsigned int i,const T maxValue,con
{ {
if (value[i]>maxValue) if (value[i]>maxValue)
{ {
notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is above permitted maximum, clamping to "<<maxValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is above permitted maximum, clampping to "<<maxValue<<"."<< std::endl;
value = maxValue; value = maxValue;
} }
} }
@@ -103,13 +103,13 @@ inline void clampArrayElementBetweenRange(A& value,unsigned int i,const T minVal
{ {
if (value[i]<minValue) if (value[i]<minValue)
{ {
notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is below permitted minimum, clamping to "<<minValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is below permitted minimum, clampping to "<<minValue<<"."<< std::endl;
value[i] = minValue; value[i] = minValue;
} }
else else
if (value[i]>maxValue) if (value[i]>maxValue)
{ {
notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is above permitted maximum, clamping to "<<maxValue<<"."<< std::endl; notify(WARN) << "Warning: "<<valueName<<"["<<i<<"] of "<<value[i]<<" is above permitted maximum, clampping to "<<maxValue<<"."<< std::endl;
value[i] = maxValue; value[i] = maxValue;
} }

View File

@@ -680,19 +680,6 @@ class OSG_EXPORT Camera : public Transform, public CullSettings
ref_ptr<DrawCallback> _finalDrawCallback; ref_ptr<DrawCallback> _finalDrawCallback;
}; };
/** Functor to assist with ordering camers in the order they should be rendered in.*/
struct CameraRenderOrderSortOp
{
inline bool operator() (const Camera* lhs,const Camera* rhs) const
{
if (lhs->getRenderOrder()<rhs->getRenderOrder()) return true;
if (rhs->getRenderOrder()<lhs->getRenderOrder()) return false;
return lhs->getRenderOrderNum()<rhs->getRenderOrderNum();
}
};
} }
#endif #endif

View File

@@ -418,11 +418,6 @@ namespace osg
void apply(State &state) const; void apply(State &state) const;
inline GLuint getHandle(unsigned int contextID) const
{
return _fboID[contextID];
}
enum BindTarget enum BindTarget
{ {
READ_FRAMEBUFFER = GL_READ_FRAMEBUFFER_EXT, READ_FRAMEBUFFER = GL_READ_FRAMEBUFFER_EXT,

View File

@@ -96,7 +96,7 @@
#endif #endif
// XXX This is from Win32's <ctype.h> // XXX This is from Win32's <ctype.h>
#if !defined(_WCHAR_T_DEFINED) && !(defined(__GNUC__)&&(__GNUC__ >2)) #if !defined(_WCHAR_T_DEFINED) && !(defined(__GNUC__)&&((__GNUC__ == 3)||(__GNUC__ == 4)))
typedef unsigned short wchar_t; typedef unsigned short wchar_t;
#define _WCHAR_T_DEFINED #define _WCHAR_T_DEFINED
#endif #endif

View File

@@ -385,6 +385,8 @@ typedef char GLchar;
#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6 #define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7 #define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8 #define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
#define GL_RED_SNORM 0x8F90
#define GL_RG_SNORM 0x8F91
#define GL_RGB_SNORM 0x8F92 #define GL_RGB_SNORM 0x8F92
#define GL_RGBA_SNORM 0x8F93 #define GL_RGBA_SNORM 0x8F93
#define GL_R8_SNORM 0x8F94 #define GL_R8_SNORM 0x8F94
@@ -400,14 +402,6 @@ typedef char GLchar;
#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E #define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
#endif #endif
#ifndef GL_RED_SNORM
#define GL_RED_SNORM 0x8F90
#endif
#ifndef GL_RG_SNORM
#define GL_RG_SNORM 0x8F91
#endif
#ifndef GL_VERSION_4_0 #ifndef GL_VERSION_4_0
#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C #define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D #define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D

View File

@@ -302,13 +302,13 @@ class OSG_EXPORT Image : public BufferData
* take care to access the data per row rather than treating the whole data as a single block. */ * take care to access the data per row rather than treating the whole data as a single block. */
inline const unsigned char* data() const { return _data; } inline const unsigned char* data() const { return _data; }
inline unsigned char* data(unsigned int column, unsigned int row = 0, unsigned int image = 0) inline unsigned char* data(int column, int row=0,int image=0)
{ {
if (!_data) return NULL; if (!_data) return NULL;
return _data+(column*getPixelSizeInBits())/8+row*getRowStepInBytes()+image*getImageSizeInBytes(); return _data+(column*getPixelSizeInBits())/8+row*getRowStepInBytes()+image*getImageSizeInBytes();
} }
inline const unsigned char* data(unsigned int column, unsigned int row = 0, unsigned int image = 0) const inline const unsigned char* data(int column, int row=0,int image=0) const
{ {
if (!_data) return NULL; if (!_data) return NULL;
return _data+(column*getPixelSizeInBits())/8+row*getRowStepInBytes()+image*getImageSizeInBytes(); return _data+(column*getPixelSizeInBits())/8+row*getRowStepInBytes()+image*getImageSizeInBytes();

View File

@@ -34,6 +34,10 @@ const double LN_2 = 0.69314718055994530942;
const double INVLN_2 = 1.0 / LN_2; const double INVLN_2 = 1.0 / LN_2;
/** return the minimum of two values, equivalent to std::min.
* std::min not used because of STL implementation under IRIX not
* containing std::min.
*/
template<typename T> template<typename T>
inline T absolute(T v) { return v<(T)0?-v:v; } inline T absolute(T v) { return v<(T)0?-v:v; }

View File

@@ -201,12 +201,7 @@ class OSG_EXPORT Node : public Object
/** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */ /** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */
inline void removeUpdateCallback(NodeCallback* nc) { inline void removeUpdateCallback(NodeCallback* nc) {
if (nc != NULL && _updateCallback.valid()) { if (nc != NULL && _updateCallback.valid()) {
if (_updateCallback == nc) if (_updateCallback == nc) setUpdateCallback(nc->getNestedCallback()); // replace the callback by the nested one
{
ref_ptr<NodeCallback> new_nested_callback = nc->getNestedCallback();
nc->setNestedCallback(0);
setUpdateCallback(new_nested_callback.get());
}
else _updateCallback->removeNestedCallback(nc); else _updateCallback->removeNestedCallback(nc);
} }
} }
@@ -236,12 +231,7 @@ class OSG_EXPORT Node : public Object
/** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */ /** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */
inline void removeEventCallback(NodeCallback* nc) { inline void removeEventCallback(NodeCallback* nc) {
if (nc != NULL && _eventCallback.valid()) { if (nc != NULL && _eventCallback.valid()) {
if (_eventCallback == nc) if (_eventCallback == nc) setEventCallback(nc->getNestedCallback()); // replace the callback by the nested one
{
ref_ptr<NodeCallback> new_nested_callback = nc->getNestedCallback();
nc->setNestedCallback(0);
setEventCallback(new_nested_callback.get()); // replace the callback by the nested one
}
else _eventCallback->removeNestedCallback(nc); else _eventCallback->removeNestedCallback(nc);
} }
} }
@@ -271,12 +261,7 @@ class OSG_EXPORT Node : public Object
/** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */ /** Convenience method that removes a given callback from a node, even if that callback is nested. There is no error return in case the given callback is not found. */
inline void removeCullCallback(NodeCallback* nc) { inline void removeCullCallback(NodeCallback* nc) {
if (nc != NULL && _cullCallback.valid()) { if (nc != NULL && _cullCallback.valid()) {
if (_cullCallback == nc) if (_cullCallback == nc) setCullCallback(nc->getNestedCallback()); // replace the callback by the nested one
{
ref_ptr<NodeCallback> new_nested_callback = nc->getNestedCallback();
nc->setNestedCallback(0);
setCullCallback(new_nested_callback.get()); // replace the callback by the nested one
}
else _cullCallback->removeNestedCallback(nc); else _cullCallback->removeNestedCallback(nc);
} }
} }

View File

@@ -1203,13 +1203,6 @@ class OSG_EXPORT State : public Referenced, public Observer
} }
/// For GL>=2.0 uses GL_MAX_TEXTURE_COORDS, for GL<2 uses GL_MAX_TEXTURE_UNITS
inline GLint getMaxTextureCoords() const { return _glMaxTextureCoords; }
/// For GL>=2.0 uses GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS, for GL<2 uses GL_MAX_TEXTURE_UNITS
inline GLint getMaxTextureUnits() const { return _glMaxTextureUnits; }
/** Set the current texture unit, return true if selected, /** Set the current texture unit, return true if selected,
* false if selection failed such as when multi texturing is not supported. * false if selection failed such as when multi texturing is not supported.
* note, only updates values that change.*/ * note, only updates values that change.*/
@@ -1336,6 +1329,11 @@ class OSG_EXPORT State : public Referenced, public Observer
if (_lastAppliedProgramObject!=program) if (_lastAppliedProgramObject!=program)
{ {
_lastAppliedProgramObject = program; _lastAppliedProgramObject = program;
if (program && _appliedProgramObjectSet.count(program)==0)
{
_appliedProgramObjectSet.insert(program);
program->addObserver(this);
}
} }
} }
inline const Program::PerContextProgram* getLastAppliedProgramObject() const { return _lastAppliedProgramObject; } inline const Program::PerContextProgram* getLastAppliedProgramObject() const { return _lastAppliedProgramObject; }

View File

@@ -305,25 +305,6 @@
#define GL_RGBA_INTEGER_MODE_EXT 0x8D9E #define GL_RGBA_INTEGER_MODE_EXT 0x8D9E
#endif #endif
#ifndef GL_VERSION_1_1
#define GL_R3_G3_B2 0x2A10
#define GL_RGB4 0x804F
#define GL_RGB5 0x8050
#define GL_RGB8 0x8051
#define GL_RGB10 0x8052
#define GL_RGB12 0x8053
#define GL_RGB16 0x8054
#define GL_RGBA2 0x8055
#define GL_RGBA4 0x8056
#define GL_RGB5_A1 0x8057
#define GL_RGBA8 0x8058
#define GL_RGB10_A2 0x8059
#define GL_RGBA12 0x805A
#define GL_RGBA16 0x805B
#define GL_BGR_EXT 0x80E0
#define GL_BGRA_EXT 0x80E1
#endif
#ifndef GL_ARB_texture_rg #ifndef GL_ARB_texture_rg
#define GL_RG 0x8227 #define GL_RG 0x8227
#define GL_RG_INTEGER 0x8228 #define GL_RG_INTEGER 0x8228

View File

@@ -20,7 +20,7 @@ extern "C" {
#define OPENSCENEGRAPH_MAJOR_VERSION 3 #define OPENSCENEGRAPH_MAJOR_VERSION 3
#define OPENSCENEGRAPH_MINOR_VERSION 2 #define OPENSCENEGRAPH_MINOR_VERSION 2
#define OPENSCENEGRAPH_PATCH_VERSION 2 #define OPENSCENEGRAPH_PATCH_VERSION 0
#define OPENSCENEGRAPH_SOVERSION 100 #define OPENSCENEGRAPH_SOVERSION 100
/* Convenience macro that can be used to decide whether a feature is present or not i.e. /* Convenience macro that can be used to decide whether a feature is present or not i.e.

View File

@@ -94,10 +94,6 @@ class ref_ptr
bool operator!() const { return _ptr==0; } // not required bool operator!() const { return _ptr==0; } // not required
bool valid() const { return _ptr!=0; } bool valid() const { return _ptr!=0; }
/** release the pointer from ownership by this ref_ptr<>, decrementing the objects refencedCount() via unref_nodelete() to prevent the Object
* object from being deleted even if the reference count goes to zero. Use when using a local ref_ptr<> to an Object that you want to return
* from a function/method via a C pointer, whilst preventing the normal ref_ptr<> destructor from cleaning up the object. When using release()
* you are implicitly expecting other code to take over managment of the object, otherwise a memory leak will result. */
T* release() { T* tmp=_ptr; if (_ptr) _ptr->unref_nodelete(); _ptr=0; return tmp; } T* release() { T* tmp=_ptr; if (_ptr) _ptr->unref_nodelete(); _ptr=0; return tmp; }
void swap(ref_ptr& rp) { T* tmp=_ptr; _ptr=rp._ptr; rp._ptr=tmp; } void swap(ref_ptr& rp) { T* tmp=_ptr; _ptr=rp._ptr; rp._ptr=tmp; }

View File

@@ -89,7 +89,6 @@ public:
// Serialization related functions // Serialization related functions
OutputStream& operator<<( bool b ) { _out->writeBool(b); return *this; } OutputStream& operator<<( bool b ) { _out->writeBool(b); return *this; }
OutputStream& operator<<( char c ) { _out->writeChar(c); return *this; } OutputStream& operator<<( char c ) { _out->writeChar(c); return *this; }
OutputStream& operator<<( signed char c) { _out->writeChar(c); return *this; }
OutputStream& operator<<( unsigned char c ) { _out->writeUChar(c); return *this; } OutputStream& operator<<( unsigned char c ) { _out->writeUChar(c); return *this; }
OutputStream& operator<<( short s ) { _out->writeShort(s); return *this; } OutputStream& operator<<( short s ) { _out->writeShort(s); return *this; }
OutputStream& operator<<( unsigned short s ) { _out->writeUShort(s); return *this; } OutputStream& operator<<( unsigned short s ) { _out->writeUShort(s); return *this; }

View File

@@ -21,7 +21,8 @@
namespace osgManipulator { namespace osgManipulator {
/** /**
* Translate plane dragger consists of a wireframe box representing a plane that can be dragged to translate along the plane. * Tab plane dragger consists of a plane with tabs on it's corners and edges
* for scaling. And the plane is used as a 2D translate dragger.
*/ */
class OSGMANIPULATOR_EXPORT TranslatePlaneDragger : public CompositeDragger class OSGMANIPULATOR_EXPORT TranslatePlaneDragger : public CompositeDragger
{ {

View File

@@ -38,7 +38,7 @@ class OSGSHADOW_EXPORT ShadowSettings : public osg::Object
void setComputeNearFarModeOverride(osg::CullSettings::ComputeNearFarMode cnfn) { _computeNearFearModeOverride = cnfn; } void setComputeNearFarModeOverride(osg::CullSettings::ComputeNearFarMode cnfn) { _computeNearFearModeOverride = cnfn; }
osg::CullSettings::ComputeNearFarMode getComputeNearFarModeOverride() const { return _computeNearFearModeOverride; } osg::CullSettings::ComputeNearFarMode getComputeNearFarModeOverride() const { return _computeNearFearModeOverride; }
/** Set the LightNum of the light in the scene to assign a shadow for. /** Set the LightNum of the light in the scene to assign a shadow for.
* Default value is -1, which signifies that shadow technique should automatically select an active light * Default value is -1, which signifies that shadow technique should automatically select an active light
* to assign a shadow, typically this will be the first active light found. */ * to assign a shadow, typically this will be the first active light found. */
@@ -67,7 +67,7 @@ class OSGSHADOW_EXPORT ShadowSettings : public osg::Object
void setMaximumShadowMapDistance(double distance) { _maximumShadowMapDistance = distance; } void setMaximumShadowMapDistance(double distance) { _maximumShadowMapDistance = distance; }
double getMaximumShadowMapDistance() const { return _maximumShadowMapDistance; } double getMaximumShadowMapDistance() const { return _maximumShadowMapDistance; }
enum ShadowMapProjectionHint enum ShadowMapProjectionHint
{ {
@@ -144,4 +144,4 @@ class OSGSHADOW_EXPORT ShadowSettings : public osg::Object
} }
#endif #endif

View File

@@ -51,7 +51,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
SKY_LIGHT = 0x2, SKY_LIGHT = 0x2,
COMPILE_GLOBJECTS_AT_INIT = 0x4, COMPILE_GLOBJECTS_AT_INIT = 0x4,
APPLY_GLOBAL_DEFAULTS = 0x8, APPLY_GLOBAL_DEFAULTS = 0x8,
CLEAR_GLOBAL_STATESET = 0x10, CLEAR_GLOBAL_STATESET = 0x16,
STANDARD_SETTINGS = HEADLIGHT | STANDARD_SETTINGS = HEADLIGHT |
COMPILE_GLOBJECTS_AT_INIT | COMPILE_GLOBJECTS_AT_INIT |
APPLY_GLOBAL_DEFAULTS | APPLY_GLOBAL_DEFAULTS |
@@ -495,7 +495,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
bool getAutomaticFlush() const { return _automaticFlush; } bool getAutomaticFlush() const { return _automaticFlush; }
void setResetColorMaskToAllOn(bool enable) { _resetColorMaskToAllEnabled = enable; } void setResetColorMaskToAllOn(bool enable) { _resetColorMaskToAllEnabled = enable; }
bool getResetColorMaskToAllOn() const { return _resetColorMaskToAllEnabled; } bool setResetColorMaskToAllOn() const { return _resetColorMaskToAllEnabled; }
protected: protected:

View File

@@ -207,7 +207,6 @@ class OSGUTIL_EXPORT StateGraph : public osg::Referenced
// use return path to trace back steps to sg_new. // use return path to trace back steps to sg_new.
std::vector<StateGraph*> return_path; std::vector<StateGraph*> return_path;
return_path.reserve(sg_new->_depth+1);
// need to pop back root render graph. // need to pop back root render graph.
do do
@@ -249,7 +248,6 @@ class OSGUTIL_EXPORT StateGraph : public osg::Referenced
// use return path to trace back steps to sg_new. // use return path to trace back steps to sg_new.
std::vector<StateGraph*> return_path; std::vector<StateGraph*> return_path;
return_path.reserve(sg_new->_depth+1);
// need to pop back up to the same depth as the curr state group. // need to pop back up to the same depth as the curr state group.
while (sg_new->_depth>sg_curr->_depth) while (sg_new->_depth>sg_curr->_depth)

View File

@@ -24,23 +24,23 @@
namespace osgViewer namespace osgViewer
{ {
class OSGVIEWER_EXPORT Keystone : public osg::Object class OSGVIEWER_EXPORT Keystone : public osg::Object
{ {
public: public:
Keystone(); Keystone();
Keystone(const Keystone& rhs, const osg::CopyOp& copop=osg::CopyOp::SHALLOW_COPY); Keystone(const Keystone& rhs, const osg::CopyOp& copop=osg::CopyOp::SHALLOW_COPY);
META_Object(osgViewer, Keystone) META_Object(osgViewer, Keystone)
void reset(); void reset();
Keystone& operator = (const Keystone& rhs); Keystone& operator = (const Keystone& rhs);
void setKeystoneEditingEnabled(bool flag) { keystoneEditingEnabled = flag; } void setKeystoneEditingEnabled(bool flag) { keystoneEditingEnabled = flag; }
bool getKeystoneEditingEnabled() const { return keystoneEditingEnabled; } bool getKeystoneEditingEnabled() const { return keystoneEditingEnabled; }
void setGridColor(const osg::Vec4& color) { gridColour = color; } void setGridColor(const osg::Vec4& color) { gridColour = color; }
osg::Vec4& getGridColor() { return gridColour; } osg::Vec4& getGridColor() { return gridColour; }
const osg::Vec4& getGridColor() const { return gridColour; } const osg::Vec4& getGridColor() const { return gridColour; }
@@ -61,23 +61,23 @@ public:
osg::Vec2d& getTopRight() { return top_right; } osg::Vec2d& getTopRight() { return top_right; }
const osg::Vec2d& getTopRight() const { return top_right; } const osg::Vec2d& getTopRight() const { return top_right; }
void compute3DPositions(osg::DisplaySettings* ds, osg::Vec3& tl, osg::Vec3& tr, osg::Vec3& br, osg::Vec3& bl) const; void compute3DPositions(osg::DisplaySettings* ds, osg::Vec3& tl, osg::Vec3& tr, osg::Vec3& br, osg::Vec3& bl) const;
osg::Geode* createKeystoneDistortionMesh(); osg::Geode* createKeystoneDistortionMesh();
osg::Node* createGrid(); osg::Node* createGrid();
/** Write the file specified by the "filename" user value field. Return true if file successfully written. */ /** Write the file specified by the "filename" user value field. Return true if file successfully written. */
bool writeToFile(); bool writeToFile();
/** convinience function that loads and assigns any keystone files specified in the DisplaySettings::KeystoneFileNames list, return true if Keystone's assigned to DisplaySettings.*/ /** convinience function that loads and assigns any keystone files specified in the DisplaySettings::KeystoneFileNames list, return true if Keystone's assigned to DisplaySettings.*/
static bool loadKeystoneFiles(osg::DisplaySettings* ds); static bool loadKeystoneFiles(osg::DisplaySettings* ds);
protected: protected:
bool keystoneEditingEnabled; bool keystoneEditingEnabled;
osg::Vec4 gridColour; osg::Vec4 gridColour;
@@ -91,8 +91,8 @@ protected:
protected: protected:
virtual ~Keystone() {} virtual ~Keystone() {}
}; };
class OSGVIEWER_EXPORT KeystoneHandler : public osgGA::GUIEventHandler class OSGVIEWER_EXPORT KeystoneHandler : public osgGA::GUIEventHandler
@@ -125,7 +125,7 @@ public:
osg::Vec2d incrementScale(const osgGA::GUIEventAdapter& ea) const; osg::Vec2d incrementScale(const osgGA::GUIEventAdapter& ea) const;
Region computeRegion(const osgGA::GUIEventAdapter& ea) const; Region computeRegion(const osgGA::GUIEventAdapter& ea) const;
void move(Region region, const osg::Vec2d& delta); void move(Region region, const osg::Vec2d& delta);
protected: protected:
@@ -138,7 +138,7 @@ protected:
osg::Vec2d _startPosition; osg::Vec2d _startPosition;
osg::ref_ptr<Keystone> _startControlPoints; osg::ref_ptr<Keystone> _startControlPoints;
Region _selectedRegion; Region _selectedRegion;
osg::ref_ptr<Keystone> _currentControlPoints; osg::ref_ptr<Keystone> _currentControlPoints;
@@ -146,4 +146,4 @@ protected:
} }
#endif #endif

View File

@@ -335,12 +335,6 @@ class OSGVIEWER_EXPORT ViewerBase : public virtual osg::Object
osg::ref_ptr<osgUtil::IncrementalCompileOperation> _incrementalCompileOperation; osg::ref_ptr<osgUtil::IncrementalCompileOperation> _incrementalCompileOperation;
osg::observer_ptr<osg::GraphicsContext> _currentContext; osg::observer_ptr<osg::GraphicsContext> _currentContext;
private:
// Define private copy constructor
// otherwsie VS2015 will construct it's own which will call the private copy operator from osg::Object resulting in an compile error.
ViewerBase& operator = (const ViewerBase&) { return *this; }
}; };
} }

View File

@@ -4,8 +4,8 @@ ADD_DEFINITIONS(-DOPENTHREADS_EXPORTS)
SET(OPENTHREADS_MAJOR_VERSION 3) SET(OPENTHREADS_MAJOR_VERSION 3)
SET(OPENTHREADS_MINOR_VERSION 2) SET(OPENTHREADS_MINOR_VERSION 2)
SET(OPENTHREADS_PATCH_VERSION 1) SET(OPENTHREADS_PATCH_VERSION 0)
SET(OPENTHREADS_SOVERSION 20) SET(OPENTHREADS_SOVERSION 13)
SET(OPENTHREADS_VERSION ${OPENTHREADS_MAJOR_VERSION}.${OPENTHREADS_MINOR_VERSION}.${OPENTHREADS_PATCH_VERSION}) SET(OPENTHREADS_VERSION ${OPENTHREADS_MAJOR_VERSION}.${OPENTHREADS_MINOR_VERSION}.${OPENTHREADS_PATCH_VERSION})

View File

@@ -149,30 +149,7 @@ private:
#endif #endif
#endif #endif
} }
#if defined(HAVE_PTHREAD_SETAFFINITY_NP) || defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY) || defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
else
{
// BUG-fix for linux:
// Each thread inherits the processor affinity mask from its parent thread.
// We need to explicitly set it to all CPUs, if no affinity was specified.
cpu_set_t cpumask;
CPU_ZERO( &cpumask );
for (int i = 0; i < OpenThreads::GetNumberOfProcessors(); ++i)
{
CPU_SET( i, &cpumask );
}
#if defined(HAVE_PTHREAD_SETAFFINITY_NP)
pthread_setaffinity_np( pthread_self(), sizeof(cpumask), &cpumask);
#elif defined(HAVE_THREE_PARAM_SCHED_SETAFFINITY)
sched_setaffinity( 0, sizeof(cpumask), &cpumask );
#elif defined(HAVE_TWO_PARAM_SCHED_SETAFFINITY)
sched_setaffinity( 0, &cpumask );
#endif
}
#endif
ThreadCleanupStruct tcs; ThreadCleanupStruct tcs;
tcs.thread = thread; tcs.thread = thread;

View File

@@ -15,7 +15,6 @@
#include <string.h> #include <string.h>
#include <osg/ApplicationUsage> #include <osg/ApplicationUsage>
#include <osg/Object>
#include <osg/Math> #include <osg/Math>
#include <osg/ref_ptr> #include <osg/ref_ptr>
@@ -34,8 +33,6 @@ ApplicationUsage* ApplicationUsage::instance()
return s_applicationUsage.get(); return s_applicationUsage.get();
} }
OSG_INIT_SINGLETON_PROXY(ApplicationUsageSingletonProxy, ApplicationUsage::instance())
void ApplicationUsage::addUsageExplanation(Type type,const std::string& option,const std::string& explanation) void ApplicationUsage::addUsageExplanation(Type type,const std::string& option,const std::string& explanation)
{ {
switch(type) switch(type)
@@ -72,7 +69,7 @@ void ApplicationUsage::addKeyboardMouseBinding(const std::string& prefix, int ke
{ {
std::ostringstream ostr; std::ostringstream ostr;
ostr<<prefix; ostr<<prefix;
if (key==' ') if (key==' ')
{ {
ostr<<"Space"; ostr<<"Space";

View File

@@ -225,26 +225,21 @@ void CollectOccludersVisitor::removeOccludedOccluders()
break; break;
} }
// now check all the holes in the occludee against the occluder, and remove the ones that won't be valid // now check all the holes in the occludee against the occluder,
unsigned int previous_valid_hole_i = 0; // do so in reverse order so that the iterators remain valid.
for(unsigned int i=0; i<holeList.size(); ++i) for(ShadowVolumeOccluder::HoleList::reverse_iterator holeItr=holeList.rbegin();
holeItr!=holeList.rend();
)
{ {
if (!occluder->contains(holeList[i].getReferenceVertexList())) if (occluder->contains((*holeItr).getReferenceVertexList()))
{ {
if (previous_valid_hole_i<i) holeList.erase((++holeItr).base());
{ }
// copy valid holes into gaps left by invalid ones else
holeList[previous_valid_hole_i] = holeList[i]; {
} ++holeItr;
previous_valid_hole_i++;
} }
}
// remove the tail of the holeList if holes have been removed.
if (previous_valid_hole_i<holeList.size())
{
holeList.erase(holeList.begin()+previous_valid_hole_i,holeList.end());
} }
} }

View File

@@ -105,8 +105,7 @@ FBOExtensions::FBOExtensions(unsigned int contextID)
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) #if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
_supported = _supported && _supported = _supported &&
glFramebufferTexture1D != 0 && glFramebufferTexture1D != 0 &&
glFramebufferTexture3D != 0 && glFramebufferTexture3D != 0;
isGLExtensionOrVersionSupported(contextID, "GL_EXT_framebuffer_object",3.0f);
#endif #endif
LOAD_FBO_EXT(glBlitFramebuffer); LOAD_FBO_EXT(glBlitFramebuffer);
@@ -914,19 +913,16 @@ void FrameBufferObject::apply(State &state, BindTarget target) const
ext->glBindFramebuffer(target, fboID); ext->glBindFramebuffer(target, fboID);
// enable drawing buffers to render the result to fbo // enable drawing buffers to render the result to fbo
if ( (target == READ_DRAW_FRAMEBUFFER) || (target == DRAW_FRAMEBUFFER) ) if (_drawBuffers.size() > 0)
{ {
if (_drawBuffers.size() > 0) GL2Extensions *gl2e = GL2Extensions::Get(state.getContextID(), true );
if (gl2e && gl2e->isDrawBuffersSupported())
{ {
GL2Extensions *gl2e = GL2Extensions::Get(state.getContextID(), true ); gl2e->glDrawBuffers(_drawBuffers.size(), &(_drawBuffers[0]));
if (gl2e && gl2e->isDrawBuffersSupported()) }
{ else
gl2e->glDrawBuffers(_drawBuffers.size(), &(_drawBuffers[0])); {
} OSG_WARN <<"Warning: FrameBufferObject: could not set draw buffers, glDrawBuffers is not supported!" << std::endl;
else
{
OSG_WARN <<"Warning: FrameBufferObject: could not set draw buffers, glDrawBuffers is not supported!" << std::endl;
}
} }
} }

View File

@@ -1427,7 +1427,7 @@ void Geometry::fixDeprecatedData()
case(PrimitiveSet::DrawArraysPrimitiveType): case(PrimitiveSet::DrawArraysPrimitiveType):
{ {
const DrawArrays* drawArray = static_cast<const DrawArrays*>(primitiveset); const DrawArrays* drawArray = static_cast<const DrawArrays*>(primitiveset);
numVertices += drawArray->getCount(); numVertices = drawArray->getCount();
break; break;
} }
case(PrimitiveSet::DrawArrayLengthsPrimitiveType): case(PrimitiveSet::DrawArrayLengthsPrimitiveType):
@@ -1439,6 +1439,7 @@ void Geometry::fixDeprecatedData()
{ {
unsigned int localNumVertices = *primItr; unsigned int localNumVertices = *primItr;
numVertices += localNumVertices; numVertices += localNumVertices;
primItr += localNumVertices;
} }
break; break;
} }
@@ -1539,8 +1540,7 @@ void Geometry::fixDeprecatedData()
// start the primitiveNum at -1 as we increment it the first time through when // start the primitiveNum at -1 as we increment it the first time through when
// we start processing the primitive sets. // we start processing the primitive sets.
int target_vindex = 0; int primitiveNum = -1;
int source_pindex = -1; // equals primitiveNum
for(PrimitiveSetList::iterator itr = _primitives.begin(); for(PrimitiveSetList::iterator itr = _primitives.begin();
itr != _primitives.end(); itr != _primitives.end();
++itr) ++itr)
@@ -1559,27 +1559,27 @@ void Geometry::fixDeprecatedData()
} }
// copy the vertex data across to the new arays // copy the vertex data across to the new arays
int source_pindex = -1;
int target_vindex = 0;
switch(primitiveset->getType()) switch(primitiveset->getType())
{ {
case(PrimitiveSet::DrawArraysPrimitiveType): case(PrimitiveSet::DrawArraysPrimitiveType):
{ {
if (primLength==0) primLength=primitiveset->getNumIndices(); if (primLength==0) primLength=primitiveset->getNumIndices();
DrawArrays* drawArray = static_cast<DrawArrays*>(primitiveset); const DrawArrays* drawArray = static_cast<const DrawArrays*>(primitiveset);
if (primLength==0) primLength = drawArray->getCount(); if (primLength==0) primLength = drawArray->getCount();
unsigned int primCount=0; unsigned int primCount=0;
unsigned int startindex=drawArray->getFirst(); unsigned int indexEnd = drawArray->getFirst()+drawArray->getCount();
drawArray->setFirst(target_vindex); for(unsigned int vindex=drawArray->getFirst();
unsigned int indexEnd = startindex+drawArray->getCount();
for(unsigned int vindex=startindex;
vindex<indexEnd; vindex<indexEnd;
++vindex, ++target_vindex, ++primCount) ++vindex, ++target_vindex, ++primCount)
{ {
if ((primCount%primLength)==0) ++source_pindex; if ((primCount%primLength)==0) ++source_pindex;
// copy bind per vertex from vindex // copy bind per primitive from primitiveNum
for(PtrList::iterator itr = perVertexPtrs.begin(); for(PtrList::iterator itr = perVertexPtrs.begin();
itr != perVertexPtrs.end(); itr != perVertexPtrs.end();
++itr) ++itr)
@@ -1593,7 +1593,7 @@ void Geometry::fixDeprecatedData()
} }
} }
// copy bind per primitive from source_pindex // copy bind per vertex from vindex
for(PtrList::iterator itr = perPrimitivePtrs.begin(); for(PtrList::iterator itr = perPrimitivePtrs.begin();
itr != perPrimitivePtrs.end(); itr != perPrimitivePtrs.end();
++itr) ++itr)
@@ -1611,22 +1611,23 @@ void Geometry::fixDeprecatedData()
} }
case(PrimitiveSet::DrawArrayLengthsPrimitiveType): case(PrimitiveSet::DrawArrayLengthsPrimitiveType):
{ {
DrawArrayLengths* drawArrayLengths = static_cast<DrawArrayLengths*>(primitiveset); const DrawArrayLengths* drawArrayLengths = static_cast<const DrawArrayLengths*>(primitiveset);
unsigned int vindex=drawArrayLengths->getFirst(); unsigned int vindex=drawArrayLengths->getFirst();
for(DrawArrayLengths::iterator primItr=drawArrayLengths->begin(); for(DrawArrayLengths::const_iterator primItr=drawArrayLengths->begin();
primItr!=drawArrayLengths->end(); primItr!=drawArrayLengths->end();
++primItr) ++primItr)
{ {
unsigned int localPrimLength; unsigned int localPrimLength;
if (primLength==0) localPrimLength=*primItr; if (primLength==0) localPrimLength=*primItr;
else localPrimLength=primLength; else localPrimLength=primLength;
drawArrayLengths->setFirst(target_vindex);
for(GLsizei primCount=0; for(GLsizei primCount=0;
primCount<*primItr; primCount<*primItr;
++vindex, ++target_vindex, ++primCount) ++vindex, ++target_vindex, ++primCount)
{ {
if ((primCount%localPrimLength)==0) ++source_pindex; if ((primCount%localPrimLength)==0) ++source_pindex;
// copy bind per vertex from vindex
// copy bind per primitive from primitiveNum
for(PtrList::iterator itr = perVertexPtrs.begin(); for(PtrList::iterator itr = perVertexPtrs.begin();
itr != perVertexPtrs.end(); itr != perVertexPtrs.end();
++itr) ++itr)
@@ -1640,7 +1641,7 @@ void Geometry::fixDeprecatedData()
} }
} }
// copy bind per primitive from source_pindex // copy bind per vertex from vindex
for(PtrList::iterator itr = perPrimitivePtrs.begin(); for(PtrList::iterator itr = perPrimitivePtrs.begin();
itr != perPrimitivePtrs.end(); itr != perPrimitivePtrs.end();
++itr) ++itr)
@@ -1661,17 +1662,16 @@ void Geometry::fixDeprecatedData()
{ {
if (primLength==0) primLength=primitiveset->getNumIndices(); if (primLength==0) primLength=primitiveset->getNumIndices();
DrawElementsUByte* drawElements = static_cast<DrawElementsUByte*>(primitiveset); const DrawElementsUByte* drawElements = static_cast<const DrawElementsUByte*>(primitiveset);
unsigned int primCount=0; unsigned int primCount=0;
for(DrawElementsUByte::iterator primItr=drawElements->begin(); for(DrawElementsUByte::const_iterator primItr=drawElements->begin();
primItr!=drawElements->end(); primItr!=drawElements->end();
++primCount, ++target_vindex, ++primItr) ++primCount, ++target_vindex, ++primItr)
{ {
if ((primCount%primLength)==0) ++source_pindex; if ((primCount%primLength)==0) ++source_pindex;
unsigned int vindex=*primItr; unsigned int vindex=*primItr;
*primItr=target_vindex;
// copy bind per vertex from vindex // copy bind per primitive from primitiveNum
for(PtrList::iterator itr = perVertexPtrs.begin(); for(PtrList::iterator itr = perVertexPtrs.begin();
itr != perVertexPtrs.end(); itr != perVertexPtrs.end();
++itr) ++itr)
@@ -1685,7 +1685,7 @@ void Geometry::fixDeprecatedData()
} }
} }
// copy bind per primitive from source_pindex // copy bind per vertex from vindex
for(PtrList::iterator itr = perPrimitivePtrs.begin(); for(PtrList::iterator itr = perPrimitivePtrs.begin();
itr != perPrimitivePtrs.end(); itr != perPrimitivePtrs.end();
++itr) ++itr)
@@ -1705,17 +1705,16 @@ void Geometry::fixDeprecatedData()
{ {
if (primLength==0) primLength=primitiveset->getNumIndices(); if (primLength==0) primLength=primitiveset->getNumIndices();
DrawElementsUShort* drawElements = static_cast<DrawElementsUShort*>(primitiveset); const DrawElementsUShort* drawElements = static_cast<const DrawElementsUShort*>(primitiveset);
unsigned int primCount=0; unsigned int primCount=0;
for(DrawElementsUShort::iterator primItr=drawElements->begin(); for(DrawElementsUShort::const_iterator primItr=drawElements->begin();
primItr!=drawElements->end(); primItr!=drawElements->end();
++primCount, ++target_vindex, ++primItr) ++primCount, ++target_vindex, ++primItr)
{ {
if ((primCount%primLength)==0) ++source_pindex; if ((primCount%primLength)==0) ++primitiveNum;
unsigned int vindex=*primItr; unsigned int vindex=*primItr;
*primItr=target_vindex;
// copy bind per vertex from vindex // copy bind per primitive from primitiveNum
for(PtrList::iterator itr = perVertexPtrs.begin(); for(PtrList::iterator itr = perVertexPtrs.begin();
itr != perVertexPtrs.end(); itr != perVertexPtrs.end();
++itr) ++itr)
@@ -1728,7 +1727,8 @@ void Geometry::fixDeprecatedData()
*target++ = *source++; *target++ = *source++;
} }
} }
// copy bind per primitive from source_pindex
// copy bind per vertex from vindex
for(PtrList::iterator itr = perPrimitivePtrs.begin(); for(PtrList::iterator itr = perPrimitivePtrs.begin();
itr != perPrimitivePtrs.end(); itr != perPrimitivePtrs.end();
++itr) ++itr)
@@ -1748,17 +1748,16 @@ void Geometry::fixDeprecatedData()
{ {
if (primLength==0) primLength=primitiveset->getNumIndices(); if (primLength==0) primLength=primitiveset->getNumIndices();
DrawElementsUInt* drawElements = static_cast<DrawElementsUInt*>(primitiveset); const DrawElementsUInt* drawElements = static_cast<const DrawElementsUInt*>(primitiveset);
unsigned int primCount=0; unsigned int primCount=0;
for(DrawElementsUInt::iterator primItr=drawElements->begin(); for(DrawElementsUInt::const_iterator primItr=drawElements->begin();
primItr!=drawElements->end(); primItr!=drawElements->end();
++primCount, ++target_vindex, ++primItr) ++primCount, ++target_vindex, ++primItr)
{ {
if ((primCount%primLength)==0) ++source_pindex; if ((primCount%primLength)==0) ++primitiveNum;
unsigned int vindex=*primItr; unsigned int vindex=*primItr;
*primItr=target_vindex;
// copy bind per vertex from vindex // copy bind per primitive from primitiveNum
for(PtrList::iterator itr = perVertexPtrs.begin(); for(PtrList::iterator itr = perVertexPtrs.begin();
itr != perVertexPtrs.end(); itr != perVertexPtrs.end();
++itr) ++itr)
@@ -1772,7 +1771,7 @@ void Geometry::fixDeprecatedData()
} }
} }
// copy bind per primitive from source_pindex // copy bind per vertex from vindex
for(PtrList::iterator itr = perPrimitivePtrs.begin(); for(PtrList::iterator itr = perPrimitivePtrs.begin();
itr != perPrimitivePtrs.end(); itr != perPrimitivePtrs.end();
++itr) ++itr)

View File

@@ -547,9 +547,6 @@ void GraphicsContext::close(bool callCloseImplementation)
} }
bool contextIDValid = _state.valid();
unsigned int contextID = _state.valid() ? _state->getContextID() : ~0U;
if (callCloseImplementation && _state.valid() && isRealized()) if (callCloseImplementation && _state.valid() && isRealized())
{ {
OSG_INFO<<"Closing still viable window "<<sharedContextExists<<" _state->getContextID()="<<_state->getContextID()<<std::endl; OSG_INFO<<"Closing still viable window "<<sharedContextExists<<" _state->getContextID()="<<_state->getContextID()<<std::endl;
@@ -560,14 +557,7 @@ void GraphicsContext::close(bool callCloseImplementation)
{ {
OSG_INFO<<"Doing delete of GL objects"<<std::endl; OSG_INFO<<"Doing delete of GL objects"<<std::endl;
_state->reset(); osg::deleteAllGLObjects(_state->getContextID());
// Kill the State now so all the (directly or indirectly) referenced GLObjects can make it into delete cache in time.
// That way osg::deleteAllGLObjects won't miss them and left them to be deleted afterwards in a new GraphicsContext
// that happens to have the same contextID (see SceneView::draw() and _requiresFlush flag).
_state = 0;
osg::deleteAllGLObjects(contextID);
OSG_INFO<<"Done delete of GL objects"<<std::endl; OSG_INFO<<"Done delete of GL objects"<<std::endl;
} }
@@ -577,10 +567,10 @@ void GraphicsContext::close(bool callCloseImplementation)
// which have already been deleted // which have already been deleted
osg::flushAllDeletedGLObjects(_state->getContextID()); osg::flushAllDeletedGLObjects(_state->getContextID());
_state->reset();
} }
_state->reset();
releaseContext(); releaseContext();
} }
else else
@@ -595,18 +585,18 @@ void GraphicsContext::close(bool callCloseImplementation)
// now discard any deleted deleted OpenGL objects that the are still hanging around - such as due to // now discard any deleted deleted OpenGL objects that the are still hanging around - such as due to
// the the flushDelete*() methods not being invoked, such as when using GraphicContextEmbedded where makeCurrent // the the flushDelete*() methods not being invoked, such as when using GraphicContextEmbedded where makeCurrent
// does not work. // does not work.
if ( !sharedContextExists && contextIDValid) if ( !sharedContextExists && _state.valid())
{ {
OSG_INFO<<"Doing discard of deleted OpenGL objects."<<std::endl; OSG_INFO<<"Doing discard of deleted OpenGL objects."<<std::endl;
osg::discardAllGLObjects(contextID); osg::discardAllGLObjects(_state->getContextID());
} }
if (contextIDValid) if (_state.valid())
{ {
decrementContextIDUsageCount(contextID); decrementContextIDUsageCount(_state->getContextID());
if (_state.valid()) _state = 0; _state = 0;
} }
} }
@@ -762,6 +752,18 @@ void GraphicsContext::removeAllOperations()
_operationsBlock->set(false); _operationsBlock->set(false);
} }
struct CameraRenderOrderSortOp
{
inline bool operator() (const Camera* lhs,const Camera* rhs) const
{
if (lhs->getRenderOrder()<rhs->getRenderOrder()) return true;
if (rhs->getRenderOrder()<lhs->getRenderOrder()) return false;
return lhs->getRenderOrderNum()<rhs->getRenderOrderNum();
}
};
void GraphicsContext::runOperations() void GraphicsContext::runOperations()
{ {
// sort the cameras into order // sort the cameras into order

View File

@@ -239,7 +239,7 @@ Image::Image(const Image& image,const CopyOp& copyop):
{ {
if (image._data) if (image._data)
{ {
unsigned int size = image.getTotalSizeInBytesIncludingMipmaps(); int size = image.getTotalSizeInBytesIncludingMipmaps();
setData(new unsigned char [size],USE_NEW_DELETE); setData(new unsigned char [size],USE_NEW_DELETE);
unsigned char* dest_ptr = _data; unsigned char* dest_ptr = _data;
for(DataIterator itr(&image); itr.valid(); ++itr) for(DataIterator itr(&image); itr.valid(); ++itr)
@@ -425,8 +425,6 @@ GLenum Image::computeFormatDataType(GLenum pixelFormat)
{ {
switch (pixelFormat) switch (pixelFormat)
{ {
case GL_R32F:
case GL_RG32F:
case GL_LUMINANCE32F_ARB: case GL_LUMINANCE32F_ARB:
case GL_LUMINANCE16F_ARB: case GL_LUMINANCE16F_ARB:
case GL_LUMINANCE_ALPHA32F_ARB: case GL_LUMINANCE_ALPHA32F_ARB:
@@ -468,8 +466,6 @@ GLenum Image::computeFormatDataType(GLenum pixelFormat)
case GL_RGBA: case GL_RGBA:
case GL_RGB: case GL_RGB:
case GL_RED:
case GL_RG:
case GL_LUMINANCE: case GL_LUMINANCE:
case GL_LUMINANCE_ALPHA: case GL_LUMINANCE_ALPHA:
case GL_ALPHA: return GL_UNSIGNED_BYTE; case GL_ALPHA: return GL_UNSIGNED_BYTE;
@@ -519,9 +515,6 @@ unsigned int Image::computeNumComponents(GLenum pixelFormat)
case(GL_ALPHA32UI_EXT): return 1; case(GL_ALPHA32UI_EXT): return 1;
case(GL_ALPHA16F_ARB): return 1; case(GL_ALPHA16F_ARB): return 1;
case(GL_ALPHA32F_ARB): return 1; case(GL_ALPHA32F_ARB): return 1;
case(GL_R32F): return 1;
case(GL_RG): return 2;
case(GL_RG32F): return 2;
case(GL_RGB): return 3; case(GL_RGB): return 3;
case(GL_BGR): return 3; case(GL_BGR): return 3;
case(GL_RGB8I_EXT): return 3; case(GL_RGB8I_EXT): return 3;
@@ -806,11 +799,7 @@ int Image::computeNumberOfMipmapLevels(int s,int t, int r)
{ {
int w = maximum(s, t); int w = maximum(s, t);
w = maximum(w, r); w = maximum(w, r);
return 1 + static_cast<int>(floor(logf(w)/logf(2.0f)));
int n = 0;
while (w >>= 1)
++n;
return n+1;
} }
bool Image::isCompressed() const bool Image::isCompressed() const
@@ -1521,18 +1510,16 @@ void Image::flipVertical()
{ {
if (!dxtc_tool::VerticalFlip(s,t,_pixelFormat,_data+_mipmapData[i])) if (!dxtc_tool::VerticalFlip(s,t,_pixelFormat,_data+_mipmapData[i]))
{ {
OSG_NOTICE << "Notice Image::flipVertical(): Vertical flip did not succeed" << std::endl; OSG_NOTICE << "Notice Image::flipVertical(): Vertical flip do not succeed" << std::endl;
} }
} }
else else
{ {
// it's not a compressed image, so implement flip ourselves. // its not a compressed image, so implement flip oursleves.
unsigned int mipRowSize = computeRowWidthInBytes(s, _pixelFormat, _dataType, _packing);
unsigned int mipRowStep = mipRowSize;
unsigned char* top = _data+_mipmapData[i]; unsigned char* top = _data+_mipmapData[i];
unsigned char* bottom = top + (t-1)*mipRowStep; unsigned char* bottom = top + (t-1)*rowStep;
flipImageVertical(top, bottom, mipRowSize, mipRowStep); flipImageVertical(top, bottom, rowSize, rowStep);
} }
} }
} }

View File

@@ -396,8 +396,17 @@ void ImageSequence::update(osg::NodeVisitor* nv)
if (startLoadIndex<0) startLoadIndex = 0; if (startLoadIndex<0) startLoadIndex = 0;
int endLoadIndex = int(preLoadTime/_timePerImage); int endLoadIndex = int(preLoadTime/_timePerImage);
if (looping && (endLoadIndex>=int(_imageDataList.size()))) endLoadIndex -= int(_imageDataList.size()); if (endLoadIndex>=int(_imageDataList.size()))
if (endLoadIndex>=int(_imageDataList.size())) endLoadIndex = int(_imageDataList.size())-1; {
if (looping)
{
endLoadIndex -= int(_imageDataList.size());
}
else
{
endLoadIndex = int(_imageDataList.size())-1;
}
}
if (endLoadIndex<0) endLoadIndex = 0; if (endLoadIndex<0) endLoadIndex = 0;
double requestTime = time; double requestTime = time;

View File

@@ -71,7 +71,7 @@ struct TriangleIndicesCollector
const osg::Vec3& v2 = (*(_buildKdTree->_kdTree.getVertices()))[p2]; const osg::Vec3& v2 = (*(_buildKdTree->_kdTree.getVertices()))[p2];
// discard degenerate points // discard degenerate points
if (v0==v1 || v1==v2 || v2==v0) if (v0==v1 || v1==v2 || v1==v2)
{ {
//OSG_NOTICE<<"Disgarding degenerate triangle"<<std::endl; //OSG_NOTICE<<"Disgarding degenerate triangle"<<std::endl;
return; return;

View File

@@ -29,7 +29,7 @@ namespace osg
class NullStreamBuffer : public std::streambuf class NullStreamBuffer : public std::streambuf
{ {
private: private:
std::streamsize xsputn(const std::streambuf::char_type * /*str*/, std::streamsize n) std::streamsize xsputn(const std::streambuf::char_type */*str*/, std::streamsize n)
{ {
return n; return n;
} }

View File

@@ -44,31 +44,17 @@ bool PointSprite::checkValidityOfAssociatedModes(osg::State& state) const
{ {
bool modeValid = isPointSpriteSupported(state.getContextID()); bool modeValid = isPointSpriteSupported(state.getContextID());
#if defined( OSG_GLES1_AVAILABLE ) //point sprites don't exist on es 2.0
state.setModeValidity(GL_POINT_SPRITE_OES, modeValid);
#else
state.setModeValidity(GL_POINT_SPRITE_ARB, modeValid); state.setModeValidity(GL_POINT_SPRITE_ARB, modeValid);
#endif
return modeValid; return modeValid;
} }
void PointSprite::apply(osg::State& state) const void PointSprite::apply(osg::State& state) const
{ {
#if defined( OSG_GL3_AVAILABLE ) #if defined( OSG_GL3_AVAILABLE )
const Point::Extensions* extensions = Point::getExtensions(state.getContextID(),true); const Point::Extensions* extensions = Point::getExtensions(state.getContextID(),true);
extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode); extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode);
#elif defined( OSG_GLES1_AVAILABLE ) //point sprites don't exist on es 2.0
if(!isPointSpriteSupported(state.getContextID())) return;
glTexEnvi(GL_POINT_SPRITE_OES, GL_COORD_REPLACE_OES, 1);
#elif defined( OSG_GL_FIXED_FUNCTION_AVAILABLE ) #elif defined( OSG_GL_FIXED_FUNCTION_AVAILABLE )
if(!isPointSpriteSupported(state.getContextID())) return; if(!isPointSpriteSupported(state.getContextID())) return;
glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, 1); glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, 1);
@@ -77,10 +63,8 @@ void PointSprite::apply(osg::State& state) const
if (extensions->isPointSpriteCoordOriginSupported()) if (extensions->isPointSpriteCoordOriginSupported())
extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode); extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode);
#else #else
OSG_NOTICE<<"Warning: PointSprite::apply(State&) - not supported."<<std::endl; OSG_NOTICE<<"Warning: PointSprite::apply(State&) - not supported."<<std::endl;
#endif #endif
} }
@@ -102,7 +86,7 @@ bool PointSprite::isPointSpriteSupported(unsigned int contextID)
if (!s_extensions[contextID].initialized) if (!s_extensions[contextID].initialized)
{ {
s_extensions[contextID].initialized = true; s_extensions[contextID].initialized = true;
s_extensions[contextID].supported = OSG_GL3_FEATURES || isGLExtensionSupported(contextID, "GL_ARB_point_sprite") || isGLExtensionSupported(contextID, "GL_OES_point_sprite") || isGLExtensionSupported(contextID, "GL_NV_point_sprite"); s_extensions[contextID].supported = OSG_GL3_FEATURES || isGLExtensionSupported(contextID, "GL_ARB_point_sprite") || isGLExtensionSupported(contextID, "GL_NV_point_sprite");
} }
return s_extensions[contextID].supported; return s_extensions[contextID].supported;

View File

@@ -68,22 +68,18 @@ PolygonMode::Mode PolygonMode::getMode(Face face) const
void PolygonMode::apply(State&) const void PolygonMode::apply(State&) const
{ {
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE) #ifdef OSG_GL1_AVAILABLE
if (_modeFront==_modeBack) if (_modeFront==_modeBack)
{ {
glPolygonMode(GL_FRONT_AND_BACK,(GLenum)_modeFront); glPolygonMode(GL_FRONT_AND_BACK,(GLenum)_modeFront);
} }
else else
{ {
#ifdef OSG_GL1_AVAILABLE glPolygonMode(GL_FRONT,(GLenum)_modeFront);
glPolygonMode(GL_FRONT,(GLenum)_modeFront); glPolygonMode(GL_BACK,(GLenum)_modeBack);
glPolygonMode(GL_BACK,(GLenum)_modeBack);
#else
OSG_NOTICE << "Warning: PolygonMode::apply(State&) - only GL_FRONT_AND_BACK is supported." << std::endl;
#endif
} }
#else #else
OSG_NOTICE << "Warning: PolygonMode::apply(State&) - is not supported." << std::endl; OSG_NOTICE<<"Warning: PolygonMode::apply(State&) - not supported."<<std::endl;
#endif #endif
} }

View File

@@ -674,7 +674,7 @@ void Program::PerContextProgram::linkProgram(osg::State& state)
_extensions->glGetProgramiv(_glProgramHandle, GL_ACTIVE_UNIFORM_BLOCKS, _extensions->glGetProgramiv(_glProgramHandle, GL_ACTIVE_UNIFORM_BLOCKS,
reinterpret_cast<GLint*>(&activeUniformBlocks)); reinterpret_cast<GLint*>(&activeUniformBlocks));
_extensions->glGetProgramiv(_glProgramHandle, _extensions->glGetProgramiv(_glProgramHandle,
GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH, GL_ACTIVE_UNIFORM_MAX_LENGTH,
&maxBlockNameLen); &maxBlockNameLen);
if (maxBlockNameLen > 0) if (maxBlockNameLen > 0)
{ {

View File

@@ -402,7 +402,7 @@ int Sequence::_getNextValue()
int _sbegin = osg::minimum(_ubegin,_uend); int _sbegin = osg::minimum(_ubegin,_uend);
int _send = osg::maximum(_ubegin,_uend); int _send = osg::maximum(_ubegin,_uend);
int v = _value + _step * static_cast<int>(osg::sign(_speed)); int v = _value + _step;
if (_sbegin==_send) if (_sbegin==_send)
{ {

View File

@@ -134,10 +134,25 @@ State::~State()
//_texCoordArrayList.clear(); //_texCoordArrayList.clear();
//_vertexAttribArrayList.clear(); //_vertexAttribArrayList.clear();
// OSG_NOTICE<<"State::~State()"<<this<<std::endl;
for(AppliedProgramObjectSet::iterator itr = _appliedProgramObjectSet.begin();
itr != _appliedProgramObjectSet.end();
++itr)
{
(*itr)->removeObserver(this);
}
} }
void State::objectDeleted(void* object) void State::objectDeleted(void* object)
{ {
const Program::PerContextProgram* ppcp = reinterpret_cast<const Program::PerContextProgram*>(object);
AppliedProgramObjectSet::iterator itr = _appliedProgramObjectSet.find(ppcp);
if (itr != _appliedProgramObjectSet.end())
{
// OSG_NOTICE<<"Removing _appliedProgramObjectSet entry "<<ppcp<<std::endl;
_appliedProgramObjectSet.erase(itr);
}
} }
void State::reset() void State::reset()
@@ -224,6 +239,17 @@ void State::reset()
_lastAppliedProgramObject = 0; _lastAppliedProgramObject = 0;
for(AppliedProgramObjectSet::iterator apitr=_appliedProgramObjectSet.begin();
apitr!=_appliedProgramObjectSet.end();
++apitr)
{
(*apitr)->resetAppliedUniforms();
(*apitr)->removeObserver(this);
}
_appliedProgramObjectSet.clear();
// what about uniforms??? need to clear them too... // what about uniforms??? need to clear them too...
// go through all active Unfirom's, setting to change to force update, // go through all active Unfirom's, setting to change to force update,
// the idea is to leave only the global defaults left. // the idea is to leave only the global defaults left.
@@ -458,18 +484,12 @@ void State::apply(const StateSet* dstate)
else if (unit<_textureAttributeMapList.size()) applyAttributeMapOnTexUnit(unit,_textureAttributeMapList[unit]); else if (unit<_textureAttributeMapList.size()) applyAttributeMapOnTexUnit(unit,_textureAttributeMapList[unit]);
} }
const Program::PerContextProgram* previousLastAppliedProgramObject = _lastAppliedProgramObject;
applyModeList(_modeMap,dstate->getModeList()); applyModeList(_modeMap,dstate->getModeList());
applyAttributeList(_attributeMap,dstate->getAttributeList()); applyAttributeList(_attributeMap,dstate->getAttributeList());
if (_shaderCompositionEnabled) if (_shaderCompositionEnabled)
{ {
if (previousLastAppliedProgramObject == _lastAppliedProgramObject || _lastAppliedProgramObject==0) applyShaderComposition();
{
// No program has been applied by the StateSet stack so assume shader composition is required
applyShaderComposition();
}
} }
if (dstate->getUniformList().empty()) if (dstate->getUniformList().empty())
@@ -891,10 +911,7 @@ void State::initializeExtensionProcs()
if ( osg::getGLVersionNumber() >= 2.0 || osg::isGLExtensionSupported(_contextID,"GL_ARB_vertex_shader") || OSG_GLES2_FEATURES) if ( osg::getGLVersionNumber() >= 2.0 || osg::isGLExtensionSupported(_contextID,"GL_ARB_vertex_shader") || OSG_GLES2_FEATURES)
{ {
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,&_glMaxTextureUnits); glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,&_glMaxTextureUnits);
if(OSG_GLES2_FEATURES) glGetIntegerv(GL_MAX_TEXTURE_COORDS,&_glMaxTextureCoords);
_glMaxTextureCoords = _glMaxTextureUnits;
else
glGetIntegerv(GL_MAX_TEXTURE_COORDS,&_glMaxTextureCoords);
} }
else if ( osg::getGLVersionNumber() >= 1.3 || else if ( osg::getGLVersionNumber() >= 1.3 ||
osg::isGLExtensionSupported(_contextID,"GL_ARB_multitexture") || osg::isGLExtensionSupported(_contextID,"GL_ARB_multitexture") ||
@@ -1305,9 +1322,6 @@ namespace State_Utils
{ {
bool replace(std::string& str, const std::string& original_phrase, const std::string& new_phrase) bool replace(std::string& str, const std::string& original_phrase, const std::string& new_phrase)
{ {
// Prevent infinite loop : if original_phrase is empty, do nothing and return false
if (original_phrase.empty()) return false;
bool replacedStr = false; bool replacedStr = false;
std::string::size_type pos = 0; std::string::size_type pos = 0;
while((pos=str.find(original_phrase, pos))!=std::string::npos) while((pos=str.find(original_phrase, pos))!=std::string::npos)
@@ -1346,6 +1360,9 @@ bool State::convertVertexShaderSourceToOsgBuiltIns(std::string& source) const
OSG_INFO<<"++Before Converted source "<<std::endl<<source<<std::endl<<"++++++++"<<std::endl; OSG_INFO<<"++Before Converted source "<<std::endl<<source<<std::endl<<"++++++++"<<std::endl;
// replace ftransform as it only works with built-ins
State_Utils::replace(source, "ftransform()", "gl_ModelViewProjectionMatrix * gl_Vertex");
// find the first legal insertion point for replacement declarations. GLSL requires that nothing // find the first legal insertion point for replacement declarations. GLSL requires that nothing
// precede a "#verson" compiler directive, so we must insert new declarations after it. // precede a "#verson" compiler directive, so we must insert new declarations after it.
std::string::size_type declPos = source.rfind( "#version " ); std::string::size_type declPos = source.rfind( "#version " );
@@ -1360,31 +1377,22 @@ bool State::convertVertexShaderSourceToOsgBuiltIns(std::string& source) const
declPos = 0; declPos = 0;
} }
if (_useModelViewAndProjectionUniforms) State_Utils::replaceAndInsertDeclaration(source, declPos, _vertexAlias._glName, _vertexAlias._osgName, _vertexAlias._declaration);
State_Utils::replaceAndInsertDeclaration(source, declPos, _normalAlias._glName, _normalAlias._osgName, _normalAlias._declaration);
State_Utils::replaceAndInsertDeclaration(source, declPos, _colorAlias._glName, _colorAlias._osgName, _colorAlias._declaration);
State_Utils::replaceAndInsertDeclaration(source, declPos, _secondaryColorAlias._glName, _secondaryColorAlias._osgName, _secondaryColorAlias._declaration);
State_Utils::replaceAndInsertDeclaration(source, declPos, _fogCoordAlias._glName, _fogCoordAlias._osgName, _fogCoordAlias._declaration);
for (size_t i=0; i<_texCoordAliasList.size(); i++)
{ {
// replace ftransform as it only works with built-ins const VertexAttribAlias& texCoordAlias = _texCoordAliasList[i];
State_Utils::replace(source, "ftransform()", "gl_ModelViewProjectionMatrix * gl_Vertex"); State_Utils::replaceAndInsertDeclaration(source, declPos, texCoordAlias._glName, texCoordAlias._osgName, texCoordAlias._declaration);
// replace built in uniform
State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ModelViewMatrix", "osg_ModelViewMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ModelViewProjectionMatrix", "osg_ModelViewProjectionMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ProjectionMatrix", "osg_ProjectionMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_NormalMatrix", "osg_NormalMatrix", "uniform mat3 ");
} }
if (_useVertexAttributeAliasing) // replace built in uniform
{ State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ModelViewMatrix", "osg_ModelViewMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, _vertexAlias._glName, _vertexAlias._osgName, _vertexAlias._declaration); State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ModelViewProjectionMatrix", "osg_ModelViewProjectionMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, _normalAlias._glName, _normalAlias._osgName, _normalAlias._declaration); State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_ProjectionMatrix", "osg_ProjectionMatrix", "uniform mat4 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, _colorAlias._glName, _colorAlias._osgName, _colorAlias._declaration); State_Utils::replaceAndInsertDeclaration(source, declPos, "gl_NormalMatrix", "osg_NormalMatrix", "uniform mat3 ");
State_Utils::replaceAndInsertDeclaration(source, declPos, _secondaryColorAlias._glName, _secondaryColorAlias._osgName, _secondaryColorAlias._declaration);
State_Utils::replaceAndInsertDeclaration(source, declPos, _fogCoordAlias._glName, _fogCoordAlias._osgName, _fogCoordAlias._declaration);
for (size_t i=0; i<_texCoordAliasList.size(); i++)
{
const VertexAttribAlias& texCoordAlias = _texCoordAliasList[i];
State_Utils::replaceAndInsertDeclaration(source, declPos, texCoordAlias._glName, texCoordAlias._osgName, texCoordAlias._declaration);
}
}
OSG_INFO<<"-------- Converted source "<<std::endl<<source<<std::endl<<"----------------"<<std::endl; OSG_INFO<<"-------- Converted source "<<std::endl<<source<<std::endl<<"----------------"<<std::endl;
@@ -1690,6 +1698,15 @@ void State::print(std::ostream& fout) const
} }
fout<<"}"<<std::endl; fout<<"}"<<std::endl;
#if 0
TextureModeMapList _textureModeMapList;
TextureAttributeMapList _textureAttributeMapList;
AppliedProgramObjectSet _appliedProgramObjectSet;
const Program::PerContextProgram* _lastAppliedProgramObject;
#endif
fout<<"StateSetStack _stateSetStack {"<<std::endl; fout<<"StateSetStack _stateSetStack {"<<std::endl;
for(StateSetStack::const_iterator itr = _stateStateStack.begin(); for(StateSetStack::const_iterator itr = _stateStateStack.begin();
itr != _stateStateStack.end(); itr != _stateStateStack.end();

View File

@@ -54,7 +54,6 @@ class TextureGLModeSet
_textureModeSet.insert(GL_TEXTURE_CUBE_MAP); _textureModeSet.insert(GL_TEXTURE_CUBE_MAP);
_textureModeSet.insert(GL_TEXTURE_RECTANGLE_NV); _textureModeSet.insert(GL_TEXTURE_RECTANGLE_NV);
_textureModeSet.insert(GL_TEXTURE_2D_ARRAY_EXT); _textureModeSet.insert(GL_TEXTURE_2D_ARRAY_EXT);
_textureModeSet.insert(GL_TEXTURE_2D_MULTISAMPLE);
_textureModeSet.insert(GL_TEXTURE_GEN_Q); _textureModeSet.insert(GL_TEXTURE_GEN_Q);
_textureModeSet.insert(GL_TEXTURE_GEN_R); _textureModeSet.insert(GL_TEXTURE_GEN_R);
@@ -275,32 +274,6 @@ int StateSet::compare(const StateSet& rhs,bool compareAttributeContents) const
if (_textureAttributeList.size()<rhs._textureAttributeList.size()) return -1; if (_textureAttributeList.size()<rhs._textureAttributeList.size()) return -1;
if (_textureAttributeList.size()>rhs._textureAttributeList.size()) return 1; if (_textureAttributeList.size()>rhs._textureAttributeList.size()) return 1;
if (_textureModeList.size()<rhs._textureModeList.size()) return -1;
if (_textureModeList.size()>rhs._textureModeList.size()) return 1;
if (_attributeList.size()<rhs._attributeList.size()) return -1;
if (_attributeList.size()>rhs._attributeList.size()) return 1;
if (_modeList.size()<rhs._modeList.size()) return -1;
if (_modeList.size()>rhs._modeList.size()) return 1;
if (_uniformList.size()<rhs._uniformList.size()) return -1;
if (_uniformList.size()>rhs._uniformList.size()) return 1;
// check render bin details
if ( _binMode < rhs._binMode ) return -1;
else if ( _binMode > rhs._binMode ) return 1;
if ( _binMode != INHERIT_RENDERBIN_DETAILS )
{
if ( _binNum < rhs._binNum ) return -1;
else if ( _binNum > rhs._binNum ) return 1;
if ( _binName < rhs._binName ) return -1;
else if ( _binName > rhs._binName ) return 1;
}
for(unsigned int ai=0;ai<_textureAttributeList.size();++ai) for(unsigned int ai=0;ai<_textureAttributeList.size();++ai)
{ {
const AttributeList& rhs_attributeList = _textureAttributeList[ai]; const AttributeList& rhs_attributeList = _textureAttributeList[ai];
@@ -400,6 +373,10 @@ int StateSet::compare(const StateSet& rhs,bool compareAttributeContents) const
// we've got here so attributes must be equal... // we've got here so attributes must be equal...
if (_textureModeList.size()<rhs._textureModeList.size()) return -1;
if (_textureModeList.size()>rhs._textureModeList.size()) return 1;
// check to see how the modes compare. // check to see how the modes compare.
// first check the rest of the texture modes // first check the rest of the texture modes
for(unsigned int ti=0;ti<_textureModeList.size();++ti) for(unsigned int ti=0;ti<_textureModeList.size();++ti)
@@ -464,6 +441,20 @@ int StateSet::compare(const StateSet& rhs,bool compareAttributeContents) const
} }
else if (rhs_uniform_itr == rhs._uniformList.end()) return 1; else if (rhs_uniform_itr == rhs._uniformList.end()) return 1;
// check render bin details
if ( _binMode < rhs._binMode ) return -1;
else if ( _binMode > rhs._binMode ) return 1;
if ( _binMode != INHERIT_RENDERBIN_DETAILS )
{
if ( _binNum < rhs._binNum ) return -1;
else if ( _binNum > rhs._binNum ) return 1;
if ( _binName < rhs._binName ) return -1;
else if ( _binName > rhs._binName ) return 1;
}
return 0; return 0;
} }

View File

@@ -2351,7 +2351,7 @@ bool Texture::isHardwareMipmapGenerationEnabled(const State& state) const
const FBOExtensions* fbo_ext = FBOExtensions::instance(contextID,true); const FBOExtensions* fbo_ext = FBOExtensions::instance(contextID,true);
if (fbo_ext->isSupported() && fbo_ext->glGenerateMipmap) if (fbo_ext->glGenerateMipmap)
{ {
return true; return true;
} }
@@ -2368,8 +2368,7 @@ Texture::GenerateMipmapMode Texture::mipmapBeforeTexImage(const State& state, bo
return GENERATE_MIPMAP; return GENERATE_MIPMAP;
#else #else
FBOExtensions* fbo_ext = FBOExtensions::instance(state.getContextID(),true); bool useGenerateMipMap = FBOExtensions::instance(state.getContextID(), true)->glGenerateMipmap!=0;
bool useGenerateMipMap = fbo_ext->isSupported() && fbo_ext->glGenerateMipmap;
if (useGenerateMipMap) if (useGenerateMipMap)
{ {
@@ -2441,7 +2440,7 @@ void Texture::generateMipmap(State& state) const
osg::FBOExtensions* fbo_ext = osg::FBOExtensions::instance(state.getContextID(), true); osg::FBOExtensions* fbo_ext = osg::FBOExtensions::instance(state.getContextID(), true);
// check if the function is supported // check if the function is supported
if (fbo_ext->isSupported() && fbo_ext->glGenerateMipmap) if (fbo_ext->glGenerateMipmap)
{ {
textureObject->bind(); textureObject->bind();
fbo_ext->glGenerateMipmap(textureObject->target()); fbo_ext->glGenerateMipmap(textureObject->target());

View File

@@ -32,16 +32,15 @@ Texture2DArray::Texture2DArray(const Texture2DArray& text,const CopyOp& copyop):
Texture(text,copyop), Texture(text,copyop),
_textureWidth(text._textureWidth), _textureWidth(text._textureWidth),
_textureHeight(text._textureHeight), _textureHeight(text._textureHeight),
_textureDepth(0), _textureDepth(text._textureDepth),
_numMipmapLevels(text._numMipmapLevels), _numMipmapLevels(text._numMipmapLevels),
_subloadCallback(text._subloadCallback) _subloadCallback(text._subloadCallback)
{ {
setTextureDepth(text._textureDepth);
// copy all images by iterating through all of them // copy all images by iterating through all of them
for (int i=0; i < text._textureDepth; i++) for (int i=0; i < text._textureDepth; i++)
{ {
setImage(i, copyop(text._images[i].get())); setImage(i, copyop(text._images[i].get()));
_modifiedCount.push_back(ImageModifiedCount());
} }
} }
@@ -250,7 +249,7 @@ void Texture2DArray::apply(State& state) const
// compute the dimensions of the texture. // compute the dimensions of the texture.
computeRequiredTextureDimensions(state, *image, new_width, new_height, new_numMipmapLevels); computeRequiredTextureDimensions(state, *image, new_width, new_height, new_numMipmapLevels);
if (!textureObject->match(GL_TEXTURE_2D_ARRAY_EXT, new_numMipmapLevels, _internalFormat, new_width, new_height, _textureDepth, _borderWidth)) if (!textureObject->match(GL_TEXTURE_2D_ARRAY_EXT, new_numMipmapLevels, _internalFormat, new_width, new_height, 1, _borderWidth))
{ {
Texture::releaseTextureObject(contextID, _textureObjectBuffer[contextID].get()); Texture::releaseTextureObject(contextID, _textureObjectBuffer[contextID].get());
_textureObjectBuffer[contextID] = 0; _textureObjectBuffer[contextID] = 0;

View File

@@ -48,15 +48,14 @@ TransferFunction1D::TransferFunction1D(const TransferFunction1D& tf, const CopyO
TransferFunction(tf,copyop) TransferFunction(tf,copyop)
{ {
allocate(tf.getNumberImageCells()); allocate(tf.getNumberImageCells());
assign(tf._colorMap); assign(_colorMap);
} }
void TransferFunction1D::allocate(unsigned int numX) void TransferFunction1D::allocate(unsigned int numX)
{ {
_image = new osg::Image; _image = new osg::Image;
_image->allocateImage(numX,1,1,GL_RGBA, GL_FLOAT); _image->allocateImage(numX,1,1,GL_RGBA, GL_FLOAT);
if (!_colorMap.empty()) assign(_colorMap);
updateImage();
} }
void TransferFunction1D::clear(const osg::Vec4& color) void TransferFunction1D::clear(const osg::Vec4& color)
@@ -178,7 +177,7 @@ osg::Vec4 TransferFunction1D::getColor(float v) const
void TransferFunction1D::assign(const ColorMap& newColours) void TransferFunction1D::assign(const ColorMap& newColours)
{ {
if (&_colorMap != &newColours) _colorMap = newColours; _colorMap = newColours;
updateImage(); updateImage();
} }

View File

@@ -2153,7 +2153,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2& m2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2.Matrix2::base_class::set( &((*_floatArray)[j]) ); m2.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2161,7 +2161,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3& m3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3.Matrix3::base_class::set( &((*_floatArray)[j]) ); m3.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2177,7 +2177,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x3& m2x3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x3) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2x3.Matrix2x3::base_class::set( &((*_floatArray)[j]) ); m2x3.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2185,7 +2185,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x4& m2x4 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x4) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x4) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2x4.Matrix2x4::base_class::set( &((*_floatArray)[j]) ); m2x4.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2193,7 +2193,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x2& m3x2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x2) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3x2.Matrix3x2::base_class::set( &((*_floatArray)[j]) ); m3x2.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2201,7 +2201,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x4& m3x4 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x4) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x4) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3x4.Matrix3x4::base_class::set( &((*_floatArray)[j]) ); m3x4.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2209,7 +2209,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x2& m4x2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x2) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m4x2.Matrix4x2::base_class::set( &((*_floatArray)[j]) ); m4x2.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2217,7 +2217,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x3& m4x3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x3) ) return false; if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m4x3.Matrix4x3::base_class::set( &((*_floatArray)[j]) ); m4x3.base_class::set( &((*_floatArray)[j]) );
return true; return true;
} }
@@ -2263,7 +2263,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2d& m2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2.Matrix2d::base_class::set( &((*_doubleArray)[j]) ); m2.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2271,7 +2271,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3d& m3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3.Matrix3d::base_class::set( &((*_doubleArray)[j]) ); m3.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2291,7 +2291,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x3d& m2x3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x3) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2x3.Matrix2x3d::base_class::set( &((*_doubleArray)[j]) ); m2x3.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2299,7 +2299,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x4d& m2x4 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x4) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x4) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m2x4.Matrix2x4d::base_class::set( &((*_doubleArray)[j]) ); m2x4.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2307,7 +2307,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x2d& m3x2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x2) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3x2.Matrix3x2d::base_class::set( &((*_doubleArray)[j]) ); m3x2.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2315,7 +2315,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x4d& m3x4 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x4) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x4) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m3x4.Matrix3x4d::base_class::set( &((*_doubleArray)[j]) ); m3x4.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2323,7 +2323,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x2d& m4x2 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x2) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x2) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m4x2.Matrix4x2d::base_class::set( &((*_doubleArray)[j]) ); m4x2.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }
@@ -2331,7 +2331,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x3d& m4x3 ) const
{ {
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x3) ) return false; if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x3) ) return false;
unsigned int j = index * getTypeNumComponents(getType()); unsigned int j = index * getTypeNumComponents(getType());
m4x3.Matrix4x3d::base_class::set( &((*_doubleArray)[j]) ); m4x3.base_class::set( &((*_doubleArray)[j]) );
return true; return true;
} }

View File

@@ -150,4 +150,4 @@ const GLubyte* gluErrorString(GLenum errorCode)
return (const GLubyte *) 0; return (const GLubyte *) 0;
} }
} // end of namespace osg } // end of namespace osg

View File

@@ -908,11 +908,10 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height,
for (j = 0; j < newwidth; j++) { for (j = 0; j < newwidth; j++) {
for (k = 0; k < components; k++) { for (k = 0; k < components; k++) {
/* need to cast to double to hold large unsigned ints */ /* need to cast to double to hold large unsigned ints */
GLdouble buf = (double)*(const GLuint*)t + s[0] = ((double)*(const GLuint*)t +
(double)*(const GLuint*)(t+group_size) + (double)*(const GLuint*)(t+group_size) +
(double)*(const GLuint*)(t+ysize) + (double)*(const GLuint*)(t+ysize) +
(double)*(const GLuint*)(t+ysize+group_size); (double)*(const GLuint*)(t+ysize+group_size))/4 + 0.5;
s[0] = (GLuint)(buf/4.0 + 0.5);
s++; t += element_size; s++; t += element_size;
} }
@@ -926,11 +925,12 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height,
for (j = 0; j < newwidth; j++) { for (j = 0; j < newwidth; j++) {
for (k = 0; k < components; k++) { for (k = 0; k < components; k++) {
/* need to cast to double to hold large unsigned ints */ /* need to cast to double to hold large unsigned ints */
GLdouble buf = (GLdouble)__GLU_SWAP_4_BYTES(t) + GLdouble buf;
(GLdouble)__GLU_SWAP_4_BYTES(t+group_size) + buf = (GLdouble)__GLU_SWAP_4_BYTES(t) +
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize) + (GLdouble)__GLU_SWAP_4_BYTES(t+group_size) +
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize+group_size); (GLdouble)__GLU_SWAP_4_BYTES(t+ysize) +
s[0] = (GLuint)(buf/4.0 + 0.5); (GLdouble)__GLU_SWAP_4_BYTES(t+ysize+group_size);
s[0] = (GLuint)(buf/4 + 0.5);
s++; t += element_size; s++; t += element_size;
} }

View File

@@ -107,13 +107,7 @@ bool Animation::update (double time, int priority)
{ {
case ONCE: case ONCE:
if (t > _originalDuration) if (t > _originalDuration)
{
for (ChannelList::const_iterator chan = _channels.begin();
chan != _channels.end(); ++chan)
(*chan)->update(_originalDuration, _weight, priority);
return false; return false;
}
break; break;
case STAY: case STAY:
if (t > _originalDuration) if (t > _originalDuration)

View File

@@ -41,7 +41,7 @@ void LinkVisitor::link(AnimationUpdateCallbackBase* cb)
result += cb->link(_animations[i].get()); result += cb->link(_animations[i].get());
_nbLinkedTarget += result; _nbLinkedTarget += result;
} }
OSG_DEBUG << "LinkVisitor links " << result << " for \"" << cb->getName() << '"' << std::endl; OSG_NOTICE << "LinkVisitor links " << result << " for \"" << cb->getName() << '"' << std::endl;
} }
void LinkVisitor::handle_stateset(osg::StateSet* stateset) void LinkVisitor::handle_stateset(osg::StateSet* stateset)

View File

@@ -109,7 +109,7 @@ void RigGeometry::buildVertexInfluenceSet()
_vertexInfluenceSet.buildVertex2BoneList(); _vertexInfluenceSet.buildVertex2BoneList();
_vertexInfluenceSet.buildUniqVertexSetToBoneSetList(); _vertexInfluenceSet.buildUniqVertexSetToBoneSetList();
OSG_DEBUG << "uniq groups " << _vertexInfluenceSet.getUniqVertexSetToBoneSetList().size() << " for " << getName() << std::endl; OSG_NOTICE << "uniq groups " << _vertexInfluenceSet.getUniqVertexSetToBoneSetList().size() << " for " << getName() << std::endl;
} }
void RigGeometry::computeMatrixFromRootSkeleton() void RigGeometry::computeMatrixFromRootSkeleton()

View File

@@ -152,7 +152,7 @@ RigTransformHardware::BoneWeightAttribList RigTransformHardware::createVertexAtt
arrayList.resize(nbArray); arrayList.resize(nbArray);
for (int i = 0; i < nbArray; i++) for (int i = 0; i < nbArray; i++)
{ {
osg::ref_ptr<osg::Vec4Array> array = new osg::Vec4Array(osg::Array::BIND_PER_VERTEX); osg::ref_ptr<osg::Vec4Array> array = new osg::Vec4Array;
arrayList[i] = array; arrayList[i] = array;
int nbVertexes = getNumVertexes(); int nbVertexes = getNumVertexes();
array->resize(nbVertexes); array->resize(nbVertexes);

View File

@@ -18,7 +18,8 @@ using namespace osgAnimation;
StackedTransform::StackedTransform() {} StackedTransform::StackedTransform() {}
StackedTransform::StackedTransform(const StackedTransform& rhs, const osg::CopyOp& co) StackedTransform::StackedTransform(const StackedTransform& rhs, const osg::CopyOp& co):
osg::MixinVector<osg::ref_ptr<StackedTransformElement> >(rhs)
{ {
reserve(rhs.size()); reserve(rhs.size());
for (StackedTransform::const_iterator it = rhs.begin(); it != rhs.end(); ++it) for (StackedTransform::const_iterator it = rhs.begin(); it != rhs.end(); ++it)

View File

@@ -7,7 +7,7 @@ IF (DYNAMIC_OPENSCENEGRAPH)
IF(OSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS) IF(OSG_PLUGIN_SEARCH_INSTALL_DIR_FOR_PLUGINS)
# Add a default plugin search path component # Add a default plugin search path component
ADD_DEFINITIONS(-DOSG_DEFAULT_LIBRARY_PATH=\"${CMAKE_INSTALL_PREFIX}/lib${LIB_POSTFIX}/${OSG_PLUGINS}\") ADD_DEFINITIONS(-DOSG_DEFAULT_LIBRARY_PATH=${CMAKE_INSTALL_PREFIX}/lib${LIB_POSTFIX}/${OSG_PLUGINS})
ENDIF() ENDIF()
# Set the library extension according to what configuration is being built. # Set the library extension according to what configuration is being built.
@@ -124,7 +124,7 @@ SET(TARGET_SRC
IF(APPLE AND NOT ANDROID) IF(APPLE AND NOT ANDROID)
IF(NOT OSG_BUILD_PLATFORM_IPHONE AND NOT OSG_BUILD_PLATFORM_IPHONE_SIMULATOR) IF(NOT OSG_BUILD_PLATFORM_IPHONE AND NOT OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
# Needs CoreFoundation calls and a Carbon function # Needs CoreFoundation calls and a Carbon function
SET(OSGDB_PLATFORM_SPECIFIC_LIBRARIES ${CARBON_LIBRARY} ${COCOA_LIBRARY}) SET(OSGDB_PLATFORM_SPECIFIC_LIBRARIES ${CARBON_LIBRARY})
ENDIF() ENDIF()
IF(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX STREQUAL "quicktime") IF(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX STREQUAL "quicktime")

View File

@@ -209,13 +209,8 @@ bool osgDB::makeDirectory( const std::string &path )
if( mkdir( dir.c_str(), 0755 )< 0 ) if( mkdir( dir.c_str(), 0755 )< 0 )
#endif #endif
{ {
// Only return an error if the directory actually doesn't exist. It's possible that the directory was created OSG_DEBUG << "osgDB::makeDirectory(): " << strerror(errno) << std::endl;
// by another thread or process return false;
if (!osgDB::fileExists(dir))
{
OSG_DEBUG << "osgDB::makeDirectory(): " << strerror(errno) << std::endl;
return false;
}
} }
paths.pop(); paths.pop();
} }
@@ -505,7 +500,7 @@ static void appendInstallationLibraryFilePaths(osgDB::FilePathList& filepath)
#ifdef OSG_DEFAULT_LIBRARY_PATH #ifdef OSG_DEFAULT_LIBRARY_PATH
// Append the install prefix path to the library search path if configured // Append the install prefix path to the library search path if configured
filepath.push_back(OSG_DEFAULT_LIBRARY_PATH); filepath.push_back(ADDQUOTES(OSG_DEFAULT_LIBRARY_PATH));
#endif #endif
} }

View File

@@ -639,7 +639,7 @@ osg::Image* InputStream::readImage(bool readFromExternal)
image = new osg::Image; image = new osg::Image;
image->setOrigin( (osg::Image::Origin)origin ); image->setOrigin( (osg::Image::Origin)origin );
image->setImage( s, t, r, internalFormat, pixelFormat, dataType, image->setImage( s, t, r, internalFormat, pixelFormat, dataType,
(unsigned char*)data, osg::Image::USE_NEW_DELETE, packing ); (unsigned char*)data, (osg::Image::AllocationMode)mode, packing );
} }
// _mipmapData // _mipmapData

View File

@@ -379,9 +379,6 @@ ObjectWrapperManager::ObjectWrapperManager()
glTable.add( "GL_LIGHT6", GL_LIGHT6 ); glTable.add( "GL_LIGHT6", GL_LIGHT6 );
glTable.add( "GL_LIGHT7", GL_LIGHT7 ); glTable.add( "GL_LIGHT7", GL_LIGHT7 );
glTable.add("GL_VERTEX_PROGRAM_POINT_SIZE", GL_VERTEX_PROGRAM_POINT_SIZE);
glTable.add("GL_VERTEX_PROGRAM_TWO_SIDE", GL_VERTEX_PROGRAM_TWO_SIDE);
// Functions // Functions
glTable.add( "NEVER", GL_NEVER ); glTable.add( "NEVER", GL_NEVER );
glTable.add( "LESS", GL_LESS ); glTable.add( "LESS", GL_LESS );

View File

@@ -19,7 +19,6 @@
#include <osgDB/ObjectWrapper> #include <osgDB/ObjectWrapper>
#include <fstream> #include <fstream>
#include <sstream> #include <sstream>
#include <stdlib.h>
using namespace osgDB; using namespace osgDB;

View File

@@ -414,7 +414,7 @@ Registry::Registry()
addFileExtensionAlias("cid", "freetype"); // Postscript CID-Fonts addFileExtensionAlias("cid", "freetype"); // Postscript CID-Fonts
addFileExtensionAlias("cff", "freetype"); // OpenType addFileExtensionAlias("cff", "freetype"); // OpenType
addFileExtensionAlias("cef", "freetype"); // OpenType addFileExtensionAlias("cef", "freetype"); // OpenType
addFileExtensionAlias("fon", "freetype"); // Windows bitmap fonts addFileExtensionAlias("fon", "freetype"); // Windows bitmap fonts
addFileExtensionAlias("fnt", "freetype"); // Windows bitmap fonts addFileExtensionAlias("fnt", "freetype"); // Windows bitmap fonts
addFileExtensionAlias("text3d", "freetype"); // use 3D Font instead of 2D Font addFileExtensionAlias("text3d", "freetype"); // use 3D Font instead of 2D Font
@@ -1040,7 +1040,7 @@ std::string Registry::findDataFileImplementation(const std::string& filename, co
if(fileExists(simpleFileName)) if(fileExists(simpleFileName))
{ {
OSG_DEBUG << "FindFileInPath(" << filename << "): returning " << simpleFileName << std::endl; OSG_DEBUG << "FindFileInPath(" << filename << "): returning " << filename << std::endl;
return simpleFileName; return simpleFileName;
} }
@@ -1249,21 +1249,9 @@ ReaderWriter::ReadResult Registry::readImplementation(const ReadFunctor& readFun
ReaderWriter::ReadResult rr = read(readFunctor); ReaderWriter::ReadResult rr = read(readFunctor);
if (rr.validObject()) if (rr.validObject())
{ {
// search AGAIN for entry in the object cache. // update cache with new entry.
{ OSG_INFO<<"Adding to object cache "<<file<<std::endl;
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_objectCacheMutex); addEntryToObjectCache(file,rr.getObject());
ObjectCache::iterator oitr = _objectCache.find(file);
if (oitr != _objectCache.end())
{
OSG_INFO << "returning cached instanced of " << file << std::endl;
if (readFunctor.isValid(oitr->second.first.get())) return ReaderWriter::ReadResult(oitr->second.first.get(), ReaderWriter::ReadResult::FILE_LOADED_FROM_CACHE);
else return ReaderWriter::ReadResult("Error file does not contain an osg::Object");
}
// update cache with new entry.
OSG_INFO<<"Adding to object cache "<<file<<std::endl;
//addEntryToObjectCache(file,rr.getObject()); //copy implementation: we already have the _objectCacheMutex lock
_objectCache[file] = ObjectTimeStampPair(rr.getObject(), 0.0);
}
} }
else else
{ {

View File

@@ -49,12 +49,10 @@ std::string osgDB::trimEnclosingSpaces(const std::string& str)
{ {
if (str.empty()) return str; if (str.empty()) return str;
const std::string whitespaces(" \t\f\v\n\r"); std::string::size_type start = str.find_first_not_of(' ');
std::string::size_type start = str.find_first_not_of(whitespaces);
if (start==std::string::npos) return std::string(); if (start==std::string::npos) return std::string();
std::string::size_type end = str.find_last_not_of(whitespaces); std::string::size_type end = str.find_last_not_of(' ');
if (end==std::string::npos) return std::string(); if (end==std::string::npos) return std::string();
return std::string(str, start, (end-start)+1); return std::string(str, start, (end-start)+1);

View File

@@ -275,7 +275,7 @@ bool NodeTrackerManipulator::performMovementLeftMouseButton( const double eventT
} else } else
rotateTrackball( _ga_t0->getXnormalized(), _ga_t0->getYnormalized(), rotateTrackball( _ga_t0->getXnormalized(), _ga_t0->getYnormalized(),
_ga_t1->getXnormalized(), _ga_t1->getYnormalized(), _ga_t1->getXnormalized(), _ga_t1->getYnormalized(),
getThrowScale( eventTimeDelta ) ); _thrown ? float( _delta_frame_time / eventTimeDelta ) : 1.f );
return true; return true;
} }

View File

@@ -379,12 +379,12 @@ void OrbitManipulator::OrbitAnimationData::start( const osg::Vec3d& movement, co
Scale parameter is useful, for example, when manipulator is thrown. Scale parameter is useful, for example, when manipulator is thrown.
It scales the amount of rotation based, for example, on the current frame time.*/ It scales the amount of rotation based, for example, on the current frame time.*/
void OrbitManipulator::rotateTrackball( const float px0, const float py0, void OrbitManipulator::rotateTrackball( const float px0, const float py0,
const float px1, const float py1, const float scale ) const float px1, const float py1, const float /*scale*/ )
{ {
osg::Vec3d axis; osg::Vec3d axis;
float angle; float angle;
trackball( axis, angle, px0 + (px1-px0)*scale, py0 + (py1-py0)*scale, px0, py0 ); trackball( axis, angle, px1, py1, px0, py0 );
Quat new_rotate; Quat new_rotate;
new_rotate.makeRotate( angle, axis ); new_rotate.makeRotate( angle, axis );

View File

@@ -154,8 +154,6 @@ bool StandardManipulator::isAnimating() const
/// Finishes the animation by performing a step that moves it to its final position. /// Finishes the animation by performing a step that moves it to its final position.
void StandardManipulator::finishAnimation() void StandardManipulator::finishAnimation()
{ {
_thrown = false;
if( !isAnimating() ) if( !isAnimating() )
return; return;
@@ -588,12 +586,7 @@ void StandardManipulator::setAllowThrow( bool allowThrow )
events that started the animation.*/ events that started the animation.*/
float StandardManipulator::getThrowScale( const double eventTimeDelta ) const float StandardManipulator::getThrowScale( const double eventTimeDelta ) const
{ {
if( _thrown ) if( _thrown ) return float( _delta_frame_time / eventTimeDelta );
{
if (eventTimeDelta == 0.f)
return 0.f;
return float( _delta_frame_time / eventTimeDelta );
}
else return 1.f; else return 1.f;
} }

View File

@@ -31,7 +31,6 @@
#include <map> #include <map>
#include <iostream> #include <iostream>
#include <sstream> #include <sstream>
#include <limits>
#include <assert.h> #include <assert.h>
using namespace std; using namespace std;
@@ -239,7 +238,6 @@ ReaderWriter3DS::ReaderWriter3DS()
//supportsOption("OutputTextureFiles","Write out the texture images to file"); //supportsOption("OutputTextureFiles","Write out the texture images to file");
//supportsOption("flipTexture", "flip texture upside-down"); //supportsOption("flipTexture", "flip texture upside-down");
supportsOption("extended3dsFilePaths", "(Write option) Keeps long texture filenames (not 8.3) when exporting 3DS, but can lead to compatibility problems."); supportsOption("extended3dsFilePaths", "(Write option) Keeps long texture filenames (not 8.3) when exporting 3DS, but can lead to compatibility problems.");
supportsOption("preserveMaterialNames", "(Write option) Preserve original material names, up to 64 characters. This can lead to compatibility problems.");
supportsOption("noMatrixTransforms", "(Read option) Set the plugin to apply matrices into the mesh vertices (\"old behaviour\") instead of restoring them (\"new behaviour\"). You may use this option to avoid a few rounding errors."); supportsOption("noMatrixTransforms", "(Read option) Set the plugin to apply matrices into the mesh vertices (\"old behaviour\") instead of restoring them (\"new behaviour\"). You may use this option to avoid a few rounding errors.");
supportsOption("checkForEspilonIdentityMatrices", "(Read option) If not set, then consider \"almost identity\" matrices to be identity ones (in case of rounding errors)."); supportsOption("checkForEspilonIdentityMatrices", "(Read option) If not set, then consider \"almost identity\" matrices to be identity ones (in case of rounding errors).");
supportsOption("restoreMatrixTransformsNoMeshes", "(Read option) Makes an exception to the behaviour when 'noMatrixTransforms' is not set for mesh instances. When a mesh instance has a transform on it, the reader creates a MatrixTransform above the Geode. If you don't want the hierarchy to be modified, then you can use this option to merge the transform into vertices."); supportsOption("restoreMatrixTransformsNoMeshes", "(Read option) Makes an exception to the behaviour when 'noMatrixTransforms' is not set for mesh instances. When a mesh instance has a transform on it, the reader creates a MatrixTransform above the Geode. If you don't want the hierarchy to be modified, then you can use this option to merge the transform into vertices.");
@@ -865,7 +863,7 @@ struct RemappedFace
{ {
Lib3dsFace* face; // Original face definition. Lib3dsFace* face; // Original face definition.
osg::Vec3f normal; osg::Vec3f normal;
unsigned int index[3]; // Indices to OSG vertex/normal/texcoord arrays. unsigned short index[3]; // Indices to OSG vertex/normal/texcoord arrays.
}; };
struct VertexParams struct VertexParams
@@ -885,14 +883,6 @@ static bool isFaceValid(const Lib3dsMesh* mesh, const Lib3dsFace* face)
face->index[2] < mesh->nvertices; face->index[2] < mesh->nvertices;
} }
bool isNumber(float x)
{
// This looks like it should always be true,
// but it's false if x is a NaN.
return (x == x);
}
/* ChrisD: addVertex handles the averaging of normals and spltting of vertices /* ChrisD: addVertex handles the averaging of normals and spltting of vertices
required to implement normals for smoothing groups. When a shared required to implement normals for smoothing groups. When a shared
vertex is encountered when smoothing is required, normals are added vertex is encountered when smoothing is required, normals are added
@@ -905,7 +895,7 @@ bool isNumber(float x)
static void addVertex( static void addVertex(
const Lib3dsMesh* mesh, const Lib3dsMesh* mesh,
RemappedFace& remappedFace, RemappedFace& remappedFace,
unsigned int i, unsigned short int i,
osg::Geometry* geometry, osg::Geometry* geometry,
std::vector<int>& origToNewMapping, std::vector<int>& origToNewMapping,
std::vector<int>& splitVertexChain, std::vector<int>& splitVertexChain,
@@ -915,7 +905,7 @@ static void addVertex(
osg::Vec3Array* normals = (osg::Vec3Array*)geometry->getNormalArray(); osg::Vec3Array* normals = (osg::Vec3Array*)geometry->getNormalArray();
osg::Vec2Array* texCoords = (osg::Vec2Array*)geometry->getTexCoordArray(0); osg::Vec2Array* texCoords = (osg::Vec2Array*)geometry->getTexCoordArray(0);
unsigned int index = remappedFace.face->index[i]; unsigned short int index = remappedFace.face->index[i];
if (origToNewMapping[index] == -1) if (origToNewMapping[index] == -1)
{ {
int newIndex = vertices->size(); int newIndex = vertices->size();
@@ -936,10 +926,6 @@ static void addVertex(
osg::Vec2f texCoord(mesh->texcos[index][0], mesh->texcos[index][1]); osg::Vec2f texCoord(mesh->texcos[index][0], mesh->texcos[index][1]);
texCoord = componentMultiply(texCoord, params.scaleUV); texCoord = componentMultiply(texCoord, params.scaleUV);
texCoord += params.offsetUV; texCoord += params.offsetUV;
if (!isNumber(texCoord.x()) || !isNumber(texCoord.y())) {
OSG_WARN << "NaN found in texcoord" << std::endl;
texCoord.set(0,0);
}
texCoords->push_back(texCoord); texCoords->push_back(texCoord);
} }
@@ -1016,25 +1002,6 @@ static bool addFace(
} }
} }
template <typename Prim>
void fillTriangles(osg::Geometry & geom, const std::vector<RemappedFace> & remappedFaces, unsigned int numIndices) {
//if (m->nvertices < std::numeric_limits<unsigned short>::max()) {
osg::ref_ptr<Prim> elements( new Prim(osg::PrimitiveSet::TRIANGLES, numIndices) );
typename Prim::iterator index_itr( elements->begin() );
for (unsigned int i = 0; i < remappedFaces.size(); ++i)
{
const RemappedFace& remappedFace = remappedFaces[i];
if (remappedFace.face != NULL)
{
*(index_itr++) = remappedFace.index[0];
*(index_itr++) = remappedFace.index[1];
*(index_itr++) = remappedFace.index[2];
}
}
geom.addPrimitiveSet(elements.get());
}
/** /**
use matrix to pretransform geometry, or NULL to do nothing use matrix to pretransform geometry, or NULL to do nothing
*/ */
@@ -1091,27 +1058,21 @@ osg::Drawable* ReaderWriter3DS::ReaderObject::createDrawable(Lib3dsMesh *m,FaceL
unsigned int faceIndex = 0; unsigned int faceIndex = 0;
unsigned int faceCount = 0; unsigned int faceCount = 0;
unsigned int maxVertexIndex = 0;
for (FaceList::iterator itr = faceList.begin(); for (FaceList::iterator itr = faceList.begin();
itr != faceList.end(); itr != faceList.end();
++itr, ++faceIndex) ++itr, ++faceIndex)
{ {
osg::Vec3f normal(copyLib3dsVec3ToOsgVec3(normals[*itr])); osg::Vec3 normal = copyLib3dsVec3ToOsgVec3(normals[*itr]);
if (matrix) normal = osg::Matrix::transform3x3(normal, *(params.matrix)); if (matrix) normal = osg::Matrix::transform3x3(normal, *(params.matrix));
normal.normalize(); normal.normalize();
Lib3dsFace& face = m->faces[*itr]; Lib3dsFace& face = m->faces[*itr];
RemappedFace & rf = remappedFaces[faceIndex]; remappedFaces[faceIndex].face = &face;
rf.face = &face; remappedFaces[faceIndex].normal = normal;
rf.normal = normal; if (addFace(m, remappedFaces[faceIndex], geom, origToNewMapping, splitVertexChain, params))
if (addFace(m, rf, geom, origToNewMapping, splitVertexChain, params))
{ {
++faceCount; ++faceCount;
} }
// Get the highest index
maxVertexIndex = osg::maximum(maxVertexIndex, rf.index[0]);
maxVertexIndex = osg::maximum(maxVertexIndex, rf.index[1]);
maxVertexIndex = osg::maximum(maxVertexIndex, rf.index[2]);
} }
// 'Shrink to fit' all vertex arrays because potentially faceList refers to fewer vertices than the whole mesh. // 'Shrink to fit' all vertex arrays because potentially faceList refers to fewer vertices than the whole mesh.
@@ -1126,12 +1087,23 @@ osg::Drawable* ReaderWriter3DS::ReaderObject::createDrawable(Lib3dsMesh *m,FaceL
geom->setColorArray(osg_colors.get(), osg::Array::BIND_OVERALL); geom->setColorArray(osg_colors.get(), osg::Array::BIND_OVERALL);
// Create triangle primitives. // Create triangle primitives.
// Remapping may create additional vertices, thus creating indices over USHORT_MAX int numIndices = faceCount * 3;
if (maxVertexIndex < std::numeric_limits<unsigned short>::max()) { osg::ref_ptr<DrawElementsUShort> elements = new osg::DrawElementsUShort(osg::PrimitiveSet::TRIANGLES, numIndices);
fillTriangles<DrawElementsUShort>(*geom, remappedFaces, faceCount * 3); DrawElementsUShort::iterator index_itr = elements->begin();
} else {
fillTriangles<DrawElementsUInt> (*geom, remappedFaces, faceCount * 3); for (unsigned int i = 0; i < remappedFaces.size(); ++i)
} {
RemappedFace& remappedFace = remappedFaces[i];
if (remappedFace.face != NULL)
{
*(index_itr++) = remappedFace.index[0];
*(index_itr++) = remappedFace.index[1];
*(index_itr++) = remappedFace.index[2];
}
}
geom->addPrimitiveSet(elements.get());
#if 0 #if 0
osgUtil::TriStripVisitor tsv; osgUtil::TriStripVisitor tsv;
tsv.stripify(*geom); tsv.stripify(*geom);
@@ -1205,7 +1177,7 @@ osg::Texture2D* ReaderWriter3DS::ReaderObject::createTexture(Lib3dsTextureMap *
osg_texture->setImage(osg_image.get()); osg_texture->setImage(osg_image.get());
osg_texture->setName(texture->name); osg_texture->setName(texture->name);
// does the texture support transparancy? // does the texture support transparancy?
transparency = ((texture->flags)&LIB3DS_TEXTURE_ALPHA_SOURCE)!=0; //transparency = ((texture->flags)&LIB3DS_TEXTURE_ALPHA_SOURCE)!=0;
// what is the wrap mode of the texture. // what is the wrap mode of the texture.
osg::Texture2D::WrapMode wm = ((texture->flags)&LIB3DS_TEXTURE_NO_TILE) ? osg::Texture2D::WrapMode wm = ((texture->flags)&LIB3DS_TEXTURE_NO_TILE) ?
@@ -1248,7 +1220,6 @@ ReaderWriter3DS::StateSetInfo ReaderWriter3DS::ReaderObject::createStateSet(Lib3
osg::Texture2D* texture1_map = createTexture(&(mat->texture1_map),"texture1_map",textureTransparency); osg::Texture2D* texture1_map = createTexture(&(mat->texture1_map),"texture1_map",textureTransparency);
if (texture1_map) if (texture1_map)
{ {
if(textureTransparency) transparency = true;
stateset->setTextureAttributeAndModes(unit, texture1_map, osg::StateAttribute::ON); stateset->setTextureAttributeAndModes(unit, texture1_map, osg::StateAttribute::ON);
double factor = mat->texture1_map.percent; double factor = mat->texture1_map.percent;
@@ -1329,7 +1300,7 @@ ReaderWriter3DS::StateSetInfo ReaderWriter3DS::ReaderObject::createStateSet(Lib3
if ((alpha < 1.0f) || transparency) if ((alpha < 1.0f) || transparency)
{ {
stateset->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)); //stateset->setAttributeAndModes(new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA));
stateset->setMode(GL_BLEND,osg::StateAttribute::ON); stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN); stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
} }

View File

@@ -28,15 +28,15 @@ WriterCompareTriangle::operator()(const std::pair<Triangle, int> & t1,
} }
void void
WriterCompareTriangle::setMaxMin(int & nbVerticesX, WriterCompareTriangle::setMaxMin(unsigned int & nbVerticesX,
int & nbVerticesY, unsigned int & nbVerticesY,
int & nbVerticesZ) const unsigned int & nbVerticesZ) const
{ {
static const int min = 1; static const unsigned int min = 1;
static const int max = 5; // Number of blocks used to divide the scene (arbitrary but seems ok) static const unsigned int max = 5; // Number of blocks used to divide the scene (arbitrary but seems ok)
nbVerticesX = osg::clampBetween<int>(nbVerticesX, min, max); nbVerticesX = osg::clampBetween<unsigned int>(nbVerticesX, min, max);
nbVerticesY = osg::clampBetween<int>(nbVerticesY, min, max); nbVerticesY = osg::clampBetween<unsigned int>(nbVerticesY, min, max);
nbVerticesZ = osg::clampBetween<int>(nbVerticesZ, min, max); nbVerticesZ = osg::clampBetween<unsigned int>(nbVerticesZ, min, max);
} }
void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sceneBox) void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sceneBox)
@@ -45,9 +45,9 @@ void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sc
static const float k = 1.3f; // Arbitrary constant multiplier for density computation ("simulates" non-uniform point distributions) static const float k = 1.3f; // Arbitrary constant multiplier for density computation ("simulates" non-uniform point distributions)
// Computes "density" of points, and thus the number of blocks to divide the mesh into // Computes "density" of points, and thus the number of blocks to divide the mesh into
int nbVerticesX = static_cast<int>( (nbVertices * k) / (length.z() * length.y()) ); unsigned int nbVerticesX = static_cast<unsigned int>( (nbVertices * k) / (length.z() * length.y()) );
int nbVerticesY = static_cast<int>( (nbVertices * k) / (length.z() * length.x()) ); unsigned int nbVerticesY = static_cast<unsigned int>( (nbVertices * k) / (length.z() * length.x()) );
int nbVerticesZ = static_cast<int>( (nbVertices * k) / (length.x() * length.y()) ); unsigned int nbVerticesZ = static_cast<unsigned int>( (nbVertices * k) / (length.x() * length.y()) );
setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ); // This function prevent from cutting the scene in too many blocs setMaxMin (nbVerticesX, nbVerticesY, nbVerticesZ); // This function prevent from cutting the scene in too many blocs
@@ -63,9 +63,9 @@ void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sc
boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ); boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ);
short yinc = 1; short yinc = 1;
short xinc = 1; short xinc = 1;
int y = 0; unsigned int y = 0;
int x = 0; unsigned int x = 0;
for (int z = 0; z < nbVerticesZ; ++z) for (unsigned int z = 0; z < nbVerticesZ; ++z)
{ {
while (x < nbVerticesX && x >= 0) while (x < nbVerticesX && x >= 0)
{ {

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