Compare commits
1 Commits
OpenSceneG
...
OpenSceneG
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7f2eaa4339 |
70
AUTHORS.txt
70
AUTHORS.txt
@@ -1,6 +1,6 @@
|
||||
OpenSceneGraph Library 3.2.1
|
||||
OpenSceneGraph Library 3.2.0
|
||||
|
||||
519 Contributors:
|
||||
511 Contributors:
|
||||
|
||||
Firstname Surname
|
||||
-----------------
|
||||
@@ -9,12 +9,12 @@ Don Burns
|
||||
Stephan Huber
|
||||
Paul Martz
|
||||
Mathias Fr<46>hlich
|
||||
Farshid Lashkari
|
||||
Marco Jez
|
||||
Farshid Lashkari
|
||||
Wang Rui
|
||||
Jean-S<>bastien Guay
|
||||
Ulrich Hertlein
|
||||
Mike Weiblen
|
||||
Ulrich Hertlein
|
||||
Eric Wing
|
||||
Sukender
|
||||
Cedric Pinson
|
||||
@@ -25,46 +25,43 @@ Geoff Michel
|
||||
Wojciech Lewandowski
|
||||
Eric Sokolowsky
|
||||
David Callu
|
||||
Laurens Voerman
|
||||
Colin McDonald
|
||||
Trajce Nikolov
|
||||
Colin McDonald
|
||||
Tim Moore
|
||||
Martin Lavery
|
||||
Laurens Voerman
|
||||
Tree
|
||||
Luigi Calori
|
||||
Mike Wittman
|
||||
Jason Beverage
|
||||
Chris Hanson
|
||||
Roland Smeenk
|
||||
Roger James
|
||||
Jeremy Moles
|
||||
Jason Beverage
|
||||
Jan Peciva
|
||||
Mattias Helsing
|
||||
J.P. Delport
|
||||
Alberto Luaces
|
||||
Mattias Helsing
|
||||
Magnus Kessler
|
||||
David Fries
|
||||
Andy Skinner
|
||||
Tom Jolley
|
||||
Paul Melis
|
||||
Alberto Luaces
|
||||
Luc Frauciel
|
||||
Tom Jolley
|
||||
Pavel Moloshtan
|
||||
Brad Christiansen
|
||||
Olaf Flebbe
|
||||
Mathieu Marache
|
||||
Jason Daly
|
||||
Aurelien Albert
|
||||
Art Tevs
|
||||
Philip Lowman
|
||||
Per Fahlberg
|
||||
Norman Vine
|
||||
Terry Welsh
|
||||
Serge Lages
|
||||
Romano Jos<6F> Magacho da Silva
|
||||
Lionel Lagarde
|
||||
Chris Denham
|
||||
Alberto Farre
|
||||
Torben Dannhauer
|
||||
Sherman Wilcox
|
||||
Robert Michael
|
||||
Mourad Boufarguine
|
||||
@@ -72,12 +69,14 @@ Andr
|
||||
Adrian Egli
|
||||
Ruben Lopez
|
||||
Randall Hopper
|
||||
Pjotr Svetachov
|
||||
Jan Ciger
|
||||
Torben Dannhauer
|
||||
Glenn Waldron
|
||||
Gideon May
|
||||
Don Tidrow
|
||||
Aurelien Albert
|
||||
Stephane Lamoliatte
|
||||
Romano Jos<6F> Magacho da Silva
|
||||
Michael Gronager
|
||||
Martin Naylor
|
||||
Joakim Simonsson
|
||||
@@ -86,11 +85,10 @@ Daniel Sj
|
||||
Bryan Thrall
|
||||
Fabien Lavignotte
|
||||
Andreas Ekstrand
|
||||
Riccardo Corsi
|
||||
Mike Connell
|
||||
Melchior Franz
|
||||
Johannes Baeuerle
|
||||
Thomas Hogarth
|
||||
Riccardo Corsi
|
||||
Rafa Gaitan
|
||||
Neil Hughes
|
||||
Martin Beckett
|
||||
@@ -103,9 +101,9 @@ Cory Riddell
|
||||
Chuck Seberino
|
||||
Boris Bralo
|
||||
Yefei He
|
||||
Thomas Hogarth
|
||||
Sondra Iverson
|
||||
Simon Julier
|
||||
Sebastian Messerschmidt
|
||||
Rune Schmidt Jensen
|
||||
Rainer Oder
|
||||
Nico Kruithof
|
||||
@@ -121,15 +119,13 @@ Thibault Genessay
|
||||
Sasa Bistrovic
|
||||
Ravi Mathur
|
||||
Ralf Habacker
|
||||
Pjotr Svetachov
|
||||
Neil Groves
|
||||
Mikhail Izmestev
|
||||
Markus Trenkwalder
|
||||
Loic Dachary
|
||||
Joseph Steel
|
||||
Jordi Torres
|
||||
John Shue
|
||||
Brad Colbert
|
||||
Alexander Sinditskiy
|
||||
Vivek Rajan
|
||||
Uwe Woessner
|
||||
Tony Horrobin
|
||||
@@ -148,21 +144,22 @@ Martins Innus
|
||||
Maciej Krol
|
||||
Lilin Xiong
|
||||
Leandro Motta Barros
|
||||
Jordi Torres
|
||||
Johan Nouvel
|
||||
Hartwig Wiesmann
|
||||
Donn Mielcarek
|
||||
Corbin Holtz
|
||||
Blasius Czink
|
||||
Bj<EFBFBD>rn Blissing
|
||||
Alexander Sinditskiy
|
||||
Alexander Irion
|
||||
Toshiyuki Takahei
|
||||
Sebastien Grignard
|
||||
Ryan Kawicki
|
||||
Rudolf Wiedemann
|
||||
Robert Milharcic
|
||||
Romano Magacho
|
||||
Mikhail Izmestev
|
||||
Maria Ten
|
||||
Liang Aibin
|
||||
Kristofer Tingdahl
|
||||
Katharina Plugge
|
||||
John Vidar Larring
|
||||
John Kelso
|
||||
@@ -180,13 +177,14 @@ Alok Priyadarshi
|
||||
Alberto Barbati
|
||||
Alan Dickinson
|
||||
Vladimir Shabanov
|
||||
Vladimir Chebaev
|
||||
Tugkan Calapoglu
|
||||
Tim Daoust
|
||||
Sohey Yamamoto
|
||||
Sergey Leontyev
|
||||
Sebastian Messerschmidt
|
||||
Santosh Gaikwad
|
||||
Ryan Pavlik
|
||||
Robert Milharcic
|
||||
Rene Molenaar
|
||||
Piotr Domagalski
|
||||
Phil Atkin
|
||||
@@ -196,7 +194,6 @@ Mattias Linde
|
||||
Mark Sciabica
|
||||
Marcin Prus
|
||||
Lee Butler
|
||||
Lars Nilsson
|
||||
Konstantin Sinitsyn
|
||||
Ken Sewell
|
||||
Julian Ortiz
|
||||
@@ -214,7 +211,6 @@ Doug McCorkle
|
||||
Donald Cipperly
|
||||
Don Leich
|
||||
Dietmar Funck
|
||||
Colin Cochran
|
||||
Christian Buchner
|
||||
Charles Cole
|
||||
Blake Williams
|
||||
@@ -228,6 +224,7 @@ Zach Deedler
|
||||
Yuzhong Shen
|
||||
Wee See
|
||||
Warren Macchi
|
||||
Vladimir Chebaev
|
||||
Vincent Bourdier
|
||||
Terrex
|
||||
Tassilo Glander
|
||||
@@ -261,9 +258,9 @@ Martin Lambers
|
||||
Martijn Kragtwijk
|
||||
Marius Heise
|
||||
Marcin Hajder
|
||||
Marcel Pursche
|
||||
Lilith Bryant
|
||||
Konstantin Matveyev
|
||||
Lars Nilsson
|
||||
Kristofer Tingdahl
|
||||
Kevin Moiule
|
||||
Keith Steffen
|
||||
Julen Garcia
|
||||
@@ -282,7 +279,6 @@ Guy Volckaert
|
||||
Gustavo Wagner
|
||||
Guillaume Taze
|
||||
Guillaume Chouvenc
|
||||
Giuseppe Donvito
|
||||
Gill Peacegood
|
||||
Gerrick Bivins
|
||||
George Tarantilis
|
||||
@@ -300,7 +296,6 @@ Claus Scheiblauer
|
||||
Christophe Loustaunau
|
||||
Christian Ruzicka
|
||||
Brad Anderegg
|
||||
Bj<EFBFBD>rn Hein
|
||||
Aric Aumann
|
||||
Andrew Sampson
|
||||
Andrew Lorino
|
||||
@@ -339,7 +334,6 @@ Simon Buckley
|
||||
Sid Byce
|
||||
Shuxing Xiao
|
||||
Shane Arnott
|
||||
Sergey Kurdakov
|
||||
Sebastien Kuntz
|
||||
Ruth Lang
|
||||
Ruben Smelik
|
||||
@@ -354,7 +348,6 @@ Rob Radtke
|
||||
Rob Bloemkool
|
||||
Rick Pingry
|
||||
Rick Appleton
|
||||
Remo Eichenberger
|
||||
Reinhard Sainitzer
|
||||
Rein Kadijk
|
||||
Ragnar Hammarqvist
|
||||
@@ -385,10 +378,8 @@ Nick Black
|
||||
Mojtaba Fathi
|
||||
Mirko Viviani
|
||||
Mikkel Gjøl
|
||||
Mike Krus
|
||||
Mike Garrity
|
||||
Miha Ravsel
|
||||
Michael Schanne
|
||||
Michael Polak
|
||||
Michael Morrison
|
||||
Michael Logan
|
||||
@@ -397,6 +388,7 @@ Michael Bach Jensen
|
||||
Max Rhiener
|
||||
Max Behensky
|
||||
Mauricio Hofmam
|
||||
Matthias Helsing
|
||||
Matthew May
|
||||
Matthew Johnson-Roberson
|
||||
Matt Green
|
||||
@@ -411,7 +403,7 @@ Marius Kintel
|
||||
Mario Guimaraes
|
||||
Marco Sciabica
|
||||
Marco Lehmann
|
||||
Marc Helbling
|
||||
Marcel Pursche
|
||||
Maik Keller
|
||||
Lukas Diduch
|
||||
Louis Hamilton
|
||||
@@ -419,8 +411,10 @@ Lewis Harmon
|
||||
Leigh Stivers
|
||||
Laurence Muller
|
||||
Laura Cerritelli
|
||||
Lars Nillson
|
||||
Kyle Centers
|
||||
Kristopher Bixler
|
||||
Konstantin Matveyev
|
||||
Kim Seokhwan
|
||||
Kim Bale
|
||||
Karsten Weiss
|
||||
@@ -478,7 +472,6 @@ Duvan Cope
|
||||
Duncan Cavens
|
||||
Drew Whitehouse
|
||||
Douglas A. Pouk
|
||||
Dmitry Marakasov
|
||||
Dean Iverson
|
||||
David Jung
|
||||
Danny Valente
|
||||
@@ -489,7 +482,6 @@ Cyril Brulebois
|
||||
Clay Fowler
|
||||
Chuck Sembroski
|
||||
Christopher Blaesius
|
||||
Christopher Baker
|
||||
Christophe Herreman
|
||||
Christian Noon
|
||||
Christian Kaser
|
||||
@@ -501,6 +493,8 @@ Bruno Herbelin
|
||||
Brian Keener
|
||||
Brandon Hamm
|
||||
Bora Utka
|
||||
Bj<EFBFBD>rn Hein
|
||||
Bjorn Blissing
|
||||
Bill Prendergast
|
||||
Bernardt Duvenhage
|
||||
Benoit Laniel
|
||||
@@ -509,7 +503,6 @@ Ben van Basten
|
||||
Bart Gallet
|
||||
Axel Volley
|
||||
Anthousis Andreadis
|
||||
Anish Thomas
|
||||
Andy Preece
|
||||
Andrew Reyonolds
|
||||
Andreas Roth
|
||||
@@ -521,5 +514,4 @@ Alberto Jaspe
|
||||
Alan Purvis
|
||||
Alan Ott
|
||||
Alan Harris
|
||||
Adrien Grandemange
|
||||
Adam Richard
|
||||
|
||||
@@ -48,7 +48,7 @@ PROJECT(OpenSceneGraph)
|
||||
|
||||
SET(OPENSCENEGRAPH_MAJOR_VERSION 3)
|
||||
SET(OPENSCENEGRAPH_MINOR_VERSION 2)
|
||||
SET(OPENSCENEGRAPH_PATCH_VERSION 1)
|
||||
SET(OPENSCENEGRAPH_PATCH_VERSION 0)
|
||||
SET(OPENSCENEGRAPH_SOVERSION 100)
|
||||
|
||||
# set to 0 when not a release candidate, non zero means that any generated
|
||||
@@ -247,16 +247,13 @@ IF(APPLE)
|
||||
|
||||
#you need to manually set the default sdk version here
|
||||
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
|
||||
# Force gcc <= 4.2 on iPhone
|
||||
IF(IPHONE_VERSION_MIN LESS "6.0")
|
||||
include(CMakeForceCompiler)
|
||||
CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU)
|
||||
CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU)
|
||||
SET(GCC_THUMB_SUPPORT NO)
|
||||
ENDIF()
|
||||
include(CMakeForceCompiler)
|
||||
CMAKE_FORCE_C_COMPILER(llvm-gcc-4.2 GNU)
|
||||
CMAKE_FORCE_CXX_COMPILER(llvm-gcc-4.2 GNU)
|
||||
SET(GCC_THUMB_SUPPORT NO)
|
||||
|
||||
#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)
|
||||
@@ -515,7 +512,7 @@ IF(ANDROID)
|
||||
ANDROID_3RD_PARTY()
|
||||
ELSE()
|
||||
# Common to all platforms except android:
|
||||
FIND_PACKAGE(Freetype)
|
||||
FIND_PACKAGE(FreeType)
|
||||
FIND_PACKAGE(Inventor)
|
||||
FIND_PACKAGE(Jasper)
|
||||
FIND_PACKAGE(OpenEXR)
|
||||
@@ -595,7 +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 ( Qt5Widgets_FOUND )
|
||||
FIND_PACKAGE(Qt5WebKitWidgets QUIET)
|
||||
FIND_PACKAGE(Qt5WebKitWidgets)
|
||||
ENDIF()
|
||||
|
||||
ENDIF()
|
||||
@@ -795,7 +792,11 @@ IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||
# returns too many hits.
|
||||
# FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
|
||||
# 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
|
||||
|
||||
@@ -812,14 +813,6 @@ ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
# CMake lacks an elseif, so other non-gcc, non-VS compilers need
|
||||
# to be listed below. If unhandled, OSG_AGGRESSIVE_WARNING_FLAGS should
|
||||
# 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()
|
||||
|
||||
# This part is for the CMake menu option to toggle the warnings on/off.
|
||||
@@ -879,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
|
||||
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_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()
|
||||
|
||||
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)
|
||||
ELSE()
|
||||
#simulator uses i386 architectures
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for iOS Simulator" FORCE)
|
||||
@@ -918,7 +905,7 @@ IF(APPLE AND NOT ANDROID)
|
||||
# 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.
|
||||
IF(NOT OSG_CONFIG_HAS_BEEN_RUN_BEFORE)
|
||||
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
|
||||
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)
|
||||
# 64 Bit Works, i386,ppc is not supported any more
|
||||
SET(CMAKE_OSX_ARCHITECTURES "x86_64" CACHE STRING "Build architectures for OSX" FORCE)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# Check for availability of atomic operations
|
||||
# Check for availability of atomic operations
|
||||
# This module defines
|
||||
# OPENTHREADS_HAVE_ATOMIC_OPS
|
||||
|
||||
@@ -15,134 +15,123 @@ IF (OPENTHREADS_ATOMIC_USE_MUTEX)
|
||||
SET(_OPENTHREADS_ATOMIC_USE_MUTEX 1)
|
||||
|
||||
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()
|
||||
INCLUDE(CheckCXXSourceRuns)
|
||||
# Do step by step checking,
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <cstdlib>
|
||||
|
||||
# Do step by step checking,
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <cstdlib>
|
||||
int main()
|
||||
{
|
||||
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()
|
||||
{
|
||||
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_FAILURE;
|
||||
|
||||
if (!__sync_bool_compare_and_swap(&ptr, ptr, ptr))
|
||||
return EXIT_FAILURE;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS)
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_GCC_BUILTINS)
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <stdlib.h>
|
||||
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <stdlib.h>
|
||||
int main(int, const char**)
|
||||
{
|
||||
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**)
|
||||
{
|
||||
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_FAILURE;
|
||||
|
||||
if (!__compare_and_swap((unsigned long*)&ptr, (unsigned long)ptr, (unsigned long)ptr))
|
||||
return EXIT_FAILURE;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS)
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_MIPOSPRO_BUILTINS)
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <atomic.h>
|
||||
#include <cstdlib>
|
||||
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <atomic.h>
|
||||
#include <cstdlib>
|
||||
int main(int, const char**)
|
||||
{
|
||||
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**)
|
||||
{
|
||||
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_FAILURE;
|
||||
|
||||
if (ptr != atomic_cas_ptr(&ptr, ptr, ptr))
|
||||
return EXIT_FAILURE;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_SUN)
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_SUN)
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <windows.h>
|
||||
#include <intrin.h>
|
||||
#include <cstdlib>
|
||||
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <windows.h>
|
||||
#include <intrin.h>
|
||||
#include <cstdlib>
|
||||
#pragma intrinsic(_InterlockedAnd)
|
||||
#pragma intrinsic(_InterlockedOr)
|
||||
#pragma intrinsic(_InterlockedXor)
|
||||
|
||||
#pragma intrinsic(_InterlockedAnd)
|
||||
#pragma intrinsic(_InterlockedOr)
|
||||
#pragma intrinsic(_InterlockedXor)
|
||||
int main(int, const char**)
|
||||
{
|
||||
volatile long value = 0;
|
||||
long data = 0;
|
||||
long* volatile ptr = &data;
|
||||
|
||||
int main(int, const char**)
|
||||
{
|
||||
volatile long value = 0;
|
||||
long data = 0;
|
||||
long* volatile ptr = &data;
|
||||
InterlockedIncrement(&value);
|
||||
MemoryBarrier();
|
||||
InterlockedDecrement(&value);
|
||||
|
||||
InterlockedIncrement(&value);
|
||||
MemoryBarrier();
|
||||
InterlockedDecrement(&value);
|
||||
if (0 != InterlockedCompareExchange(&value, 1, 0))
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if (0 != InterlockedCompareExchange(&value, 1, 0))
|
||||
return EXIT_FAILURE;
|
||||
if (ptr != InterlockedCompareExchangePointer((PVOID volatile*)&ptr, (PVOID)ptr, (PVOID)ptr))
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if (ptr != InterlockedCompareExchangePointer((PVOID volatile*)&ptr, (PVOID)ptr, (PVOID)ptr))
|
||||
return EXIT_FAILURE;
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED)
|
||||
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_WIN32_INTERLOCKED)
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <libkern/OSAtomic.h>
|
||||
|
||||
CHECK_CXX_SOURCE_RUNS("
|
||||
#include <libkern/OSAtomic.h>
|
||||
int main()
|
||||
{
|
||||
volatile int32_t value = 0;
|
||||
long data = 0;
|
||||
long * volatile ptr = &data;
|
||||
|
||||
int main()
|
||||
{
|
||||
volatile int32_t value = 0;
|
||||
long data = 0;
|
||||
long * volatile ptr = &data;
|
||||
OSAtomicIncrement32(&value);
|
||||
OSMemoryBarrier();
|
||||
OSAtomicDecrement32(&value);
|
||||
OSAtomicCompareAndSwapInt(value, 1, &value);
|
||||
OSAtomicCompareAndSwapPtr(ptr, ptr, (void * volatile *)&ptr);
|
||||
}
|
||||
" _OPENTHREADS_ATOMIC_USE_BSD_ATOMIC)
|
||||
|
||||
OSAtomicIncrement32(&value);
|
||||
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()
|
||||
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()
|
||||
|
||||
@@ -1,20 +1,22 @@
|
||||
# Locate Apple AVFoundation (next-generation QTKit)
|
||||
# This module defines
|
||||
# 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
|
||||
# correspond to the ./configure --prefix=$AV_FOUNDATION_DIR
|
||||
#
|
||||
# Created by Stephan Maximilian Huber
|
||||
# Created by Stephan Maximilian Huber
|
||||
|
||||
|
||||
IF(APPLE)
|
||||
FIND_PATH(AV_FOUNDATION_INCLUDE_DIR AVFoundation/AVFoundation.h)
|
||||
FIND_LIBRARY(AV_FOUNDATION_LIBRARY AVFoundation)
|
||||
ENDIF()
|
||||
|
||||
SET(AV_FOUNDATION_FOUND "NO")
|
||||
IF(AV_FOUNDATION_LIBRARY)
|
||||
IF(AV_FOUNDATION_LIBRARY AND AV_FOUNDATION_INCLUDE_DIR)
|
||||
SET(AV_FOUNDATION_FOUND "YES")
|
||||
ENDIF()
|
||||
|
||||
@@ -30,11 +32,11 @@ ELSE()
|
||||
# AVFoundation exists since 10.7, but only 10.8 has all features necessary for OSG
|
||||
# so check the SDK-setting
|
||||
|
||||
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9")
|
||||
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8")
|
||||
# nothing special here ;-)
|
||||
ELSE()
|
||||
MESSAGE("AVFoundation disabled for SDK < 10.8")
|
||||
SET(AV_FOUNDATION_FOUND "NO")
|
||||
SET(AV_FOUNDATION_FOUND "NO")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
0
CMakeModules/FindAsio.cmake
Normal file → Executable file
0
CMakeModules/FindAsio.cmake
Normal file → Executable file
@@ -242,7 +242,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
)
|
||||
|
||||
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
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${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
|
||||
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
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
@@ -258,7 +258,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
)
|
||||
|
||||
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
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${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
|
||||
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
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
|
||||
@@ -48,7 +48,7 @@ FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
|
||||
/opt/csw
|
||||
/opt
|
||||
/usr/freeware
|
||||
PATH_SUFFIXES include include/freetype2
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
|
||||
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
|
||||
)
|
||||
|
||||
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
|
||||
NAMES freetype libfreetype freetype219
|
||||
PATHS
|
||||
@@ -1,13 +1,13 @@
|
||||
# Locate gdal
|
||||
# This module defines
|
||||
# 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_DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$OSG_DIR
|
||||
#
|
||||
# Created by Robert Osfield.
|
||||
# Created by Robert Osfield.
|
||||
|
||||
FIND_PATH(OSG_INCLUDE_DIR osg/Node
|
||||
${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
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
|
||||
FIND_LIBRARY(${MYLIBRARY}
|
||||
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
|
||||
PATHS
|
||||
@@ -107,7 +107,7 @@ MACRO(FIND_OSG_LIBRARY MYLIBRARY MYLIBRARYNAME)
|
||||
ENDIF(NOT MYLIBRARY)
|
||||
|
||||
ENDIF( NOT ${MYLIBRARY}_DEBUG )
|
||||
|
||||
|
||||
ENDMACRO(FIND_OSG_LIBRARY LIBRARY LIBRARYNAME)
|
||||
|
||||
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(OSGSHADOW_LIBRARY osgShadow)
|
||||
FIND_OSG_LIBRARY(OSGPRESENTATION_LIBRARY osgPresentation)
|
||||
FIND_OSG_LIBRARY(OSGSIM_LIBRARY osgSim)
|
||||
FIND_OSG_LIBRARY(OSGSIM osgSim)
|
||||
FIND_OSG_LIBRARY(OPENTHREADS_LIBRARY OpenThreads)
|
||||
|
||||
|
||||
|
||||
@@ -5,9 +5,7 @@ IF(PKG_CONFIG_FOUND)
|
||||
|
||||
INCLUDE(FindPkgConfig)
|
||||
|
||||
#Version 2.35 introduces the rsvg_cleanup function which is used
|
||||
PKG_CHECK_MODULES(RSVG librsvg-2.0>=2.35)
|
||||
|
||||
PKG_CHECK_MODULES(RSVG librsvg-2.0)
|
||||
PKG_CHECK_MODULES(CAIRO cairo)
|
||||
|
||||
IF (RSVG_FOUND AND NOT CAIRO_FOUND)
|
||||
|
||||
0
CMakeModules/FindZeroConf.cmake
Normal file → Executable file
0
CMakeModules/FindZeroConf.cmake
Normal file → Executable file
@@ -5,7 +5,7 @@
|
||||
# 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
|
||||
# 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
|
||||
#######################################################################################################
|
||||
|
||||
@@ -87,12 +87,12 @@ MACRO(LINK_CORELIB_DEFAULT CORELIB_NAME)
|
||||
SET(ALL_GL_LIBRARIES ${ALL_GL_LIBRARIES} ${OPENGL_egl_LIBRARY})
|
||||
ENDIF()
|
||||
|
||||
LINK_EXTERNAL(${CORELIB_NAME} ${ALL_GL_LIBRARIES})
|
||||
LINK_EXTERNAL(${CORELIB_NAME} ${ALL_GL_LIBRARIES})
|
||||
LINK_WITH_VARIABLES(${CORELIB_NAME} OPENTHREADS_LIBRARY)
|
||||
IF(OPENSCENEGRAPH_SONAMES)
|
||||
SET_TARGET_PROPERTIES(${CORELIB_NAME} PROPERTIES VERSION ${OPENSCENEGRAPH_VERSION} SOVERSION ${OPENSCENEGRAPH_SOVERSION})
|
||||
ENDIF(OPENSCENEGRAPH_SONAMES)
|
||||
|
||||
|
||||
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
|
||||
# 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
|
||||
# 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
|
||||
# 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})
|
||||
|
||||
@@ -151,7 +151,7 @@ MACRO(SETUP_LINK_LIBRARIES)
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
|
||||
#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)
|
||||
|
||||
ENDMACRO(SETUP_LINK_LIBRARIES)
|
||||
@@ -213,7 +213,7 @@ ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
|
||||
|
||||
MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
ELSE()
|
||||
SET(TARGET_NAME ${LIB_NAME} )
|
||||
SET(TARGET_TARGETNAME ${LIB_NAME} )
|
||||
@@ -224,13 +224,10 @@ MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
${TARGET_SRC}
|
||||
)
|
||||
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)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
|
||||
ENDIF(TARGET_LABEL)
|
||||
|
||||
|
||||
IF(TARGET_LIBRARIES)
|
||||
LINK_INTERNAL(${LIB_NAME} ${TARGET_LIBRARIES})
|
||||
ENDIF()
|
||||
@@ -241,14 +238,14 @@ MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
LINK_WITH_VARIABLES(${LIB_NAME} ${TARGET_LIBRARIES_VARS})
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
LINK_CORELIB_DEFAULT(${LIB_NAME})
|
||||
|
||||
|
||||
ENDIF()
|
||||
INCLUDE(ModuleInstall OPTIONAL)
|
||||
ENDMACRO(SETUP_LIBRARY LIB_NAME)
|
||||
|
||||
MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
|
||||
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
|
||||
ELSE()
|
||||
|
||||
SET(TARGET_NAME ${PLUGIN_NAME} )
|
||||
@@ -271,33 +268,38 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
SET(PACKAGE_COMPONENT libopenscenegraph)
|
||||
ENDIF(${ARGC} GREATER 1)
|
||||
|
||||
# Add the VisualStudio versioning info
|
||||
# Add the VisualStudio versioning info
|
||||
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)
|
||||
ADD_LIBRARY(${TARGET_TARGETNAME} MODULE ${TARGET_SRC} ${TARGET_H})
|
||||
ELSE (DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_LIBRARY(${TARGET_TARGETNAME} STATIC ${TARGET_SRC} ${TARGET_H})
|
||||
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)
|
||||
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)
|
||||
|
||||
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
|
||||
#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,
|
||||
#it is hardcoded, we should compute OUTPUT_BINDIR position relative to OUTPUT_LIBDIR ... to be implemented
|
||||
#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)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS}/")
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../bin/${OSG_PLUGINS}/")
|
||||
ELSE(NOT MSVC_IDE)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PREFIX "../../bin/${OSG_PLUGINS}/" IMPORT_PREFIX "../")
|
||||
ENDIF(NOT MSVC_IDE)
|
||||
@@ -311,18 +313,16 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
ENDIF(OSG_MSVC_VERSIONED_DLL)
|
||||
|
||||
ENDIF(NOT CMAKE24)
|
||||
ENDIF(MSVC)
|
||||
ENDIF(NOT MSVC)
|
||||
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES PROJECT_LABEL "${TARGET_LABEL}")
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Plugins")
|
||||
IF(APPLE)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "")
|
||||
ENDIF()
|
||||
|
||||
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}
|
||||
IF(WIN32)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME}
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME}
|
||||
RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT}
|
||||
ARCHIVE DESTINATION lib/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
|
||||
LIBRARY DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
|
||||
@@ -350,11 +350,11 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
|
||||
ENDIF(NOT TARGET_LABEL)
|
||||
|
||||
IF(${IS_COMMANDLINE_APP})
|
||||
|
||||
|
||||
ADD_EXECUTABLE(${TARGET_TARGETNAME} ${TARGET_SRC} ${TARGET_H})
|
||||
|
||||
|
||||
ELSE(${IS_COMMANDLINE_APP})
|
||||
|
||||
|
||||
IF(APPLE)
|
||||
# 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
|
||||
@@ -363,8 +363,6 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
|
||||
# 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_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_ICON_FILE "myicon.icns")
|
||||
# SET(MACOSX_BUNDLE_COPYRIGHT "")
|
||||
@@ -384,7 +382,7 @@ MACRO(SETUP_EXE IS_COMMANDLINE_APP)
|
||||
ENDIF(APPLE)
|
||||
|
||||
ADD_EXECUTABLE(${TARGET_TARGETNAME} ${PLATFORM_SPECIFIC_CONTROL} ${TARGET_SRC} ${TARGET_H})
|
||||
|
||||
|
||||
ENDIF(${IS_COMMANDLINE_APP})
|
||||
|
||||
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
|
||||
ENDIF(MSVC_IDE AND OSG_MSVC_VERSIONED_DLL)
|
||||
|
||||
IF(APPLE)
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES XCODE_ATTRIBUTE_WARNING_CFLAGS "")
|
||||
ENDIF()
|
||||
|
||||
SETUP_LINK_LIBRARIES()
|
||||
SETUP_LINK_LIBRARIES()
|
||||
|
||||
ENDMACRO(SETUP_EXE)
|
||||
|
||||
@@ -416,11 +410,11 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME)
|
||||
ELSE(${ARGC} GREATER 1)
|
||||
SET(IS_COMMANDLINE_APP 0)
|
||||
ENDIF(${ARGC} GREATER 1)
|
||||
|
||||
|
||||
SETUP_EXE(${IS_COMMANDLINE_APP})
|
||||
|
||||
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Applications")
|
||||
|
||||
|
||||
IF(APPLE)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
|
||||
ELSE(APPLE)
|
||||
@@ -445,13 +439,13 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME)
|
||||
ELSE(${ARGC} GREATER 1)
|
||||
SET(IS_COMMANDLINE_APP 0)
|
||||
ENDIF(${ARGC} GREATER 1)
|
||||
|
||||
|
||||
SETUP_EXE(${IS_COMMANDLINE_APP})
|
||||
|
||||
|
||||
SET_TARGET_PROPERTIES(${TARGET_TARGETNAME} PROPERTIES FOLDER "Examples")
|
||||
|
||||
|
||||
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)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples )
|
||||
ENDIF(APPLE)
|
||||
@@ -489,7 +483,7 @@ MACRO(HANDLE_MSVC_DLL)
|
||||
ENDIF(${ARGC} GREATER 1)
|
||||
|
||||
SET_OUTPUT_DIR_PROPERTY_260(${LIB_NAME} "") # Ensure the /Debug /Release are removed
|
||||
IF(NOT MSVC_IDE)
|
||||
IF(NOT MSVC_IDE)
|
||||
IF (NOT CMAKE24)
|
||||
BUILDER_VERSION_GREATER(2 8 0)
|
||||
IF(NOT VALID_BUILDER_VERSION)
|
||||
@@ -522,12 +516,8 @@ MACRO(HANDLE_MSVC_DLL)
|
||||
ELSE (NOT CMAKE24)
|
||||
SET_TARGET_PROPERTIES(${LIB_NAME} PROPERTIES PREFIX "../../bin/${LIB_PREFIX}${LIB_SOVERSION}-" IMPORT_PREFIX "../")
|
||||
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 IMPORT_PREFIX "../")
|
||||
ENDMACRO(HANDLE_MSVC_DLL)
|
||||
|
||||
MACRO(REMOVE_CXX_FLAG flag)
|
||||
STRING(REPLACE "${flag}" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
|
||||
ENDMACRO()
|
||||
|
||||
29
NEWS.txt
29
NEWS.txt
@@ -1,35 +1,6 @@
|
||||
OSG News
|
||||
========
|
||||
|
||||
= 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.
|
||||
|
||||
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.
|
||||
|
||||
@@ -23,7 +23,7 @@ more indepth instructions.
|
||||
|
||||
Robert Osfield.
|
||||
Project Lead.
|
||||
4th July 2014.
|
||||
24th July 2013.
|
||||
|
||||
--
|
||||
|
||||
|
||||
@@ -557,7 +557,6 @@ int main( int argc, char **argv )
|
||||
// if user request help write it out to cout.
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
osg::setNotifyLevel(osg::NOTICE);
|
||||
usage( arguments.getApplicationName().c_str(), 0 );
|
||||
//arguments.getApplicationUsage()->write(std::cout);
|
||||
return 1;
|
||||
|
||||
@@ -254,12 +254,7 @@ const char* invalidNames[] =
|
||||
"GraphicsContext*",
|
||||
"Apple",
|
||||
"GeometryNew",
|
||||
"FrameBufferObject",
|
||||
"Lua",
|
||||
"VolumeTile",
|
||||
"PushStackValueVisitor",
|
||||
"RayIntersector",
|
||||
"OpenSceneGraph-Data"
|
||||
"FrameBufferObject"
|
||||
};
|
||||
|
||||
|
||||
@@ -459,16 +454,7 @@ TypoCorrection typoCorrections[] =
|
||||
{"Eskland","Ekstrand"},
|
||||
{"Baeuerele","Baeuerle"},
|
||||
{"Bauerle","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"}
|
||||
{"Baeurele","Baeuerle"}
|
||||
};
|
||||
|
||||
|
||||
@@ -608,8 +594,6 @@ NameCorrection nameCorrections[] =
|
||||
"Romano", "Jos<EFBFBD> Magacho da Silva"},
|
||||
{"Rommano", "Silva",
|
||||
"Romano", "Jos<EFBFBD> Magacho da Silva"},
|
||||
{"Romano", "Magacho",
|
||||
"Romano", "Jos<EFBFBD> Magacho da Silva"},
|
||||
{"Leandro", "Motta",
|
||||
"Leandro", "Motta Barros"},
|
||||
{"Leandro", "Motto",
|
||||
@@ -635,9 +619,7 @@ NameCorrection nameCorrections[] =
|
||||
{"Tyge", "",
|
||||
"Tyge", "L<EFBFBD>vset"},
|
||||
{"Ricard", "Schmidt",
|
||||
"Richard", "Schmidt"},
|
||||
{"Matthias", "Helsing",
|
||||
"Mattias", "Helsing"}
|
||||
"Richard", "Schmidt"}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
#include <osgGA/Device>
|
||||
|
||||
#include <iostream>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <osg/GLExtensions>
|
||||
|
||||
@@ -91,7 +90,7 @@ public:
|
||||
if (!_extensionInitialized) setUpExtensions();
|
||||
|
||||
if (_glClientWaitSync)
|
||||
{
|
||||
{
|
||||
if (_previousSync)
|
||||
{
|
||||
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);
|
||||
|
||||
bool _extensionInitialized;
|
||||
|
||||
|
||||
PFNGLFENCESYNCPROC _glFenceSync;
|
||||
PFNGLISSYNCPROC _glIsSync;
|
||||
PFNGLDELETESYNCPROC _glDeleteSync;
|
||||
@@ -188,7 +187,7 @@ int main(int argc, char** argv)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::string device;
|
||||
while(arguments.read("--device", device))
|
||||
{
|
||||
|
||||
@@ -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 full license is in LICENSE.txt file included with this distribution,.
|
||||
*
|
||||
*
|
||||
* This software is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* 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 {
|
||||
public:
|
||||
ForwardToDeviceEventHandler(osgGA::Device* device) : osgGA::GUIEventHandler(), _device(device) {}
|
||||
|
||||
|
||||
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *)
|
||||
{
|
||||
OSG_INFO<<"ForwardToDeviceEventHandler::setEvent("<<ea.getKey()<<")"<<std::endl;
|
||||
_device->sendEvent(ea);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
osg::ref_ptr<osgGA::Device> _device;
|
||||
};
|
||||
@@ -161,7 +161,7 @@ class FollowMouseCallback: public osgGA::GUIEventHandler
|
||||
if (!transform) return false;
|
||||
|
||||
osg::NotifySeverity level = osg::INFO;
|
||||
|
||||
|
||||
switch(ea.getEventType())
|
||||
{
|
||||
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)
|
||||
{
|
||||
if (!loadedModel) return;
|
||||
|
||||
|
||||
#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.
|
||||
@@ -312,7 +312,7 @@ void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name)
|
||||
{
|
||||
OSG_INFO << "Adding Device : " << device_name << std::endl;
|
||||
viewer.addDevice(dev.get());
|
||||
|
||||
|
||||
if (dev->getCapabilities() & osgGA::Device::SEND_EVENTS)
|
||||
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.
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
|
||||
// set up the usage document, in case we need to print out how to use this program.
|
||||
arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName());
|
||||
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
|
||||
SDLIntegration sdlIntegration;
|
||||
|
||||
|
||||
osg::notify(osg::INFO)<<"USE_SDL"<<std::endl;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
||||
bool doSetViewer = true;
|
||||
std::string configurationFile;
|
||||
|
||||
@@ -402,7 +402,7 @@ int main( int argc, char **argv )
|
||||
while (arguments.read("-c",configurationFile)) {}
|
||||
|
||||
osg::Vec4 clearColor(0.0f,0.0f,0.0f,0.0f);
|
||||
|
||||
|
||||
while (arguments.read("--clear-color",clearColor[0],clearColor[1],clearColor[2],clearColor[3])) {}
|
||||
|
||||
std::string filename;
|
||||
@@ -441,7 +441,7 @@ int main( int argc, char **argv )
|
||||
|
||||
// construct the viewer.
|
||||
osgViewer::Viewer viewer(arguments);
|
||||
|
||||
|
||||
// set clear colour to black by default.
|
||||
viewer.getCamera()->setClearColor(clearColor);
|
||||
|
||||
@@ -467,12 +467,12 @@ int main( int argc, char **argv )
|
||||
while (arguments.read("--device", device))
|
||||
{
|
||||
addDeviceTo(viewer, device);
|
||||
|
||||
|
||||
}
|
||||
|
||||
if (arguments.read("--http-control"))
|
||||
{
|
||||
|
||||
|
||||
std::string server_address = "localhost";
|
||||
std::string server_port = "8080";
|
||||
std::string document_root = "htdocs";
|
||||
@@ -489,21 +489,11 @@ int main( int argc, char **argv )
|
||||
viewer.addDevice(rest_http_device.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// set up stereo masks
|
||||
|
||||
viewer.getCamera()->setCullMask(0xffffffff);
|
||||
viewer.getCamera()->setCullMaskLeft(0x00000001);
|
||||
viewer.getCamera()->setCullMaskRight(0x00000002);
|
||||
|
||||
bool assignLeftCullMaskForMono = true;
|
||||
if (assignLeftCullMaskForMono)
|
||||
{
|
||||
viewer.getCamera()->setCullMask(viewer.getCamera()->getCullMaskLeft());
|
||||
}
|
||||
else
|
||||
{
|
||||
viewer.getCamera()->setCullMask(0xffffffff);
|
||||
}
|
||||
viewer.getCamera()->setCullMaskRight(0x00000002);
|
||||
|
||||
// set up the camera manipulators.
|
||||
{
|
||||
@@ -519,7 +509,7 @@ int main( int argc, char **argv )
|
||||
while (arguments.read("-p",pathfile))
|
||||
{
|
||||
osgGA::AnimationPathManipulator* apm = new osgGA::AnimationPathManipulator(pathfile);
|
||||
if (apm || !apm->valid())
|
||||
if (apm || !apm->valid())
|
||||
{
|
||||
unsigned int num = keyswitchManipulator->getNumMatrixManipulators();
|
||||
keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm );
|
||||
@@ -557,12 +547,12 @@ int main( int argc, char **argv )
|
||||
bool hideCursor = (showCursor=="No" || showCursor=="NO" || showCursor=="no");
|
||||
|
||||
while (arguments.read("--set-viewer")) { doSetViewer = true; }
|
||||
|
||||
|
||||
while (arguments.read("--no-set-viewer")) { doSetViewer = false; }
|
||||
|
||||
// if we want to hide the cursor override the custom cursor.
|
||||
if (hideCursor) cursorFileName.clear();
|
||||
|
||||
|
||||
|
||||
// cluster related entries.
|
||||
int socketNumber=8100;
|
||||
@@ -609,7 +599,7 @@ int main( int argc, char **argv )
|
||||
viewer.getUpdateVisitor()->setTraversalMode(updateTraversalMode);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 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);
|
||||
viewer.addEventHandler(seh.get());
|
||||
@@ -630,7 +620,7 @@ int main( int argc, char **argv )
|
||||
// set up optimizer options
|
||||
unsigned int optimizer_options = osgUtil::Optimizer::DEFAULT_OPTIMIZATIONS;
|
||||
bool relase_and_compile = false;
|
||||
while (arguments.read("--release-and-compile"))
|
||||
while (arguments.read("--release-and-compile"))
|
||||
{
|
||||
relase_and_compile = true;
|
||||
}
|
||||
@@ -641,7 +631,7 @@ int main( int argc, char **argv )
|
||||
viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
|
||||
optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS;
|
||||
}
|
||||
//
|
||||
//
|
||||
// osgDB::Registry::instance()->getOrCreateDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
|
||||
// optimizer_options &= ~osgUtil::Optimizer::OPTIMIZE_TEXTURE_SETTINGS;
|
||||
// osg::Texture::getTextureObjectManager()->setExpiryDelay(0.0f);
|
||||
@@ -667,7 +657,7 @@ int main( int argc, char **argv )
|
||||
float width = osg::DisplaySettings::instance()->getScreenWidth();
|
||||
float height = osg::DisplaySettings::instance()->getScreenHeight();
|
||||
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()->setScreenHeight(height);
|
||||
@@ -697,11 +687,11 @@ int main( int argc, char **argv )
|
||||
else if (strcmp(str,"master")==0) P3DApplicationType = MASTER;
|
||||
else if (strcmp(str,"slave")==0) P3DApplicationType = SLAVE;
|
||||
}
|
||||
|
||||
|
||||
while (arguments.read("--viewer")) { P3DApplicationType = VIEWER; }
|
||||
while (arguments.read("--master")) { P3DApplicationType = MASTER; }
|
||||
while (arguments.read("--slave")) { P3DApplicationType = SLAVE; }
|
||||
|
||||
|
||||
while (arguments.read("--version"))
|
||||
{
|
||||
std::string appTypeName = "invalid";
|
||||
@@ -790,7 +780,7 @@ int main( int argc, char **argv )
|
||||
|
||||
|
||||
// if no model has been successfully loaded report failure.
|
||||
if (!loadedModel)
|
||||
if (!loadedModel)
|
||||
{
|
||||
osg::notify(osg::INFO) << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
return 1;
|
||||
@@ -806,12 +796,12 @@ int main( int argc, char **argv )
|
||||
for(unsigned int i=0; i<loadedModel->getNumDescriptions(); ++i)
|
||||
{
|
||||
const std::string& desc = loadedModel->getDescription(i);
|
||||
if (desc=="loop")
|
||||
if (desc=="loop")
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Enabling looping"<<std::endl;
|
||||
seh->setLoopPresentation(true);
|
||||
}
|
||||
else if (desc=="auto")
|
||||
else if (desc=="auto")
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Enabling auto run"<<std::endl;
|
||||
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.
|
||||
seh->set(loadedModel.get());
|
||||
@@ -853,7 +843,7 @@ int main( int argc, char **argv )
|
||||
osgDB::writeNodeFile(*loadedModel,outputFileName);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!cursorFileName.empty() || hideCursor)
|
||||
{
|
||||
@@ -875,7 +865,7 @@ int main( int argc, char **argv )
|
||||
|
||||
osg::Timer_t startOfFrameTick = osg::Timer::instance()->tick();
|
||||
double targetFrameTime = 1.0/targetFrameRate;
|
||||
|
||||
|
||||
if (exportName.empty())
|
||||
{
|
||||
// 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();
|
||||
|
||||
#if 0
|
||||
#if 0
|
||||
if (kmcb)
|
||||
{
|
||||
double time = kmcb->getTime();
|
||||
@@ -920,9 +910,9 @@ int main( int argc, char **argv )
|
||||
{
|
||||
// take camera zero as the guide.
|
||||
osg::Matrix modelview(viewer.getCamera()->getViewMatrix());
|
||||
|
||||
|
||||
cp.setPacket(modelview,viewer.getFrameStamp());
|
||||
|
||||
|
||||
// cp.readEventQueue(viewer);
|
||||
|
||||
scratchPad.reset();
|
||||
@@ -932,7 +922,7 @@ int main( int argc, char **argv )
|
||||
scratchPad.read(cp);
|
||||
|
||||
bc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes());
|
||||
|
||||
|
||||
std::cout << "bc.sync()"<<scratchPad.numBytes()<<std::endl;
|
||||
|
||||
bc.sync();
|
||||
@@ -942,13 +932,13 @@ int main( int argc, char **argv )
|
||||
rc.setBuffer(scratchPad.startPtr(), scratchPad.numBytes());
|
||||
|
||||
rc.sync();
|
||||
|
||||
|
||||
scratchPad.reset();
|
||||
scratchPad.read(cp);
|
||||
|
||||
|
||||
// cp.writeEventQueue(viewer);
|
||||
|
||||
if (cp.getMasterKilled())
|
||||
if (cp.getMasterKilled())
|
||||
{
|
||||
std::cout << "Received master killed."<<std::endl;
|
||||
// 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);
|
||||
|
||||
continue;
|
||||
|
||||
|
||||
}
|
||||
|
||||
// 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);
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
static const char* computeSrc = {
|
||||
"#version 430\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"
|
||||
"void main() {\n"
|
||||
" ivec2 storePos = ivec2(gl_GlobalInvocationID.xy);\n"
|
||||
|
||||
@@ -99,14 +99,12 @@ Node *makeTerrain( void )
|
||||
|
||||
for( i = 0; i < m * n; i++ )
|
||||
{
|
||||
float* vc = vertex[i];
|
||||
v[i][0] = vc[0] - dbcenter[0];
|
||||
v[i][1] = vc[1] - dbcenter[1];
|
||||
v[i][2] = vc[2];
|
||||
v[i][0] = vertex[i][0] - dbcenter[0];
|
||||
v[i][1] = vertex[i][1] - dbcenter[1];
|
||||
v[i][2] = vertex[i][2];
|
||||
|
||||
float* tc = texcoord[i];
|
||||
t[i][0] = tc[0];
|
||||
t[i][1] = tc[1];
|
||||
t[i][0] = texcoord[i][0] + 0.025;
|
||||
t[i][1] = texcoord[i][1];
|
||||
}
|
||||
|
||||
Geometry *geom = new Geometry;
|
||||
|
||||
@@ -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_ADDED_LIBRARIES osgGA )
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
FILE(GLOB ui_files_1 "English.lproj/*.strings")
|
||||
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_SOURCE_FILES_PROPERTIES(Info.plist PROPERTIES MACOSX_PACKAGE_LOCATION .)
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
*/
|
||||
|
||||
//
|
||||
// main.mm
|
||||
// main.m
|
||||
// osgsimpleviewerCocoa
|
||||
//
|
||||
// Created by Eric Wing on 11/13/06.
|
||||
@@ -1,19 +1,17 @@
|
||||
SET(TARGET_SRC
|
||||
iphoneViewerAppDelegate.h
|
||||
SET(TARGET_SRC
|
||||
iphoneViewerAppDelegate.h
|
||||
iphoneViewerAppDelegate.mm
|
||||
main.m
|
||||
osgPlugins.h
|
||||
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
|
||||
SET(TMP_OSG_BUILD_APPLICATION_BUNDLES {$OSG_BUILD_APPLICATION_BUNDLES})
|
||||
SET(OSG_BUILD_APPLICATION_BUNDLES TRUE)
|
||||
SETUP_EXAMPLE(osgViewerIPhone)
|
||||
SET_TARGET_PROPERTIES(example_osgViewerIPhone PROPERTIES XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer")
|
||||
|
||||
#restore setting
|
||||
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")
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/CameraNode>
|
||||
#include <osgText/Text>
|
||||
#include <osgViewer/Viewer>
|
||||
|
||||
@@ -16,7 +17,7 @@
|
||||
|
||||
UIWindow* _window; //main application window
|
||||
|
||||
CADisplayLink* _displayLink;
|
||||
UIAccelerationValue accel[3];
|
||||
|
||||
osg::ref_ptr<osgViewer::Viewer> _viewer;
|
||||
osg::ref_ptr<osg::MatrixTransform> _root;
|
||||
|
||||
@@ -1,243 +1,39 @@
|
||||
// Created by Thomas Hogarth 2009
|
||||
// cleaned up by Stephan Huber 2013
|
||||
//Created by Thomas Hogarth 2009
|
||||
|
||||
//
|
||||
//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"
|
||||
#include <osgGA/MultiTouchTrackballManipulator>
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osg/ShapeDrawable>
|
||||
|
||||
//include the iphone specific windowing stuff
|
||||
//inckude the iphone specific windowing stuff
|
||||
#include <osgViewer/api/IOS/GraphicsWindowIOS>
|
||||
|
||||
|
||||
#define kAccelerometerFrequency 30.0 // Hz
|
||||
#define kFilteringFactor 0.1
|
||||
|
||||
@implementation iphoneViewerAppDelegate
|
||||
|
||||
@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
|
||||
//
|
||||
- (void)applicationDidFinishLaunching:(UIApplication *)application {
|
||||
|
||||
std::string test_string;
|
||||
test_string = "huhu";
|
||||
|
||||
//get the screen size
|
||||
CGRect lFrame = [[UIScreen mainScreen] bounds];
|
||||
unsigned int w = lFrame.size.width;
|
||||
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
|
||||
self._window = [[UIWindow alloc] initWithFrame: lFrame];
|
||||
|
||||
@@ -245,7 +41,7 @@ private:
|
||||
[_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;
|
||||
|
||||
// Init the Windata Variable that holds the handle for the Window to display OSG in.
|
||||
@@ -257,65 +53,97 @@ private:
|
||||
traits->width = w;
|
||||
traits->height = h;
|
||||
traits->depth = 16; //keep memory down, default is currently 24
|
||||
//traits->alpha = 8;
|
||||
//traits->stencil = 8;
|
||||
traits->windowDecoration = false;
|
||||
traits->doubleBuffer = true;
|
||||
traits->sharedContext = 0;
|
||||
traits->setInheritedWindowPixelFormat = true;
|
||||
traits->samples = 4;
|
||||
traits->sampleBuffers = 1;
|
||||
|
||||
//traits->windowName = "osgViewer";
|
||||
|
||||
traits->inheritedWindowData = windata;
|
||||
|
||||
// Create the Graphics Context
|
||||
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)
|
||||
{
|
||||
_viewer->getCamera()->setGraphicsContext(graphicsContext);
|
||||
_viewer->getCamera()->setViewport(new osg::Viewport(0, 0, traits->width, traits->height));
|
||||
}
|
||||
*/
|
||||
|
||||
//create scene and attch to viewer
|
||||
|
||||
//create root
|
||||
_root = new osg::MatrixTransform();
|
||||
|
||||
//load and attach scene model
|
||||
osg::ref_ptr<osg::Node> model = (osgDB::readNodeFile("hog.osg"));
|
||||
if (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);
|
||||
}
|
||||
_root->addChild(model);
|
||||
|
||||
osg::Camera* hud_camera = createHUD(w,h);
|
||||
_root->addChild(hud_camera);
|
||||
|
||||
|
||||
_viewer->setSceneData(_root.get());
|
||||
_viewer->setCameraManipulator(new osgGA::MultiTouchTrackballManipulator());
|
||||
|
||||
_viewer->addEventHandler(new TestMultiTouchEventHandler(hud_camera));
|
||||
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);
|
||||
|
||||
|
||||
// sun single-threaded
|
||||
_viewer->setThreadingModel(osgViewer::Viewer::SingleThreaded);
|
||||
//create and attach ortho camera for hud text
|
||||
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
|
||||
_viewer->frame();
|
||||
// set the view matrix
|
||||
_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
|
||||
_displayLink = [application.keyWindow.screen displayLinkWithTarget:self selector:@selector(updateScene)];
|
||||
[_displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
|
||||
// draw subgraph after main camera view.
|
||||
_hudCamera->setRenderOrder(osg::CameraNode::POST_RENDER);
|
||||
_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 {
|
||||
if (_displayLink)
|
||||
[_displayLink invalidate];
|
||||
_displayLink = NULL;
|
||||
-(void)applicationWillTerminate:(UIApplication *)application{
|
||||
_root = 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 {
|
||||
|
||||
@@ -14,6 +14,6 @@ USE_GRAPICSWINDOW_IMPLEMENTATION(IOS)
|
||||
USE_OSGPLUGIN(osg)
|
||||
|
||||
USE_OSGPLUGIN(imageio)
|
||||
USE_OSGPLUGIN(avfoundation)
|
||||
//USE_OSGPLUGIN(freetype)
|
||||
|
||||
USE_OSGPLUGIN(freetype)
|
||||
|
||||
|
||||
@@ -97,8 +97,8 @@ void cOSG::InitCameraConfig(void)
|
||||
// Create the Graphics Context
|
||||
osg::GraphicsContext* gc = osg::GraphicsContext::createGraphicsContext(traits.get());
|
||||
|
||||
// Init Master Camera for this View
|
||||
osg::ref_ptr<osg::Camera> camera = mViewer->getCamera();
|
||||
// Init a new Camera (Master for this View)
|
||||
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
|
||||
|
||||
// Assign Graphics Context to the Camera
|
||||
camera->setGraphicsContext(gc);
|
||||
|
||||
@@ -93,13 +93,7 @@ int main( int argc, char** 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;
|
||||
#endif
|
||||
|
||||
while (arguments.read("--SingleThreaded")) threadingModel = osgViewer::ViewerBase::SingleThreaded;
|
||||
while (arguments.read("--CullDrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::CullDrawThreadPerContext;
|
||||
while (arguments.read("--DrawThreadPerContext")) threadingModel = osgViewer::ViewerBase::DrawThreadPerContext;
|
||||
|
||||
@@ -1115,8 +1115,7 @@ int main( int argc, char **argv )
|
||||
if (image_3d.valid())
|
||||
{
|
||||
image_3d->setFileName(name_no_ext + ".dds");
|
||||
osg::ref_ptr<osgDB::Options> options = new osgDB::Options("ddsNoAutoFlipWrite");;
|
||||
osgDB::writeImageFile(*image_3d, image_3d->getFileName(), options.get());
|
||||
osgDB::writeImageFile(*image_3d, image_3d->getFileName());
|
||||
}
|
||||
osgDB::writeNodeFile(*volume, outputFile);
|
||||
}
|
||||
|
||||
@@ -20,8 +20,8 @@ extern "C" {
|
||||
|
||||
#define OPENTHREADS_MAJOR_VERSION 3
|
||||
#define OPENTHREADS_MINOR_VERSION 2
|
||||
#define OPENTHREADS_PATCH_VERSION 1
|
||||
#define OPENTHREADS_SOVERSION 20
|
||||
#define OPENTHREADS_PATCH_VERSION 0
|
||||
#define OPENTHREADS_SOVERSION 13
|
||||
|
||||
/** OpenThreadsGetVersion() returns the library version number.
|
||||
* Numbering convention : OpenThreads-1.0 will return 1.0 from OpenThreadsGetVersion. */
|
||||
|
||||
@@ -51,12 +51,6 @@ class BoundingBoxImpl
|
||||
-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. */
|
||||
inline BoundingBoxImpl(value_type xmin, value_type ymin, value_type zmin,
|
||||
value_type xmax, value_type ymax, value_type zmax) :
|
||||
@@ -79,9 +73,6 @@ class BoundingBoxImpl
|
||||
-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. */
|
||||
inline bool valid() const
|
||||
{
|
||||
@@ -198,8 +189,7 @@ class BoundingBoxImpl
|
||||
|
||||
/** Expands this bounding box to include the given sphere.
|
||||
* If this box is uninitialized, set it to include sh. */
|
||||
template<typename BST>
|
||||
void expandBy(const BoundingSphereImpl<BST>& sh)
|
||||
void expandBy(const BoundingSphereImpl<VT>& sh)
|
||||
{
|
||||
if (!sh.valid()) return;
|
||||
|
||||
@@ -237,15 +227,6 @@ class BoundingBoxImpl
|
||||
(v.y()>=_min.y() && v.y()<=_max.y()) &&
|
||||
(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;
|
||||
|
||||
@@ -63,9 +63,6 @@ class BoundingSphereImpl
|
||||
* otherwise. */
|
||||
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. */
|
||||
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
|
||||
* sphere center to minimize the radius increase. */
|
||||
template<typename BBT>
|
||||
void expandBy(const BoundingBoxImpl<BBT>& bb);
|
||||
void expandBy(const BoundingBoxImpl<VT>& bb);
|
||||
|
||||
/** Expands the sphere to encompass the given box. Does not
|
||||
* repositions the sphere center. */
|
||||
template<typename BBT>
|
||||
void expandRadiusBy(const BoundingBoxImpl<BBT>& bb);
|
||||
void expandRadiusBy(const BoundingBoxImpl<VT>& bb);
|
||||
|
||||
/** Returns true if v is within the sphere. */
|
||||
inline bool contains(const vec_type& v) const
|
||||
@@ -140,12 +135,12 @@ class BoundingSphereImpl
|
||||
|
||||
|
||||
template<typename VT>
|
||||
template<typename vector_type>
|
||||
template<typename vector_type>
|
||||
void BoundingSphereImpl<VT>::expandBy(const vector_type& v)
|
||||
{
|
||||
if (valid())
|
||||
{
|
||||
vec_type dv = vec_type(v)-_center;
|
||||
vec_type dv = v-_center;
|
||||
value_type r = dv.length();
|
||||
if (r>_radius)
|
||||
{
|
||||
@@ -162,12 +157,12 @@ void BoundingSphereImpl<VT>::expandBy(const vector_type& v)
|
||||
}
|
||||
|
||||
template<typename VT>
|
||||
template<typename vector_type>
|
||||
template<typename vector_type>
|
||||
void BoundingSphereImpl<VT>::expandRadiusBy(const vector_type& v)
|
||||
{
|
||||
if (valid())
|
||||
{
|
||||
value_type r = (vec_type(v)-_center).length();
|
||||
value_type r = (v-_center).length();
|
||||
if (r>_radius) _radius = r;
|
||||
// else do nothing as vertex is within sphere.
|
||||
}
|
||||
@@ -249,8 +244,7 @@ void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingSphereImpl& sh)
|
||||
}
|
||||
|
||||
template<typename VT>
|
||||
template<typename BBT>
|
||||
void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<BBT>& bb)
|
||||
void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<VT>& bb)
|
||||
{
|
||||
if (bb.valid())
|
||||
{
|
||||
@@ -280,8 +274,7 @@ void BoundingSphereImpl<VT>::expandBy(const BoundingBoxImpl<BBT>& bb)
|
||||
}
|
||||
|
||||
template<typename VT>
|
||||
template<typename BBT>
|
||||
void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingBoxImpl<BBT>& bb)
|
||||
void BoundingSphereImpl<VT>::expandRadiusBy(const BoundingBoxImpl<VT>& bb)
|
||||
{
|
||||
if (bb.valid())
|
||||
{
|
||||
|
||||
@@ -680,19 +680,6 @@ class OSG_EXPORT Camera : public Transform, public CullSettings
|
||||
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
|
||||
|
||||
@@ -418,11 +418,6 @@ namespace osg
|
||||
|
||||
void apply(State &state) const;
|
||||
|
||||
inline GLuint getHandle(unsigned int contextID) const
|
||||
{
|
||||
return _fboID[contextID];
|
||||
}
|
||||
|
||||
enum BindTarget
|
||||
{
|
||||
READ_FRAMEBUFFER = GL_READ_FRAMEBUFFER_EXT,
|
||||
|
||||
@@ -385,6 +385,8 @@ typedef char GLchar;
|
||||
#define GL_TEXTURE_BINDING_RECTANGLE 0x84F6
|
||||
#define GL_PROXY_TEXTURE_RECTANGLE 0x84F7
|
||||
#define GL_MAX_RECTANGLE_TEXTURE_SIZE 0x84F8
|
||||
#define GL_RED_SNORM 0x8F90
|
||||
#define GL_RG_SNORM 0x8F91
|
||||
#define GL_RGB_SNORM 0x8F92
|
||||
#define GL_RGBA_SNORM 0x8F93
|
||||
#define GL_R8_SNORM 0x8F94
|
||||
@@ -400,14 +402,6 @@ typedef char GLchar;
|
||||
#define GL_PRIMITIVE_RESTART_INDEX 0x8F9E
|
||||
#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
|
||||
#define GL_SAMPLER_CUBE_MAP_ARRAY 0x900C
|
||||
#define GL_SAMPLER_CUBE_MAP_ARRAY_SHADOW 0x900D
|
||||
|
||||
@@ -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. */
|
||||
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;
|
||||
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;
|
||||
return _data+(column*getPixelSizeInBits())/8+row*getRowStepInBytes()+image*getImageSizeInBytes();
|
||||
|
||||
@@ -34,6 +34,10 @@ const double LN_2 = 0.69314718055994530942;
|
||||
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>
|
||||
inline T absolute(T v) { return v<(T)0?-v:v; }
|
||||
|
||||
|
||||
@@ -201,11 +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. */
|
||||
inline void removeUpdateCallback(NodeCallback* nc) {
|
||||
if (nc != NULL && _updateCallback.valid()) {
|
||||
if (_updateCallback == nc)
|
||||
{
|
||||
setUpdateCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
nc->setNestedCallback(0);
|
||||
}
|
||||
if (_updateCallback == nc) setUpdateCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
else _updateCallback->removeNestedCallback(nc);
|
||||
}
|
||||
}
|
||||
@@ -235,11 +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. */
|
||||
inline void removeEventCallback(NodeCallback* nc) {
|
||||
if (nc != NULL && _eventCallback.valid()) {
|
||||
if (_eventCallback == nc)
|
||||
{
|
||||
setEventCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
nc->setNestedCallback(0);
|
||||
}
|
||||
if (_eventCallback == nc) setEventCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
else _eventCallback->removeNestedCallback(nc);
|
||||
}
|
||||
}
|
||||
@@ -269,11 +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. */
|
||||
inline void removeCullCallback(NodeCallback* nc) {
|
||||
if (nc != NULL && _cullCallback.valid()) {
|
||||
if (_cullCallback == nc)
|
||||
{
|
||||
setCullCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
nc->setNestedCallback(0);
|
||||
}
|
||||
if (_cullCallback == nc) setCullCallback(nc->getNestedCallback()); // replace the callback by the nested one
|
||||
else _cullCallback->removeNestedCallback(nc);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
* false if selection failed such as when multi texturing is not supported.
|
||||
* note, only updates values that change.*/
|
||||
|
||||
@@ -20,7 +20,7 @@ extern "C" {
|
||||
|
||||
#define OPENSCENEGRAPH_MAJOR_VERSION 3
|
||||
#define OPENSCENEGRAPH_MINOR_VERSION 2
|
||||
#define OPENSCENEGRAPH_PATCH_VERSION 1
|
||||
#define OPENSCENEGRAPH_PATCH_VERSION 0
|
||||
#define OPENSCENEGRAPH_SOVERSION 100
|
||||
|
||||
/* Convenience macro that can be used to decide whether a feature is present or not i.e.
|
||||
|
||||
@@ -89,7 +89,6 @@ public:
|
||||
// Serialization related functions
|
||||
OutputStream& operator<<( bool b ) { _out->writeBool(b); 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<<( short s ) { _out->writeShort(s); return *this; }
|
||||
OutputStream& operator<<( unsigned short s ) { _out->writeUShort(s); return *this; }
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
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
|
||||
{
|
||||
|
||||
@@ -38,7 +38,7 @@ class OSGSHADOW_EXPORT ShadowSettings : public osg::Object
|
||||
void setComputeNearFarModeOverride(osg::CullSettings::ComputeNearFarMode cnfn) { _computeNearFearModeOverride = cnfn; }
|
||||
osg::CullSettings::ComputeNearFarMode getComputeNearFarModeOverride() const { return _computeNearFearModeOverride; }
|
||||
|
||||
|
||||
|
||||
/** 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
|
||||
* 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; }
|
||||
double getMaximumShadowMapDistance() const { return _maximumShadowMapDistance; }
|
||||
|
||||
|
||||
|
||||
enum ShadowMapProjectionHint
|
||||
{
|
||||
@@ -144,4 +144,4 @@ class OSGSHADOW_EXPORT ShadowSettings : public osg::Object
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -51,7 +51,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
|
||||
SKY_LIGHT = 0x2,
|
||||
COMPILE_GLOBJECTS_AT_INIT = 0x4,
|
||||
APPLY_GLOBAL_DEFAULTS = 0x8,
|
||||
CLEAR_GLOBAL_STATESET = 0x10,
|
||||
CLEAR_GLOBAL_STATESET = 0x16,
|
||||
STANDARD_SETTINGS = HEADLIGHT |
|
||||
COMPILE_GLOBJECTS_AT_INIT |
|
||||
APPLY_GLOBAL_DEFAULTS |
|
||||
@@ -495,7 +495,7 @@ class OSGUTIL_EXPORT SceneView : public osg::Object, public osg::CullSettings
|
||||
bool getAutomaticFlush() const { return _automaticFlush; }
|
||||
|
||||
void setResetColorMaskToAllOn(bool enable) { _resetColorMaskToAllEnabled = enable; }
|
||||
bool getResetColorMaskToAllOn() const { return _resetColorMaskToAllEnabled; }
|
||||
bool setResetColorMaskToAllOn() const { return _resetColorMaskToAllEnabled; }
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -207,7 +207,6 @@ class OSGUTIL_EXPORT StateGraph : public osg::Referenced
|
||||
|
||||
// use return path to trace back steps to sg_new.
|
||||
std::vector<StateGraph*> return_path;
|
||||
return_path.reserve(sg_new->_depth+1);
|
||||
|
||||
// need to pop back root render graph.
|
||||
do
|
||||
@@ -249,7 +248,6 @@ class OSGUTIL_EXPORT StateGraph : public osg::Referenced
|
||||
|
||||
// use return path to trace back steps to sg_new.
|
||||
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.
|
||||
while (sg_new->_depth>sg_curr->_depth)
|
||||
|
||||
@@ -24,23 +24,23 @@
|
||||
|
||||
namespace osgViewer
|
||||
{
|
||||
|
||||
|
||||
class OSGVIEWER_EXPORT Keystone : public osg::Object
|
||||
{
|
||||
public:
|
||||
Keystone();
|
||||
|
||||
Keystone(const Keystone& rhs, const osg::CopyOp& copop=osg::CopyOp::SHALLOW_COPY);
|
||||
|
||||
|
||||
META_Object(osgViewer, Keystone)
|
||||
|
||||
void reset();
|
||||
|
||||
Keystone& operator = (const Keystone& rhs);
|
||||
|
||||
|
||||
void setKeystoneEditingEnabled(bool flag) { keystoneEditingEnabled = flag; }
|
||||
bool getKeystoneEditingEnabled() const { return keystoneEditingEnabled; }
|
||||
|
||||
|
||||
void setGridColor(const osg::Vec4& color) { gridColour = color; }
|
||||
osg::Vec4& getGridColor() { return gridColour; }
|
||||
const osg::Vec4& getGridColor() const { return gridColour; }
|
||||
@@ -61,23 +61,23 @@ public:
|
||||
osg::Vec2d& getTopRight() { 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;
|
||||
|
||||
|
||||
osg::Geode* createKeystoneDistortionMesh();
|
||||
|
||||
|
||||
osg::Node* createGrid();
|
||||
|
||||
|
||||
/** Write the file specified by the "filename" user value field. Return true if file successfully written. */
|
||||
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.*/
|
||||
static bool loadKeystoneFiles(osg::DisplaySettings* ds);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
protected:
|
||||
|
||||
bool keystoneEditingEnabled;
|
||||
|
||||
osg::Vec4 gridColour;
|
||||
@@ -91,8 +91,8 @@ protected:
|
||||
protected:
|
||||
|
||||
virtual ~Keystone() {}
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
class OSGVIEWER_EXPORT KeystoneHandler : public osgGA::GUIEventHandler
|
||||
@@ -125,7 +125,7 @@ public:
|
||||
osg::Vec2d incrementScale(const osgGA::GUIEventAdapter& ea) const;
|
||||
Region computeRegion(const osgGA::GUIEventAdapter& ea) const;
|
||||
void move(Region region, const osg::Vec2d& delta);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
@@ -138,7 +138,7 @@ protected:
|
||||
|
||||
osg::Vec2d _startPosition;
|
||||
osg::ref_ptr<Keystone> _startControlPoints;
|
||||
|
||||
|
||||
Region _selectedRegion;
|
||||
osg::ref_ptr<Keystone> _currentControlPoints;
|
||||
|
||||
@@ -146,4 +146,4 @@ protected:
|
||||
|
||||
}
|
||||
|
||||
#endif
|
||||
#endif
|
||||
@@ -4,8 +4,8 @@ ADD_DEFINITIONS(-DOPENTHREADS_EXPORTS)
|
||||
|
||||
SET(OPENTHREADS_MAJOR_VERSION 3)
|
||||
SET(OPENTHREADS_MINOR_VERSION 2)
|
||||
SET(OPENTHREADS_PATCH_VERSION 1)
|
||||
SET(OPENTHREADS_SOVERSION 20)
|
||||
SET(OPENTHREADS_PATCH_VERSION 0)
|
||||
SET(OPENTHREADS_SOVERSION 13)
|
||||
|
||||
SET(OPENTHREADS_VERSION ${OPENTHREADS_MAJOR_VERSION}.${OPENTHREADS_MINOR_VERSION}.${OPENTHREADS_PATCH_VERSION})
|
||||
|
||||
|
||||
@@ -149,30 +149,7 @@ private:
|
||||
#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;
|
||||
tcs.thread = thread;
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
#include <string.h>
|
||||
|
||||
#include <osg/ApplicationUsage>
|
||||
#include <osg/Object>
|
||||
#include <osg/Math>
|
||||
#include <osg/ref_ptr>
|
||||
|
||||
@@ -34,8 +33,6 @@ ApplicationUsage* ApplicationUsage::instance()
|
||||
return s_applicationUsage.get();
|
||||
}
|
||||
|
||||
OSG_INIT_SINGLETON_PROXY(ApplicationUsageSingletonProxy, ApplicationUsage::instance())
|
||||
|
||||
void ApplicationUsage::addUsageExplanation(Type type,const std::string& option,const std::string& explanation)
|
||||
{
|
||||
switch(type)
|
||||
@@ -72,7 +69,7 @@ void ApplicationUsage::addKeyboardMouseBinding(const std::string& prefix, int ke
|
||||
{
|
||||
std::ostringstream ostr;
|
||||
ostr<<prefix;
|
||||
|
||||
|
||||
if (key==' ')
|
||||
{
|
||||
ostr<<"Space";
|
||||
|
||||
@@ -225,26 +225,21 @@ void CollectOccludersVisitor::removeOccludedOccluders()
|
||||
break;
|
||||
}
|
||||
|
||||
// now check all the holes in the occludee against the occluder, and remove the ones that won't be valid
|
||||
unsigned int previous_valid_hole_i = 0;
|
||||
for(unsigned int i=0; i<holeList.size(); ++i)
|
||||
// now check all the holes in the occludee against the occluder,
|
||||
// do so in reverse order so that the iterators remain valid.
|
||||
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)
|
||||
{
|
||||
// copy valid holes into gaps left by invalid ones
|
||||
holeList[previous_valid_hole_i] = holeList[i];
|
||||
}
|
||||
|
||||
previous_valid_hole_i++;
|
||||
holeList.erase((++holeItr).base());
|
||||
}
|
||||
else
|
||||
{
|
||||
++holeItr;
|
||||
}
|
||||
}
|
||||
|
||||
// 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());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -105,8 +105,7 @@ FBOExtensions::FBOExtensions(unsigned int contextID)
|
||||
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
|
||||
_supported = _supported &&
|
||||
glFramebufferTexture1D != 0 &&
|
||||
glFramebufferTexture3D != 0 &&
|
||||
isGLExtensionOrVersionSupported(contextID, "GL_EXT_framebuffer_object",3.0f);
|
||||
glFramebufferTexture3D != 0;
|
||||
#endif
|
||||
|
||||
LOAD_FBO_EXT(glBlitFramebuffer);
|
||||
@@ -914,19 +913,16 @@ void FrameBufferObject::apply(State &state, BindTarget target) const
|
||||
ext->glBindFramebuffer(target, fboID);
|
||||
|
||||
// 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 );
|
||||
if (gl2e && gl2e->isDrawBuffersSupported())
|
||||
{
|
||||
gl2e->glDrawBuffers(_drawBuffers.size(), &(_drawBuffers[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
OSG_WARN <<"Warning: FrameBufferObject: could not set draw buffers, glDrawBuffers is not supported!" << std::endl;
|
||||
}
|
||||
gl2e->glDrawBuffers(_drawBuffers.size(), &(_drawBuffers[0]));
|
||||
}
|
||||
else
|
||||
{
|
||||
OSG_WARN <<"Warning: FrameBufferObject: could not set draw buffers, glDrawBuffers is not supported!" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1427,7 +1427,7 @@ void Geometry::fixDeprecatedData()
|
||||
case(PrimitiveSet::DrawArraysPrimitiveType):
|
||||
{
|
||||
const DrawArrays* drawArray = static_cast<const DrawArrays*>(primitiveset);
|
||||
numVertices += drawArray->getCount();
|
||||
numVertices = drawArray->getCount();
|
||||
break;
|
||||
}
|
||||
case(PrimitiveSet::DrawArrayLengthsPrimitiveType):
|
||||
@@ -1439,6 +1439,7 @@ void Geometry::fixDeprecatedData()
|
||||
{
|
||||
unsigned int localNumVertices = *primItr;
|
||||
numVertices += localNumVertices;
|
||||
primItr += localNumVertices;
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1539,8 +1540,7 @@ void Geometry::fixDeprecatedData()
|
||||
|
||||
// start the primitiveNum at -1 as we increment it the first time through when
|
||||
// we start processing the primitive sets.
|
||||
int target_vindex = 0;
|
||||
int source_pindex = -1; // equals primitiveNum
|
||||
int primitiveNum = -1;
|
||||
for(PrimitiveSetList::iterator itr = _primitives.begin();
|
||||
itr != _primitives.end();
|
||||
++itr)
|
||||
@@ -1559,27 +1559,27 @@ void Geometry::fixDeprecatedData()
|
||||
}
|
||||
|
||||
// copy the vertex data across to the new arays
|
||||
int source_pindex = -1;
|
||||
int target_vindex = 0;
|
||||
switch(primitiveset->getType())
|
||||
{
|
||||
case(PrimitiveSet::DrawArraysPrimitiveType):
|
||||
{
|
||||
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();
|
||||
|
||||
unsigned int primCount=0;
|
||||
unsigned int startindex=drawArray->getFirst();
|
||||
drawArray->setFirst(target_vindex);
|
||||
unsigned int indexEnd = startindex+drawArray->getCount();
|
||||
for(unsigned int vindex=startindex;
|
||||
unsigned int indexEnd = drawArray->getFirst()+drawArray->getCount();
|
||||
for(unsigned int vindex=drawArray->getFirst();
|
||||
vindex<indexEnd;
|
||||
++vindex, ++target_vindex, ++primCount)
|
||||
{
|
||||
if ((primCount%primLength)==0) ++source_pindex;
|
||||
|
||||
// copy bind per vertex from vindex
|
||||
// copy bind per primitive from primitiveNum
|
||||
for(PtrList::iterator itr = perVertexPtrs.begin();
|
||||
itr != perVertexPtrs.end();
|
||||
++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();
|
||||
itr != perPrimitivePtrs.end();
|
||||
++itr)
|
||||
@@ -1611,22 +1611,23 @@ void Geometry::fixDeprecatedData()
|
||||
}
|
||||
case(PrimitiveSet::DrawArrayLengthsPrimitiveType):
|
||||
{
|
||||
DrawArrayLengths* drawArrayLengths = static_cast<DrawArrayLengths*>(primitiveset);
|
||||
const DrawArrayLengths* drawArrayLengths = static_cast<const DrawArrayLengths*>(primitiveset);
|
||||
unsigned int vindex=drawArrayLengths->getFirst();
|
||||
for(DrawArrayLengths::iterator primItr=drawArrayLengths->begin();
|
||||
for(DrawArrayLengths::const_iterator primItr=drawArrayLengths->begin();
|
||||
primItr!=drawArrayLengths->end();
|
||||
++primItr)
|
||||
{
|
||||
unsigned int localPrimLength;
|
||||
if (primLength==0) localPrimLength=*primItr;
|
||||
else localPrimLength=primLength;
|
||||
drawArrayLengths->setFirst(target_vindex);
|
||||
|
||||
for(GLsizei primCount=0;
|
||||
primCount<*primItr;
|
||||
++vindex, ++target_vindex, ++primCount)
|
||||
{
|
||||
if ((primCount%localPrimLength)==0) ++source_pindex;
|
||||
// copy bind per vertex from vindex
|
||||
|
||||
// copy bind per primitive from primitiveNum
|
||||
for(PtrList::iterator itr = perVertexPtrs.begin();
|
||||
itr != perVertexPtrs.end();
|
||||
++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();
|
||||
itr != perPrimitivePtrs.end();
|
||||
++itr)
|
||||
@@ -1661,17 +1662,16 @@ void Geometry::fixDeprecatedData()
|
||||
{
|
||||
if (primLength==0) primLength=primitiveset->getNumIndices();
|
||||
|
||||
DrawElementsUByte* drawElements = static_cast<DrawElementsUByte*>(primitiveset);
|
||||
const DrawElementsUByte* drawElements = static_cast<const DrawElementsUByte*>(primitiveset);
|
||||
unsigned int primCount=0;
|
||||
for(DrawElementsUByte::iterator primItr=drawElements->begin();
|
||||
for(DrawElementsUByte::const_iterator primItr=drawElements->begin();
|
||||
primItr!=drawElements->end();
|
||||
++primCount, ++target_vindex, ++primItr)
|
||||
{
|
||||
if ((primCount%primLength)==0) ++source_pindex;
|
||||
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();
|
||||
itr != perVertexPtrs.end();
|
||||
++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();
|
||||
itr != perPrimitivePtrs.end();
|
||||
++itr)
|
||||
@@ -1705,17 +1705,16 @@ void Geometry::fixDeprecatedData()
|
||||
{
|
||||
if (primLength==0) primLength=primitiveset->getNumIndices();
|
||||
|
||||
DrawElementsUShort* drawElements = static_cast<DrawElementsUShort*>(primitiveset);
|
||||
const DrawElementsUShort* drawElements = static_cast<const DrawElementsUShort*>(primitiveset);
|
||||
unsigned int primCount=0;
|
||||
for(DrawElementsUShort::iterator primItr=drawElements->begin();
|
||||
for(DrawElementsUShort::const_iterator primItr=drawElements->begin();
|
||||
primItr!=drawElements->end();
|
||||
++primCount, ++target_vindex, ++primItr)
|
||||
{
|
||||
if ((primCount%primLength)==0) ++source_pindex;
|
||||
if ((primCount%primLength)==0) ++primitiveNum;
|
||||
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();
|
||||
itr != perVertexPtrs.end();
|
||||
++itr)
|
||||
@@ -1728,7 +1727,8 @@ void Geometry::fixDeprecatedData()
|
||||
*target++ = *source++;
|
||||
}
|
||||
}
|
||||
// copy bind per primitive from source_pindex
|
||||
|
||||
// copy bind per vertex from vindex
|
||||
for(PtrList::iterator itr = perPrimitivePtrs.begin();
|
||||
itr != perPrimitivePtrs.end();
|
||||
++itr)
|
||||
@@ -1748,17 +1748,16 @@ void Geometry::fixDeprecatedData()
|
||||
{
|
||||
if (primLength==0) primLength=primitiveset->getNumIndices();
|
||||
|
||||
DrawElementsUInt* drawElements = static_cast<DrawElementsUInt*>(primitiveset);
|
||||
const DrawElementsUInt* drawElements = static_cast<const DrawElementsUInt*>(primitiveset);
|
||||
unsigned int primCount=0;
|
||||
for(DrawElementsUInt::iterator primItr=drawElements->begin();
|
||||
for(DrawElementsUInt::const_iterator primItr=drawElements->begin();
|
||||
primItr!=drawElements->end();
|
||||
++primCount, ++target_vindex, ++primItr)
|
||||
{
|
||||
if ((primCount%primLength)==0) ++source_pindex;
|
||||
if ((primCount%primLength)==0) ++primitiveNum;
|
||||
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();
|
||||
itr != perVertexPtrs.end();
|
||||
++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();
|
||||
itr != perPrimitivePtrs.end();
|
||||
++itr)
|
||||
|
||||
@@ -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())
|
||||
{
|
||||
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;
|
||||
|
||||
_state->reset();
|
||||
|
||||
// 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::deleteAllGLObjects(_state->getContextID());
|
||||
|
||||
OSG_INFO<<"Done delete of GL objects"<<std::endl;
|
||||
}
|
||||
@@ -577,10 +567,10 @@ void GraphicsContext::close(bool callCloseImplementation)
|
||||
// which have already been deleted
|
||||
|
||||
osg::flushAllDeletedGLObjects(_state->getContextID());
|
||||
|
||||
_state->reset();
|
||||
}
|
||||
|
||||
_state->reset();
|
||||
|
||||
releaseContext();
|
||||
}
|
||||
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
|
||||
// the the flushDelete*() methods not being invoked, such as when using GraphicContextEmbedded where makeCurrent
|
||||
// does not work.
|
||||
if ( !sharedContextExists && contextIDValid)
|
||||
if ( !sharedContextExists && _state.valid())
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
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()
|
||||
{
|
||||
// sort the cameras into order
|
||||
|
||||
@@ -239,7 +239,7 @@ Image::Image(const Image& image,const CopyOp& copyop):
|
||||
{
|
||||
if (image._data)
|
||||
{
|
||||
unsigned int size = image.getTotalSizeInBytesIncludingMipmaps();
|
||||
int size = image.getTotalSizeInBytesIncludingMipmaps();
|
||||
setData(new unsigned char [size],USE_NEW_DELETE);
|
||||
unsigned char* dest_ptr = _data;
|
||||
for(DataIterator itr(&image); itr.valid(); ++itr)
|
||||
|
||||
@@ -396,8 +396,17 @@ void ImageSequence::update(osg::NodeVisitor* nv)
|
||||
if (startLoadIndex<0) startLoadIndex = 0;
|
||||
|
||||
int endLoadIndex = int(preLoadTime/_timePerImage);
|
||||
if (looping && (endLoadIndex>=int(_imageDataList.size()))) endLoadIndex -= int(_imageDataList.size());
|
||||
if (endLoadIndex>=int(_imageDataList.size())) endLoadIndex = int(_imageDataList.size())-1;
|
||||
if (endLoadIndex>=int(_imageDataList.size()))
|
||||
{
|
||||
if (looping)
|
||||
{
|
||||
endLoadIndex -= int(_imageDataList.size());
|
||||
}
|
||||
else
|
||||
{
|
||||
endLoadIndex = int(_imageDataList.size())-1;
|
||||
}
|
||||
}
|
||||
if (endLoadIndex<0) endLoadIndex = 0;
|
||||
|
||||
double requestTime = time;
|
||||
|
||||
@@ -71,7 +71,7 @@ struct TriangleIndicesCollector
|
||||
const osg::Vec3& v2 = (*(_buildKdTree->_kdTree.getVertices()))[p2];
|
||||
|
||||
// discard degenerate points
|
||||
if (v0==v1 || v1==v2 || v2==v0)
|
||||
if (v0==v1 || v1==v2 || v1==v2)
|
||||
{
|
||||
//OSG_NOTICE<<"Disgarding degenerate triangle"<<std::endl;
|
||||
return;
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace osg
|
||||
class NullStreamBuffer : public std::streambuf
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -44,31 +44,17 @@ bool PointSprite::checkValidityOfAssociatedModes(osg::State& state) const
|
||||
{
|
||||
|
||||
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);
|
||||
#endif
|
||||
|
||||
|
||||
return modeValid;
|
||||
}
|
||||
|
||||
void PointSprite::apply(osg::State& state) const
|
||||
{
|
||||
#if defined( OSG_GL3_AVAILABLE )
|
||||
|
||||
const Point::Extensions* extensions = Point::getExtensions(state.getContextID(),true);
|
||||
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 )
|
||||
|
||||
if(!isPointSpriteSupported(state.getContextID())) return;
|
||||
|
||||
glTexEnvi(GL_POINT_SPRITE_ARB, GL_COORD_REPLACE_ARB, 1);
|
||||
@@ -77,10 +63,8 @@ void PointSprite::apply(osg::State& state) const
|
||||
|
||||
if (extensions->isPointSpriteCoordOriginSupported())
|
||||
extensions->glPointParameteri(GL_POINT_SPRITE_COORD_ORIGIN,_coordOriginMode);
|
||||
|
||||
#else
|
||||
OSG_NOTICE<<"Warning: PointSprite::apply(State&) - not supported."<<std::endl;
|
||||
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -102,7 +86,7 @@ bool PointSprite::isPointSpriteSupported(unsigned int contextID)
|
||||
if (!s_extensions[contextID].initialized)
|
||||
{
|
||||
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;
|
||||
|
||||
@@ -674,7 +674,7 @@ void Program::PerContextProgram::linkProgram(osg::State& state)
|
||||
_extensions->glGetProgramiv(_glProgramHandle, GL_ACTIVE_UNIFORM_BLOCKS,
|
||||
reinterpret_cast<GLint*>(&activeUniformBlocks));
|
||||
_extensions->glGetProgramiv(_glProgramHandle,
|
||||
GL_ACTIVE_UNIFORM_BLOCK_MAX_NAME_LENGTH,
|
||||
GL_ACTIVE_UNIFORM_MAX_LENGTH,
|
||||
&maxBlockNameLen);
|
||||
if (maxBlockNameLen > 0)
|
||||
{
|
||||
|
||||
@@ -402,7 +402,7 @@ int Sequence::_getNextValue()
|
||||
int _sbegin = osg::minimum(_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)
|
||||
{
|
||||
|
||||
@@ -484,18 +484,12 @@ void State::apply(const StateSet* dstate)
|
||||
else if (unit<_textureAttributeMapList.size()) applyAttributeMapOnTexUnit(unit,_textureAttributeMapList[unit]);
|
||||
}
|
||||
|
||||
const Program::PerContextProgram* previousLastAppliedProgramObject = _lastAppliedProgramObject;
|
||||
|
||||
applyModeList(_modeMap,dstate->getModeList());
|
||||
applyAttributeList(_attributeMap,dstate->getAttributeList());
|
||||
|
||||
if (_shaderCompositionEnabled)
|
||||
{
|
||||
if (previousLastAppliedProgramObject == _lastAppliedProgramObject || _lastAppliedProgramObject==0)
|
||||
{
|
||||
// No program has been applied by the StateSet stack so assume shader composition is required
|
||||
applyShaderComposition();
|
||||
}
|
||||
applyShaderComposition();
|
||||
}
|
||||
|
||||
if (dstate->getUniformList().empty())
|
||||
@@ -917,10 +911,7 @@ void State::initializeExtensionProcs()
|
||||
if ( osg::getGLVersionNumber() >= 2.0 || osg::isGLExtensionSupported(_contextID,"GL_ARB_vertex_shader") || OSG_GLES2_FEATURES)
|
||||
{
|
||||
glGetIntegerv(GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS,&_glMaxTextureUnits);
|
||||
if(OSG_GLES2_FEATURES)
|
||||
_glMaxTextureCoords = _glMaxTextureUnits;
|
||||
else
|
||||
glGetIntegerv(GL_MAX_TEXTURE_COORDS,&_glMaxTextureCoords);
|
||||
glGetIntegerv(GL_MAX_TEXTURE_COORDS,&_glMaxTextureCoords);
|
||||
}
|
||||
else if ( osg::getGLVersionNumber() >= 1.3 ||
|
||||
osg::isGLExtensionSupported(_contextID,"GL_ARB_multitexture") ||
|
||||
@@ -1331,9 +1322,6 @@ namespace State_Utils
|
||||
{
|
||||
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;
|
||||
std::string::size_type pos = 0;
|
||||
while((pos=str.find(original_phrase, pos))!=std::string::npos)
|
||||
@@ -1372,6 +1360,9 @@ bool State::convertVertexShaderSourceToOsgBuiltIns(std::string& source) const
|
||||
|
||||
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
|
||||
// precede a "#verson" compiler directive, so we must insert new declarations after it.
|
||||
std::string::size_type declPos = source.rfind( "#version " );
|
||||
@@ -1386,31 +1377,22 @@ bool State::convertVertexShaderSourceToOsgBuiltIns(std::string& source) const
|
||||
declPos = 0;
|
||||
}
|
||||
|
||||
if (_useVertexAttributeAliasing)
|
||||
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++)
|
||||
{
|
||||
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++)
|
||||
{
|
||||
const VertexAttribAlias& texCoordAlias = _texCoordAliasList[i];
|
||||
State_Utils::replaceAndInsertDeclaration(source, declPos, texCoordAlias._glName, texCoordAlias._osgName, texCoordAlias._declaration);
|
||||
}
|
||||
const VertexAttribAlias& texCoordAlias = _texCoordAliasList[i];
|
||||
State_Utils::replaceAndInsertDeclaration(source, declPos, texCoordAlias._glName, texCoordAlias._osgName, texCoordAlias._declaration);
|
||||
}
|
||||
|
||||
if (_useModelViewAndProjectionUniforms)
|
||||
{
|
||||
// replace ftransform as it only works with built-ins
|
||||
State_Utils::replace(source, "ftransform()", "gl_ModelViewProjectionMatrix * gl_Vertex");
|
||||
|
||||
// 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 ");
|
||||
}
|
||||
// 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 ");
|
||||
|
||||
OSG_INFO<<"-------- Converted source "<<std::endl<<source<<std::endl<<"----------------"<<std::endl;
|
||||
|
||||
|
||||
@@ -54,7 +54,6 @@ class TextureGLModeSet
|
||||
_textureModeSet.insert(GL_TEXTURE_CUBE_MAP);
|
||||
_textureModeSet.insert(GL_TEXTURE_RECTANGLE_NV);
|
||||
_textureModeSet.insert(GL_TEXTURE_2D_ARRAY_EXT);
|
||||
_textureModeSet.insert(GL_TEXTURE_2D_MULTISAMPLE);
|
||||
|
||||
_textureModeSet.insert(GL_TEXTURE_GEN_Q);
|
||||
_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 (_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)
|
||||
{
|
||||
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...
|
||||
|
||||
|
||||
if (_textureModeList.size()<rhs._textureModeList.size()) return -1;
|
||||
if (_textureModeList.size()>rhs._textureModeList.size()) return 1;
|
||||
|
||||
// check to see how the modes compare.
|
||||
// first check the rest of the texture modes
|
||||
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;
|
||||
|
||||
// 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;
|
||||
}
|
||||
|
||||
|
||||
@@ -2351,7 +2351,7 @@ bool Texture::isHardwareMipmapGenerationEnabled(const State& state) const
|
||||
|
||||
const FBOExtensions* fbo_ext = FBOExtensions::instance(contextID,true);
|
||||
|
||||
if (fbo_ext->isSupported() && fbo_ext->glGenerateMipmap)
|
||||
if (fbo_ext->glGenerateMipmap)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
@@ -2368,8 +2368,7 @@ Texture::GenerateMipmapMode Texture::mipmapBeforeTexImage(const State& state, bo
|
||||
return GENERATE_MIPMAP;
|
||||
#else
|
||||
|
||||
FBOExtensions* fbo_ext = FBOExtensions::instance(state.getContextID(),true);
|
||||
bool useGenerateMipMap = fbo_ext->isSupported() && fbo_ext->glGenerateMipmap;
|
||||
bool useGenerateMipMap = FBOExtensions::instance(state.getContextID(), true)->glGenerateMipmap!=0;
|
||||
|
||||
if (useGenerateMipMap)
|
||||
{
|
||||
@@ -2441,7 +2440,7 @@ void Texture::generateMipmap(State& state) const
|
||||
osg::FBOExtensions* fbo_ext = osg::FBOExtensions::instance(state.getContextID(), true);
|
||||
|
||||
// check if the function is supported
|
||||
if (fbo_ext->isSupported() && fbo_ext->glGenerateMipmap)
|
||||
if (fbo_ext->glGenerateMipmap)
|
||||
{
|
||||
textureObject->bind();
|
||||
fbo_ext->glGenerateMipmap(textureObject->target());
|
||||
|
||||
@@ -249,7 +249,7 @@ void Texture2DArray::apply(State& state) const
|
||||
// compute the dimensions of the texture.
|
||||
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());
|
||||
_textureObjectBuffer[contextID] = 0;
|
||||
|
||||
@@ -2153,7 +2153,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2& m2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2.Matrix2::base_class::set( &((*_floatArray)[j]) );
|
||||
m2.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2161,7 +2161,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3& m3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3.Matrix3::base_class::set( &((*_floatArray)[j]) );
|
||||
m3.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2177,7 +2177,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x3& m2x3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2x3.Matrix2x3::base_class::set( &((*_floatArray)[j]) );
|
||||
m2x3.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2185,7 +2185,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x4& m2x4 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT2x4) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2x4.Matrix2x4::base_class::set( &((*_floatArray)[j]) );
|
||||
m2x4.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2193,7 +2193,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x2& m3x2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3x2.Matrix3x2::base_class::set( &((*_floatArray)[j]) );
|
||||
m3x2.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2201,7 +2201,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x4& m3x4 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT3x4) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3x4.Matrix3x4::base_class::set( &((*_floatArray)[j]) );
|
||||
m3x4.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2209,7 +2209,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x2& m4x2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m4x2.Matrix4x2::base_class::set( &((*_floatArray)[j]) );
|
||||
m4x2.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2217,7 +2217,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x3& m4x3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(FLOAT_MAT4x3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m4x3.Matrix4x3::base_class::set( &((*_floatArray)[j]) );
|
||||
m4x3.base_class::set( &((*_floatArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2263,7 +2263,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2d& m2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2.Matrix2d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m2.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2271,7 +2271,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3d& m3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3.Matrix3d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m3.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2291,7 +2291,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x3d& m2x3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2x3.Matrix2x3d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m2x3.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2299,7 +2299,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix2x4d& m2x4 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT2x4) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m2x4.Matrix2x4d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m2x4.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2307,7 +2307,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x2d& m3x2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3x2.Matrix3x2d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m3x2.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2315,7 +2315,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix3x4d& m3x4 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT3x4) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m3x4.Matrix3x4d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m3x4.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2323,7 +2323,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x2d& m4x2 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x2) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m4x2.Matrix4x2d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m4x2.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -2331,7 +2331,7 @@ bool Uniform::getElement( unsigned int index, osg::Matrix4x3d& m4x3 ) const
|
||||
{
|
||||
if( index>=getNumElements() || !isCompatibleType(DOUBLE_MAT4x3) ) return false;
|
||||
unsigned int j = index * getTypeNumComponents(getType());
|
||||
m4x3.Matrix4x3d::base_class::set( &((*_doubleArray)[j]) );
|
||||
m4x3.base_class::set( &((*_doubleArray)[j]) );
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -150,4 +150,4 @@ const GLubyte* gluErrorString(GLenum errorCode)
|
||||
return (const GLubyte *) 0;
|
||||
}
|
||||
|
||||
} // end of namespace osg
|
||||
} // end of namespace osg
|
||||
@@ -908,11 +908,10 @@ static void halveImage_uint(GLint components, GLuint width, GLuint height,
|
||||
for (j = 0; j < newwidth; j++) {
|
||||
for (k = 0; k < components; k++) {
|
||||
/* need to cast to double to hold large unsigned ints */
|
||||
GLdouble buf = (double)*(const GLuint*)t +
|
||||
(double)*(const GLuint*)(t+group_size) +
|
||||
(double)*(const GLuint*)(t+ysize) +
|
||||
(double)*(const GLuint*)(t+ysize+group_size);
|
||||
s[0] = (GLuint)(buf/4.0 + 0.5);
|
||||
s[0] = ((double)*(const GLuint*)t +
|
||||
(double)*(const GLuint*)(t+group_size) +
|
||||
(double)*(const GLuint*)(t+ysize) +
|
||||
(double)*(const GLuint*)(t+ysize+group_size))/4 + 0.5;
|
||||
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 (k = 0; k < components; k++) {
|
||||
/* need to cast to double to hold large unsigned ints */
|
||||
GLdouble buf = (GLdouble)__GLU_SWAP_4_BYTES(t) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+group_size) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize+group_size);
|
||||
s[0] = (GLuint)(buf/4.0 + 0.5);
|
||||
GLdouble buf;
|
||||
buf = (GLdouble)__GLU_SWAP_4_BYTES(t) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+group_size) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize) +
|
||||
(GLdouble)__GLU_SWAP_4_BYTES(t+ysize+group_size);
|
||||
s[0] = (GLuint)(buf/4 + 0.5);
|
||||
|
||||
s++; t += element_size;
|
||||
}
|
||||
|
||||
@@ -41,7 +41,7 @@ void LinkVisitor::link(AnimationUpdateCallbackBase* cb)
|
||||
result += cb->link(_animations[i].get());
|
||||
_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)
|
||||
|
||||
@@ -109,7 +109,7 @@ void RigGeometry::buildVertexInfluenceSet()
|
||||
|
||||
_vertexInfluenceSet.buildVertex2BoneList();
|
||||
_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()
|
||||
|
||||
@@ -152,7 +152,7 @@ RigTransformHardware::BoneWeightAttribList RigTransformHardware::createVertexAtt
|
||||
arrayList.resize(nbArray);
|
||||
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;
|
||||
int nbVertexes = getNumVertexes();
|
||||
array->resize(nbVertexes);
|
||||
|
||||
@@ -18,7 +18,8 @@ using namespace osgAnimation;
|
||||
|
||||
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());
|
||||
for (StackedTransform::const_iterator it = rhs.begin(); it != rhs.end(); ++it)
|
||||
|
||||
@@ -124,7 +124,7 @@ SET(TARGET_SRC
|
||||
IF(APPLE AND NOT ANDROID)
|
||||
IF(NOT OSG_BUILD_PLATFORM_IPHONE AND NOT OSG_BUILD_PLATFORM_IPHONE_SIMULATOR)
|
||||
# Needs CoreFoundation calls and a Carbon function
|
||||
SET(OSGDB_PLATFORM_SPECIFIC_LIBRARIES ${CARBON_LIBRARY} ${COCOA_LIBRARY})
|
||||
SET(OSGDB_PLATFORM_SPECIFIC_LIBRARIES ${CARBON_LIBRARY})
|
||||
ENDIF()
|
||||
|
||||
IF(OSG_DEFAULT_IMAGE_PLUGIN_FOR_OSX STREQUAL "quicktime")
|
||||
|
||||
@@ -209,13 +209,8 @@ bool osgDB::makeDirectory( const std::string &path )
|
||||
if( mkdir( dir.c_str(), 0755 )< 0 )
|
||||
#endif
|
||||
{
|
||||
// Only return an error if the directory actually doesn't exist. It's possible that the directory was created
|
||||
// by another thread or process
|
||||
if (!osgDB::fileExists(dir))
|
||||
{
|
||||
OSG_DEBUG << "osgDB::makeDirectory(): " << strerror(errno) << std::endl;
|
||||
return false;
|
||||
}
|
||||
OSG_DEBUG << "osgDB::makeDirectory(): " << strerror(errno) << std::endl;
|
||||
return false;
|
||||
}
|
||||
paths.pop();
|
||||
}
|
||||
|
||||
@@ -639,7 +639,7 @@ osg::Image* InputStream::readImage(bool readFromExternal)
|
||||
image = new osg::Image;
|
||||
image->setOrigin( (osg::Image::Origin)origin );
|
||||
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
|
||||
|
||||
@@ -379,9 +379,6 @@ ObjectWrapperManager::ObjectWrapperManager()
|
||||
glTable.add( "GL_LIGHT6", GL_LIGHT6 );
|
||||
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
|
||||
glTable.add( "NEVER", GL_NEVER );
|
||||
glTable.add( "LESS", GL_LESS );
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#include <osgDB/ObjectWrapper>
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <stdlib.h>
|
||||
|
||||
using namespace osgDB;
|
||||
|
||||
|
||||
@@ -414,7 +414,7 @@ Registry::Registry()
|
||||
addFileExtensionAlias("cid", "freetype"); // Postscript CID-Fonts
|
||||
addFileExtensionAlias("cff", "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("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))
|
||||
{
|
||||
OSG_DEBUG << "FindFileInPath(" << filename << "): returning " << simpleFileName << std::endl;
|
||||
OSG_DEBUG << "FindFileInPath(" << filename << "): returning " << filename << std::endl;
|
||||
return simpleFileName;
|
||||
}
|
||||
|
||||
@@ -1249,21 +1249,9 @@ ReaderWriter::ReadResult Registry::readImplementation(const ReadFunctor& readFun
|
||||
ReaderWriter::ReadResult rr = read(readFunctor);
|
||||
if (rr.validObject())
|
||||
{
|
||||
// search AGAIN for entry in the object cache.
|
||||
{
|
||||
OpenThreads::ScopedLock<OpenThreads::Mutex> lock(_objectCacheMutex);
|
||||
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);
|
||||
}
|
||||
// update cache with new entry.
|
||||
OSG_INFO<<"Adding to object cache "<<file<<std::endl;
|
||||
addEntryToObjectCache(file,rr.getObject());
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -49,12 +49,10 @@ std::string osgDB::trimEnclosingSpaces(const std::string& 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(whitespaces);
|
||||
std::string::size_type start = str.find_first_not_of(' ');
|
||||
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();
|
||||
|
||||
return std::string(str, start, (end-start)+1);
|
||||
|
||||
@@ -28,15 +28,15 @@ WriterCompareTriangle::operator()(const std::pair<Triangle, int> & t1,
|
||||
}
|
||||
|
||||
void
|
||||
WriterCompareTriangle::setMaxMin(int & nbVerticesX,
|
||||
int & nbVerticesY,
|
||||
int & nbVerticesZ) const
|
||||
WriterCompareTriangle::setMaxMin(unsigned int & nbVerticesX,
|
||||
unsigned int & nbVerticesY,
|
||||
unsigned int & nbVerticesZ) const
|
||||
{
|
||||
static const int min = 1;
|
||||
static const int max = 5; // Number of blocks used to divide the scene (arbitrary but seems ok)
|
||||
nbVerticesX = osg::clampBetween<int>(nbVerticesX, min, max);
|
||||
nbVerticesY = osg::clampBetween<int>(nbVerticesY, min, max);
|
||||
nbVerticesZ = osg::clampBetween<int>(nbVerticesZ, min, max);
|
||||
static const unsigned int min = 1;
|
||||
static const unsigned int max = 5; // Number of blocks used to divide the scene (arbitrary but seems ok)
|
||||
nbVerticesX = osg::clampBetween<unsigned int>(nbVerticesX, min, max);
|
||||
nbVerticesY = osg::clampBetween<unsigned int>(nbVerticesY, min, max);
|
||||
nbVerticesZ = osg::clampBetween<unsigned int>(nbVerticesZ, min, max);
|
||||
}
|
||||
|
||||
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)
|
||||
// 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()) );
|
||||
int nbVerticesY = static_cast<int>( (nbVertices * k) / (length.z() * length.x()) );
|
||||
int nbVerticesZ = static_cast<int>( (nbVertices * k) / (length.x() * length.y()) );
|
||||
unsigned int nbVerticesX = static_cast<unsigned int>( (nbVertices * k) / (length.z() * length.y()) );
|
||||
unsigned int nbVerticesY = static_cast<unsigned int>( (nbVertices * k) / (length.z() * length.x()) );
|
||||
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
|
||||
|
||||
@@ -63,9 +63,9 @@ void WriterCompareTriangle::cutscene(int nbVertices, const osg::BoundingBox & sc
|
||||
boxList.reserve(nbVerticesX * nbVerticesY * nbVerticesZ);
|
||||
short yinc = 1;
|
||||
short xinc = 1;
|
||||
int y = 0;
|
||||
int x = 0;
|
||||
for (int z = 0; z < nbVerticesZ; ++z)
|
||||
unsigned int y = 0;
|
||||
unsigned int x = 0;
|
||||
for (unsigned int z = 0; z < nbVerticesZ; ++z)
|
||||
{
|
||||
while (x < nbVerticesX && x >= 0)
|
||||
{
|
||||
|
||||
@@ -21,9 +21,9 @@ public:
|
||||
const std::pair<Triangle, int> & t2) const;
|
||||
private:
|
||||
void // This function prevent from cut scene in too many blocs
|
||||
setMaxMin(int & nbVerticesX,
|
||||
int & nbVerticesY,
|
||||
int & nbVerticesZ) const;
|
||||
setMaxMin(unsigned int & nbVerticesX,
|
||||
unsigned int & nbVerticesY,
|
||||
unsigned int & nbVerticesZ) const;
|
||||
|
||||
/**
|
||||
* Cut the scene in different bloc to sort.
|
||||
|
||||
@@ -242,7 +242,6 @@ typedef struct Lib3dsMaterial {
|
||||
int soften; /* bool */
|
||||
int face_map; /* bool */
|
||||
int two_sided; /* Material visible from back */
|
||||
int transparency_falloff; /* Transparency falloff in/out */
|
||||
int map_decal; /* bool */
|
||||
int use_wire;
|
||||
int use_wire_abs;
|
||||
|
||||
@@ -86,7 +86,6 @@ static Lib3dsChunkTable lib3ds_chunk_table[] = {
|
||||
{CHK_MAT_SELF_ILPCT, "MAT_SELF_ILPCT"},
|
||||
{CHK_MAT_WIRE, "MAT_WIRE"},
|
||||
{CHK_MAT_FACEMAP, "MAT_FACEMAP"},
|
||||
{CHK_MAT_TRANSPARENCY_FALLOFF, "MAT_TRANSPARENCY_FALLOFF"},
|
||||
{CHK_MAT_PHONGSOFT, "MAT_PHONGSOFT"},
|
||||
{CHK_MAT_WIREABS, "MAT_WIREABS"},
|
||||
{CHK_MAT_WIRE_SIZE, "MAT_WIRE_SIZE"},
|
||||
|
||||
@@ -1,19 +1,19 @@
|
||||
/*
|
||||
Copyright (C) 1996-2008 by Jan Eric Kyprianidis <www.kyprianidis.com>
|
||||
All rights reserved.
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published
|
||||
by the Free Software Foundation, either version 2.1 of the License, or
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published
|
||||
by the Free Software Foundation, either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Thisprogram is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
Thisprogram is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public License
|
||||
along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
along with this program; If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
#include "lib3ds_impl.h"
|
||||
|
||||
@@ -231,7 +231,7 @@ named_object_read(Lib3dsFile *file, Lib3dsIo *io) {
|
||||
uint32_t object_flags;
|
||||
|
||||
lib3ds_chunk_read_start(&c, CHK_NAMED_OBJECT, io);
|
||||
|
||||
|
||||
lib3ds_io_read_string(io, name, 64);
|
||||
lib3ds_io_log(io, LIB3DS_LOG_INFO, " NAME=%s", name);
|
||||
lib3ds_chunk_read_tell(&c, io);
|
||||
@@ -444,13 +444,13 @@ mdata_read(Lib3dsFile *file, Lib3dsIo *io) {
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
static int
|
||||
compare_node_id( const void *a, const void *b ) {
|
||||
return (int)((*((Lib3dsNode**)a))->node_id) - (int)((*((Lib3dsNode**)b))->node_id);
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
static int
|
||||
compare_node_id2( const void *a, const void *b ) {
|
||||
// not a is a pointer in the calling bsearch routine the user_id is an unsigned, while the node_id is an unsigned short?!
|
||||
return (int)(*((unsigned*)a)) - (int)((*((Lib3dsNode**)b))->node_id);
|
||||
@@ -494,33 +494,33 @@ kfdata_read(Lib3dsFile *file, Lib3dsIo *io) {
|
||||
break;
|
||||
}
|
||||
|
||||
case CHK_AMBIENT_NODE_TAG:
|
||||
case CHK_OBJECT_NODE_TAG:
|
||||
case CHK_CAMERA_NODE_TAG:
|
||||
case CHK_TARGET_NODE_TAG:
|
||||
case CHK_LIGHT_NODE_TAG:
|
||||
case CHK_SPOTLIGHT_NODE_TAG:
|
||||
case CHK_AMBIENT_NODE_TAG:
|
||||
case CHK_OBJECT_NODE_TAG:
|
||||
case CHK_CAMERA_NODE_TAG:
|
||||
case CHK_TARGET_NODE_TAG:
|
||||
case CHK_LIGHT_NODE_TAG:
|
||||
case CHK_SPOTLIGHT_NODE_TAG:
|
||||
case CHK_L_TARGET_NODE_TAG: {
|
||||
Lib3dsNodeType type = 0;
|
||||
Lib3dsNode *node;
|
||||
|
||||
switch (chunk) {
|
||||
case CHK_AMBIENT_NODE_TAG:
|
||||
case CHK_AMBIENT_NODE_TAG:
|
||||
type = LIB3DS_NODE_AMBIENT_COLOR;
|
||||
break;
|
||||
case CHK_OBJECT_NODE_TAG:
|
||||
case CHK_OBJECT_NODE_TAG:
|
||||
type = LIB3DS_NODE_MESH_INSTANCE;
|
||||
break;
|
||||
case CHK_CAMERA_NODE_TAG:
|
||||
case CHK_CAMERA_NODE_TAG:
|
||||
type = LIB3DS_NODE_CAMERA;
|
||||
break;
|
||||
case CHK_TARGET_NODE_TAG:
|
||||
case CHK_TARGET_NODE_TAG:
|
||||
type = LIB3DS_NODE_CAMERA_TARGET;
|
||||
break;
|
||||
case CHK_LIGHT_NODE_TAG:
|
||||
case CHK_LIGHT_NODE_TAG:
|
||||
type = LIB3DS_NODE_OMNILIGHT;
|
||||
break;
|
||||
case CHK_SPOTLIGHT_NODE_TAG:
|
||||
case CHK_SPOTLIGHT_NODE_TAG:
|
||||
type = LIB3DS_NODE_SPOTLIGHT;
|
||||
break;
|
||||
case CHK_L_TARGET_NODE_TAG:
|
||||
@@ -565,7 +565,7 @@ kfdata_read(Lib3dsFile *file, Lib3dsIo *io) {
|
||||
if (p->user_id != 65535) {
|
||||
parent = *(Lib3dsNode**)bsearch(&p->user_id, nodes, num_nodes, sizeof(Lib3dsNode*), compare_node_id2);
|
||||
if (parent) {
|
||||
q->next = p->next;
|
||||
q->next = p->next;
|
||||
p->next = parent->childs;
|
||||
p->parent = parent;
|
||||
parent->childs = p;
|
||||
@@ -927,7 +927,7 @@ lib3ds_file_write(Lib3dsFile *file, Lib3dsIo *io) {
|
||||
|
||||
void lib3ds_file_reserve_materials(Lib3dsFile *file, int size, int force) {
|
||||
assert(file);
|
||||
lib3ds_util_reserve_array((void***)&file->materials, &file->nmaterials, &file->materials_size,
|
||||
lib3ds_util_reserve_array((void***)&file->materials, &file->nmaterials, &file->materials_size,
|
||||
size, force, (Lib3dsFreeFunc)lib3ds_material_free);
|
||||
}
|
||||
|
||||
@@ -960,10 +960,10 @@ lib3ds_file_material_by_name(Lib3dsFile *file, const char *name) {
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
void
|
||||
lib3ds_file_reserve_cameras(Lib3dsFile *file, int size, int force) {
|
||||
assert(file);
|
||||
lib3ds_util_reserve_array((void***)&file->cameras, &file->ncameras, &file->cameras_size,
|
||||
lib3ds_util_reserve_array((void***)&file->cameras, &file->ncameras, &file->cameras_size,
|
||||
size, force, (Lib3dsFreeFunc)lib3ds_camera_free);
|
||||
}
|
||||
|
||||
@@ -996,10 +996,10 @@ lib3ds_file_camera_by_name(Lib3dsFile *file, const char *name) {
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
void
|
||||
lib3ds_file_reserve_lights(Lib3dsFile *file, int size, int force) {
|
||||
assert(file);
|
||||
lib3ds_util_reserve_array((void***)&file->lights, &file->nlights, &file->lights_size,
|
||||
lib3ds_util_reserve_array((void***)&file->lights, &file->nlights, &file->lights_size,
|
||||
size, force, (Lib3dsFreeFunc)lib3ds_light_free);
|
||||
}
|
||||
|
||||
@@ -1032,10 +1032,10 @@ lib3ds_file_light_by_name(Lib3dsFile *file, const char *name) {
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
void
|
||||
lib3ds_file_reserve_meshes(Lib3dsFile *file, int size, int force) {
|
||||
assert(file);
|
||||
lib3ds_util_reserve_array((void***)&file->meshes, &file->nmeshes, &file->meshes_size,
|
||||
lib3ds_util_reserve_array((void***)&file->meshes, &file->nmeshes, &file->meshes_size,
|
||||
size, force, (Lib3dsFreeFunc)lib3ds_mesh_free);
|
||||
}
|
||||
|
||||
@@ -1068,7 +1068,7 @@ lib3ds_file_mesh_by_name(Lib3dsFile *file, const char *name) {
|
||||
}
|
||||
|
||||
|
||||
Lib3dsMesh*
|
||||
Lib3dsMesh*
|
||||
lib3ds_file_mesh_for_node(Lib3dsFile *file, Lib3dsNode *node) {
|
||||
int index;
|
||||
Lib3dsMeshInstanceNode *n;
|
||||
@@ -1162,7 +1162,7 @@ lib3ds_file_append_node(Lib3dsFile *file, Lib3dsNode *node, Lib3dsNode *parent)
|
||||
parent->childs = node;
|
||||
} else {
|
||||
file->nodes = node;
|
||||
}
|
||||
}
|
||||
}
|
||||
node->parent = parent;
|
||||
node->next = NULL;
|
||||
@@ -1249,12 +1249,12 @@ lib3ds_file_remove_node(Lib3dsFile *file, Lib3dsNode *node) {
|
||||
static void
|
||||
file_minmax_node_id_impl(Lib3dsFile *file, Lib3dsNode *node, uint16_t *min_id, uint16_t *max_id) {
|
||||
Lib3dsNode *p;
|
||||
|
||||
|
||||
if (min_id && (*min_id > node->node_id))
|
||||
*min_id = node->node_id;
|
||||
if (max_id && (*max_id < node->node_id))
|
||||
*max_id = node->node_id;
|
||||
|
||||
|
||||
p = node->childs;
|
||||
while (p) {
|
||||
file_minmax_node_id_impl(file, p, min_id, max_id);
|
||||
@@ -1263,10 +1263,10 @@ file_minmax_node_id_impl(Lib3dsFile *file, Lib3dsNode *node, uint16_t *min_id, u
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
void
|
||||
lib3ds_file_minmax_node_id(Lib3dsFile *file, uint16_t *min_id, uint16_t *max_id) {
|
||||
Lib3dsNode *p;
|
||||
|
||||
|
||||
if (min_id)
|
||||
*min_id = 65535;
|
||||
if (max_id)
|
||||
@@ -1281,7 +1281,7 @@ lib3ds_file_minmax_node_id(Lib3dsFile *file, uint16_t *min_id, uint16_t *max_id)
|
||||
|
||||
|
||||
void
|
||||
lib3ds_file_bounding_box_of_objects(Lib3dsFile *file, int
|
||||
lib3ds_file_bounding_box_of_objects(Lib3dsFile *file, int
|
||||
include_meshes, int include_cameras, int include_lights,
|
||||
float bmin[3], float bmax[3]) {
|
||||
bmin[0] = bmin[1] = bmin[2] = FLT_MAX;
|
||||
@@ -1320,13 +1320,10 @@ lib3ds_file_bounding_box_of_objects(Lib3dsFile *file, int
|
||||
|
||||
|
||||
static void
|
||||
file_bounding_box_of_nodes_impl(Lib3dsNode *node, Lib3dsFile *file,
|
||||
file_bounding_box_of_nodes_impl(Lib3dsNode *node, Lib3dsFile *file,
|
||||
int include_meshes, int include_cameras, int include_lights,
|
||||
float bmin[3], float bmax[3], float matrix[4][4]) {
|
||||
switch (node->type) {
|
||||
case LIB3DS_NODE_AMBIENT_COLOR:
|
||||
break;
|
||||
|
||||
case LIB3DS_NODE_MESH_INSTANCE:
|
||||
if (include_meshes) {
|
||||
int index;
|
||||
@@ -1395,7 +1392,7 @@ file_bounding_box_of_nodes_impl(Lib3dsNode *node, Lib3dsFile *file,
|
||||
|
||||
|
||||
void
|
||||
lib3ds_file_bounding_box_of_nodes(Lib3dsFile *file,
|
||||
lib3ds_file_bounding_box_of_nodes(Lib3dsFile *file,
|
||||
int include_meshes, int include_cameras,int include_lights,
|
||||
float bmin[3], float bmax[3], float matrix[4][4]) {
|
||||
Lib3dsNode *p;
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
by the Free Software Foundation, either version 2.1 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
Thisprogram is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU Lesser General Public License for more details.
|
||||
@@ -132,7 +132,6 @@ typedef enum Lib3dsChunks {
|
||||
CHK_MAT_SELF_ILPCT =0xA084,
|
||||
CHK_MAT_WIRE =0xA085,
|
||||
CHK_MAT_FACEMAP =0xA088,
|
||||
CHK_MAT_TRANSPARENCY_FALLOFF =0xA08A,
|
||||
CHK_MAT_PHONGSOFT =0xA08C,
|
||||
CHK_MAT_WIREABS =0xA08E,
|
||||
CHK_MAT_WIRE_SIZE =0xA087,
|
||||
|
||||
@@ -371,11 +371,6 @@ lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io) {
|
||||
break;
|
||||
}
|
||||
|
||||
case CHK_MAT_TRANSPARENCY_FALLOFF: {
|
||||
material->transparency_falloff = TRUE;
|
||||
break;
|
||||
}
|
||||
|
||||
case CHK_MAT_PHONGSOFT: {
|
||||
material->soften = TRUE;
|
||||
break;
|
||||
@@ -497,7 +492,7 @@ lib3ds_material_read(Lib3dsMaterial *material, Lib3dsIo *io) {
|
||||
material->autorefl_map_frame_step = lib3ds_io_read_intd(io);
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
lib3ds_chunk_unknown(chunk, io);
|
||||
}
|
||||
@@ -826,13 +821,6 @@ lib3ds_material_write(Lib3dsMaterial *material, Lib3dsIo *io) {
|
||||
lib3ds_chunk_write(&c, io);
|
||||
}
|
||||
|
||||
if (material->transparency_falloff) { /*---- CHK_MAT_TRANSPARENCY_FALLOFF ----*/
|
||||
Lib3dsChunk c;
|
||||
c.chunk = CHK_MAT_TRANSPARENCY_FALLOFF;
|
||||
c.size = 6;
|
||||
lib3ds_chunk_write(&c, io);
|
||||
}
|
||||
|
||||
if (material->soften) { /*---- CHK_MAT_PHONGSOFT ----*/
|
||||
Lib3dsChunk c;
|
||||
c.chunk = CHK_MAT_PHONGSOFT;
|
||||
|
||||
@@ -756,38 +756,6 @@ ConvertFromInventor::postLOD(void* data, SoCallbackAction* action,
|
||||
|
||||
return SoCallbackAction::CONTINUE;
|
||||
}
|
||||
|
||||
// g++ (at least) guarantees thread-safe method-local static initialization, so moving construction of these maps to exploit
|
||||
class NormBindingMap : public std::map<SoNormalBinding::Binding, deprecated_osg::Geometry::AttributeBinding>
|
||||
{
|
||||
public:
|
||||
NormBindingMap()
|
||||
{
|
||||
(*this)[SoNormalBinding::OVERALL] = deprecated_osg::Geometry::BIND_OVERALL;
|
||||
(*this)[SoNormalBinding::PER_PART] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoNormalBinding::PER_PART_INDEXED] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoNormalBinding::PER_FACE] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoNormalBinding::PER_FACE_INDEXED] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoNormalBinding::PER_VERTEX] = deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
(*this)[SoNormalBinding::PER_VERTEX_INDEXED] = deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
}
|
||||
};
|
||||
|
||||
class ColBindingMap : public std::map<SoMaterialBinding::Binding, deprecated_osg::Geometry::AttributeBinding>
|
||||
{
|
||||
public:
|
||||
ColBindingMap()
|
||||
{
|
||||
(*this)[SoMaterialBinding::OVERALL] = deprecated_osg::Geometry::BIND_OVERALL;
|
||||
(*this)[SoMaterialBinding::PER_PART] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoMaterialBinding::PER_PART_INDEXED] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoMaterialBinding::PER_FACE] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoMaterialBinding::PER_FACE_INDEXED] = deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
(*this)[SoMaterialBinding::PER_VERTEX] = deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
(*this)[SoMaterialBinding::PER_VERTEX_INDEXED] = deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
}
|
||||
};
|
||||
|
||||
///////////////////////////////////////////////////////////////////
|
||||
SoCallbackAction::Response
|
||||
ConvertFromInventor::preShape(void* data, SoCallbackAction* action,
|
||||
@@ -801,8 +769,45 @@ ConvertFromInventor::preShape(void* data, SoCallbackAction* action,
|
||||
ConvertFromInventor* thisPtr = (ConvertFromInventor *) (data);
|
||||
|
||||
// Normal and color binding map from Inventor to OSG
|
||||
static NormBindingMap normBindingMap;
|
||||
static ColBindingMap colBindingMap;
|
||||
static std::map<SoNormalBinding::Binding, deprecated_osg::Geometry::AttributeBinding>
|
||||
normBindingMap;
|
||||
static std::map<SoMaterialBinding::Binding, deprecated_osg::Geometry::AttributeBinding>
|
||||
colBindingMap;
|
||||
static bool firstTime = true;
|
||||
if (firstTime)
|
||||
{
|
||||
normBindingMap[SoNormalBinding::OVERALL]
|
||||
= deprecated_osg::Geometry::BIND_OVERALL;
|
||||
normBindingMap[SoNormalBinding::PER_PART]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
normBindingMap[SoNormalBinding::PER_PART_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
normBindingMap[SoNormalBinding::PER_FACE]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
normBindingMap[SoNormalBinding::PER_FACE_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
normBindingMap[SoNormalBinding::PER_VERTEX]
|
||||
= deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
normBindingMap[SoNormalBinding::PER_VERTEX_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
|
||||
colBindingMap[SoMaterialBinding::OVERALL]
|
||||
= deprecated_osg::Geometry::BIND_OVERALL;
|
||||
colBindingMap[SoMaterialBinding::PER_PART]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
colBindingMap[SoMaterialBinding::PER_PART_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
colBindingMap[SoMaterialBinding::PER_FACE]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
colBindingMap[SoMaterialBinding::PER_FACE_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_PRIMITIVE;
|
||||
colBindingMap[SoMaterialBinding::PER_VERTEX]
|
||||
= deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
colBindingMap[SoMaterialBinding::PER_VERTEX_INDEXED]
|
||||
= deprecated_osg::Geometry::BIND_PER_VERTEX;
|
||||
|
||||
firstTime = false;
|
||||
}
|
||||
|
||||
// Get normal and color binding
|
||||
if (node->isOfType(SoVertexShape::getClassTypeId()))
|
||||
@@ -1872,17 +1877,6 @@ update: The mentioned bug is probably just for very old NVidia drivers (commit t
|
||||
|
||||
return stateSet;
|
||||
}
|
||||
|
||||
class TexWrapMap : public std::map<SoTexture2::Wrap, osg::Texture2D::WrapMode>
|
||||
{
|
||||
public:
|
||||
TexWrapMap()
|
||||
{
|
||||
(*this)[SoTexture2::CLAMP] = osg::Texture2D::CLAMP;
|
||||
(*this)[SoTexture2::REPEAT] = osg::Texture2D::REPEAT;
|
||||
}
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
osg::Texture2D*
|
||||
ConvertFromInventor::convertIVTexToOSGTex(const SoNode* soNode,
|
||||
@@ -1952,7 +1946,14 @@ ConvertFromInventor::convertIVTexToOSGTex(const SoNode* soNode,
|
||||
// Set name
|
||||
osgTex->setName(soNode->getName().getString());
|
||||
|
||||
static TexWrapMap texWrapMap;
|
||||
static std::map<SoTexture2::Wrap, osg::Texture2D::WrapMode> texWrapMap;
|
||||
static bool firstTime = true;
|
||||
if (firstTime)
|
||||
{
|
||||
texWrapMap[SoTexture2::CLAMP] = osg::Texture2D::CLAMP;
|
||||
texWrapMap[SoTexture2::REPEAT] = osg::Texture2D::REPEAT;
|
||||
firstTime = false;
|
||||
}
|
||||
|
||||
// Set texture wrap mode
|
||||
#ifdef __COIN__
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
*/
|
||||
|
||||
//
|
||||
// OpenFlight loader for OpenSceneGraph
|
||||
// OpenFlight<EFBFBD> loader for OpenSceneGraph
|
||||
//
|
||||
// Copyright (C) 2005-2007 Brede Johansen
|
||||
//
|
||||
@@ -1030,9 +1030,9 @@ protected:
|
||||
if ((w==0.0) || (light->getSpotCutoff()<180.0))
|
||||
{
|
||||
// assume yaw is zero along y axis, increase positive clockwise
|
||||
// assume pitch is zero along xy plane, increase positive upwards
|
||||
float cos_yaw = cosf(osg::inDegrees(-yaw));
|
||||
float sin_yaw = sinf(osg::inDegrees(-yaw));
|
||||
// assume patch is zero along xy plane, increase positive upwards
|
||||
float cos_yaw = cosf(osg::inDegrees(yaw));
|
||||
float sin_yaw = sinf(osg::inDegrees(yaw));
|
||||
float cos_pitch = cosf(osg::inDegrees(pitch));
|
||||
float sin_pitch = sinf(osg::inDegrees(pitch));
|
||||
light->setDirection(osg::Vec3(sin_yaw*cos_pitch, cos_yaw*cos_pitch, sin_pitch));
|
||||
|
||||
@@ -267,11 +267,6 @@ RestHttpDevice::RestHttpDevice(const std::string& listening_address, const std::
|
||||
, _firstEventLocalTimeStamp()
|
||||
, _firstEventRemoteTimeStamp(-1)
|
||||
, _lastEventRemoteTimeStamp(0)
|
||||
, _currentMouseX(0.0f)
|
||||
, _currentMouseY(0.0f)
|
||||
, _targetMouseX(0.0f)
|
||||
, _targetMouseY(0.0f)
|
||||
, _targetMouseChanged(false)
|
||||
{
|
||||
setCapabilities(RECEIVE_EVENTS);
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ public:
|
||||
|
||||
virtual bool checkEvents()
|
||||
{
|
||||
if (_targetMouseChanged && (fabs(_currentMouseX - _targetMouseY) > 0.1f) || (fabs(_currentMouseY - _targetMouseY) > 0.1))
|
||||
if ((fabs(_currentMouseX - _targetMouseY) > 0.1f) || (fabs(_currentMouseY - _targetMouseY) > 0.1))
|
||||
{
|
||||
static const float scalar = 0.2f;
|
||||
_currentMouseX = (1.0f - scalar) * _currentMouseX + scalar * _targetMouseX;
|
||||
@@ -183,7 +183,6 @@ public:
|
||||
|
||||
void setTargetMousePosition(float x, float y, bool force = false)
|
||||
{
|
||||
_targetMouseChanged = true;
|
||||
_targetMouseX = x; _targetMouseY = y;
|
||||
if (force) {
|
||||
_currentMouseX = x; _currentMouseY = y;
|
||||
@@ -201,7 +200,6 @@ private:
|
||||
double _firstEventRemoteTimeStamp;
|
||||
double _lastEventRemoteTimeStamp;
|
||||
float _currentMouseX, _currentMouseY, _targetMouseX, _targetMouseY;
|
||||
bool _targetMouseChanged;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -68,8 +68,10 @@
|
||||
|
||||
@property (readonly, retain) NSMutableArray *services;
|
||||
@property (readwrite, retain) NSString *type;
|
||||
@property (readwrite, assign) BOOL isConnected;
|
||||
|
||||
@property (readwrite, retain) NSNetServiceBrowser *browser;
|
||||
@property (readwrite, retain) NSNetService *connectedService;
|
||||
|
||||
@end
|
||||
|
||||
@@ -78,12 +80,15 @@
|
||||
@synthesize browser;
|
||||
@synthesize type;
|
||||
@synthesize services;
|
||||
@synthesize isConnected;
|
||||
@synthesize connectedService;
|
||||
|
||||
-(id)initWithType: (NSString*) in_type withImpl:(AutoDiscoveryClientImpl*) in_impl {
|
||||
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
|
||||
services = [NSMutableArray new];
|
||||
self.browser = [[NSNetServiceBrowser new] init];
|
||||
self.browser.delegate = self;
|
||||
self.isConnected = NO;
|
||||
self.type = in_type;
|
||||
impl = in_impl;
|
||||
[self.browser searchForServicesOfType:in_type inDomain:@""];
|
||||
@@ -92,15 +97,9 @@
|
||||
}
|
||||
|
||||
-(void)dealloc {
|
||||
|
||||
[self.browser stop];
|
||||
self.browser.delegate = nil;
|
||||
|
||||
self.connectedService = nil;
|
||||
self.browser = nil;
|
||||
[services makeObjectsPerformSelector:@selector(setDelegate:) withObject:nil];
|
||||
[services makeObjectsPerformSelector:@selector(stop)];
|
||||
[services release];
|
||||
|
||||
[super dealloc];
|
||||
}
|
||||
|
||||
@@ -119,11 +118,16 @@
|
||||
{
|
||||
int ndx = [services indexOfObject: aService];
|
||||
impl->servicesRemoved([services objectAtIndex: ndx]);
|
||||
aService.delegate = nil;
|
||||
|
||||
[services removeObject:aService];
|
||||
if ( aService == self.connectedService ) self.isConnected = NO;
|
||||
|
||||
|
||||
}
|
||||
|
||||
-(void)netServiceDidResolveAddress:(NSNetService *)service {
|
||||
self.isConnected = YES;
|
||||
self.connectedService = service;
|
||||
|
||||
//NSLog(@"hostname: %@", [service hostName]);
|
||||
|
||||
@@ -216,4 +220,4 @@ void AutoDiscoveryClientImpl::servicesRemoved(void* key)
|
||||
AutoDiscoveryClientImpl::~AutoDiscoveryClientImpl()
|
||||
{
|
||||
[_controller release];
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,10 @@
|
||||
INCLUDE_DIRECTORIES( ${AV_FOUNDATION_INCLUDE_DIR} )
|
||||
|
||||
SET(TARGET_SRC
|
||||
SET(TARGET_SRC
|
||||
OSXAVFoundationVideo.mm
|
||||
OSXAVFoundationVideo.h
|
||||
../QTKit/VideoFrameDispatcher.h
|
||||
../QTKit/VideoFrameDispatcher.cpp
|
||||
../QTKIt/VideoFrameDispatcher.cpp
|
||||
OSXAVFoundationCoreVideoTexture.h
|
||||
OSXAVFoundationCoreVideoTexture.cpp
|
||||
ReaderWriterAVFoundation.cpp
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#endif
|
||||
|
||||
#include "OSXAVFoundationCoreVideoTexture.h"
|
||||
#include "OSXAVFoundationVideo.h"
|
||||
#include "OSXAVFoundationVideo.H"
|
||||
#include <CoreVideo/CoreVideo.h>
|
||||
|
||||
|
||||
@@ -217,11 +217,9 @@
|
||||
#include <fcntl.h>
|
||||
#endif
|
||||
|
||||
#if 0
|
||||
#ifndef WIN32
|
||||
#define SUPPORT_CPP 1
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <osgDB/fstream>
|
||||
|
||||
@@ -1008,7 +1006,7 @@ int yydebug;
|
||||
# define YYMAXDEPTH 10000
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#if YYERROR_VERBOSE
|
||||
|
||||
@@ -1063,7 +1061,7 @@ yystpcpy (yydest, yysrc)
|
||||
|
||||
#endif /* !YYERROR_VERBOSE */
|
||||
|
||||
|
||||
|
||||
|
||||
#if YYDEBUG
|
||||
/*--------------------------------.
|
||||
@@ -1998,7 +1996,7 @@ yyreduce:
|
||||
|
||||
/* Line 991 of yacc.c. */
|
||||
|
||||
|
||||
|
||||
yyvsp -= yylen;
|
||||
yyssp -= yylen;
|
||||
|
||||
|
||||
@@ -379,7 +379,7 @@ ReaderWriterCURL::ReaderWriterCURL()
|
||||
supportsProtocol("ftp","Read from ftp port using libcurl.");
|
||||
supportsProtocol("ftps","Read from ftps port using libcurl.");
|
||||
|
||||
supportsExtension("curl","Pseudo file extension, used to select curl plugin.");
|
||||
supportsExtension("curl","Psuedo file extension, used to select curl plugin.");
|
||||
supportsExtension("*","Passes all read files to other plugins to handle actual model loading.");
|
||||
supportsOption("OSG_CURL_PROXY","Specify the http proxy.");
|
||||
supportsOption("OSG_CURL_PROXYPORT","Specify the http proxy port.");
|
||||
|
||||
@@ -200,17 +200,9 @@ void daeReader::processBindMaterial( domBind_material *bm, domGeometry *geom, os
|
||||
// 0..* <extra>
|
||||
void daeReader::processMaterial(osg::StateSet *ss, domMaterial *mat )
|
||||
{
|
||||
if (!mat)
|
||||
{
|
||||
return;
|
||||
}
|
||||
if (mat->getName()) {
|
||||
ss->setName(mat->getName());
|
||||
}
|
||||
_currentInstance_effect = mat->getInstance_effect();
|
||||
if (!_currentInstance_effect)
|
||||
{
|
||||
return;
|
||||
if (mat && mat->getName()) {
|
||||
ss->setName(mat->getName());
|
||||
}
|
||||
domEffect *effect = daeSafeCast< domEffect >( getElementFromURI( _currentInstance_effect->getUrl() ) );
|
||||
if (effect)
|
||||
@@ -1012,7 +1004,7 @@ osg::Texture2D* daeReader::processTexture(
|
||||
domImage *dImg = NULL;
|
||||
|
||||
std::string target = std::string("./") + std::string(tex->getTexture());
|
||||
OSG_INFO<<"processTexture("<<target<<")"<<std::endl;
|
||||
OSG_NOTICE<<"processTexture("<<target<<")"<<std::endl;
|
||||
|
||||
daeSIDResolver res1( _currentEffect, target.c_str() );
|
||||
daeElement *el = res1.getElement();
|
||||
@@ -1047,12 +1039,6 @@ osg::Texture2D* daeReader::processTexture(
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (sampler->getSource() == NULL )
|
||||
{
|
||||
OSG_WARN << "Could not locate source for sampler2D" << std::endl;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
//find the newparam for the surface based on the sampler2D->source value
|
||||
target = std::string("./") + std::string( sampler->getSource()->getValue() );
|
||||
daeSIDResolver res2( _currentEffect, target.c_str() );
|
||||
@@ -1164,23 +1150,21 @@ Collada 1.4.1 Specification (2nd Edition) Patch Release Notes: Revision C Releas
|
||||
|
||||
In <blinn>, <constant>, <lambert>, and <phong>, the child element <transparent> now has an
|
||||
optional opaque attribute whose valid values are:
|
||||
A_ONE (the default): Takes the transparency information from the colors alpha channel, where the value 1.0 is opaque.
|
||||
RGB_ZERO: Takes the transparency information from the colors red, green, and blue channels, where the value 0.0 is opaque,
|
||||
with each channel modulated independently.
|
||||
|
||||
In the Specification, this is described in the FX Reference chapter in the
|
||||
<EFBFBD> A_ONE (the default): Takes the transparency information from the color<EFBFBD>s alpha channel, where the value 1.0 is opaque.
|
||||
<EFBFBD> RGB_ZERO: Takes the transparency information from the color<EFBFBD>s red, green, and blue channels, where the value 0.0 is opaque,
|
||||
with each channel modulated independently.
|
||||
In the Specification, this is described in the <20>FX Reference<63> chapter in the
|
||||
common_color_or_texture_type entry, along with a description of how transparency works in the
|
||||
Getting Started with COLLADA FX chapter in the Determining Transparency section.
|
||||
<EFBFBD>Getting Started with COLLADA FX<EFBFBD> chapter in the <EFBFBD>Determining Transparency<EFBFBD> section.
|
||||
|
||||
|
||||
Collada Digital Asset Schema Release 1.5.0 Release Notes
|
||||
|
||||
The <transparent> elements opaque attribute now allows, in addition to A_ONE and RGB_ZERO, the following values:
|
||||
A_ZERO: Takes the transparency information from the colors alpha channel, where the value 0.0 is opaque.
|
||||
RGB_ONE: Takes the transparency information from the colors red, green, and blue channels, where the value 1.0
|
||||
is opaque, with each channel modulated independently.
|
||||
|
||||
When we update to a version of the dom using that schema we will need to modify the code below
|
||||
The <transparent> element<EFBFBD>s opaque attribute now allows, in addition to A_ONE and RGB_ZERO, the following values:
|
||||
<EFBFBD> A_ZERO: Takes the transparency information from the color<EFBFBD>s alpha channel, where the value 0.0 is opaque.
|
||||
<EFBFBD> RGB_ONE: Takes the transparency information from the color<EFBFBD>s red, green, and blue channels, where the value 1.0
|
||||
* is opaque, with each channel modulated independently.
|
||||
* When we update to a version of the dom using that schema we will need to modify the code below
|
||||
*/
|
||||
|
||||
void daeReader::processTransparencySettings( domCommon_transparent_type *ctt,
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
#include <dom/domCOLLADA.h>
|
||||
#include <dom/domInstanceWithExtra.h>
|
||||
#include <dom/domConstants.h>
|
||||
#include <osg/ValueObject>
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/PositionAttitudeTransform>
|
||||
|
||||
@@ -586,10 +585,7 @@ osg::Node* daeReader::processNode( domNode *node, bool skeleton)
|
||||
{
|
||||
std::string name = "";
|
||||
if (node->getId())
|
||||
{
|
||||
name = node->getId();
|
||||
resultNode->setUserValue("dae_node_id", name);
|
||||
}
|
||||
if (node->getName())
|
||||
name = node->getName();
|
||||
resultNode->setName( name );
|
||||
|
||||
@@ -280,45 +280,8 @@ void daeWriter::apply( osg::Transform &node )
|
||||
}
|
||||
else
|
||||
{
|
||||
std::string nodeName = getNodeName(node, "transform");
|
||||
currentNode->setId(nodeName.c_str());
|
||||
|
||||
// Unknown transform type, just use local to world matrix
|
||||
osg::Matrix matrix;
|
||||
node.computeLocalToWorldMatrix(matrix, NULL);
|
||||
|
||||
osg::NodeCallback* ncb = node.getUpdateCallback();
|
||||
bool handled = false;
|
||||
if (ncb)
|
||||
{
|
||||
osgAnimation::UpdateMatrixTransform* ut = dynamic_cast<osgAnimation::UpdateMatrixTransform*>(ncb);
|
||||
// If targeted by an animation we split up the matrix into multiple place element so they can be targeted individually
|
||||
if (ut)
|
||||
{
|
||||
handled = true;
|
||||
|
||||
// Note: though this is a generic matrix, based on the fact that it will be animated by and UpdateMatrixTransform,
|
||||
// we assume the initial matrix can be decomposed into translation, rotation and scale elements
|
||||
writeUpdateTransformElements(matrix.getTrans(), matrix.getRotate(), matrix.getScale());
|
||||
}
|
||||
}
|
||||
|
||||
// If not targeted by an animation simply write a single matrix place element
|
||||
if (!handled)
|
||||
{
|
||||
domMatrix *mat = daeSafeCast< domMatrix >(currentNode->add( COLLADA_ELEMENT_MATRIX ) );
|
||||
nodeName += "_matrix";
|
||||
mat->setSid(nodeName.c_str());
|
||||
|
||||
const osg::Matrix::value_type *mat_vals = matrix.ptr();
|
||||
for ( int i = 0; i < 4; i++ )
|
||||
{
|
||||
for ( int j = 0; j < 4; j++ )
|
||||
{
|
||||
mat->getValue().append( mat_vals[i + j*4] );
|
||||
}
|
||||
}
|
||||
}
|
||||
currentNode->setId(getNodeName(node, "transform").c_str());
|
||||
OSG_WARN << "some other transform type. Missing " << node.getNumChildren() << " children" << std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1059,7 +1059,7 @@ bool WriteDDSFile(const osg::Image *img, std::ostream& fout, bool autoFlipDDSWri
|
||||
//unsigned int internalFormat = img->getInternalTextureFormat();
|
||||
//unsigned int components = osg::Image::computeNumComponents(pixelFormat);
|
||||
unsigned int pixelSize = osg::Image::computePixelSizeInBits(pixelFormat, dataType);
|
||||
unsigned int imageSize = img->getTotalSizeInBytes();
|
||||
unsigned int imageSize = img->getImageSizeInBytes();
|
||||
|
||||
// Check that theorical image size (computation taking into account DXTC blocks) is not bigger than actual image size.
|
||||
// This may happen, for instance, if some operation tuncated the data buffer non block-aligned. Example:
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user