Compare commits
282 Commits
OpenSceneG
...
OpenSceneG
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
07d2adec5c | ||
|
|
30fff3106d | ||
|
|
23458666b8 | ||
|
|
c91bfcee21 | ||
|
|
d763feddda | ||
|
|
3b789fc6b0 | ||
|
|
110cf64c3b | ||
|
|
9d326917f0 | ||
|
|
5ead09215e | ||
|
|
60838d0c42 | ||
|
|
bddbdfdefe | ||
|
|
0744b6881f | ||
|
|
3371ce640a | ||
|
|
dff397f647 | ||
|
|
1c833e2e4d | ||
|
|
cf268b4cfd | ||
|
|
1d628eebfb | ||
|
|
20401947bf | ||
|
|
16ac602824 | ||
|
|
4f830fb0e2 | ||
|
|
d4fc0ceba3 | ||
|
|
825882be19 | ||
|
|
bc473c4e0e | ||
|
|
a430566596 | ||
|
|
3d77abc06d | ||
|
|
033e52b8ef | ||
|
|
785ce9f679 | ||
|
|
f26be0155c | ||
|
|
9eb02084a6 | ||
|
|
bd82047acb | ||
|
|
f9a20d017a | ||
|
|
5878a70ede | ||
|
|
57d04290ab | ||
|
|
ceda86b31b | ||
|
|
499e38ff98 | ||
|
|
3461d9e8b5 | ||
|
|
4a535fe426 | ||
|
|
fc7302ccba | ||
|
|
7f4d116391 | ||
|
|
edf27e36ed | ||
|
|
c8d8a051ad | ||
|
|
4c9e17fcc7 | ||
|
|
95853370e1 | ||
|
|
c90cc658a0 | ||
|
|
7c8ab128a6 | ||
|
|
1185fbda34 | ||
|
|
005e52144d | ||
|
|
b6f05114dc | ||
|
|
8bb91a5265 | ||
|
|
13f2cb3f47 | ||
|
|
dab3efadce | ||
|
|
6f004ef7db | ||
|
|
6895e29417 | ||
|
|
6cf1db199c | ||
|
|
d4e5c72ebc | ||
|
|
3dd2816414 | ||
|
|
eeadbae72d | ||
|
|
b203faaa22 | ||
|
|
324dc573a0 | ||
|
|
750cd78178 | ||
|
|
b5179e247f | ||
|
|
84ec88cc25 | ||
|
|
7a9e97877c | ||
|
|
0bedd4c43a | ||
|
|
d1b9bdbbbe | ||
|
|
c923584158 | ||
|
|
c789f7bced | ||
|
|
18810de975 | ||
|
|
e3ba4c82e4 | ||
|
|
ce82cfd25f | ||
|
|
9c42d8f0da | ||
|
|
2b4221c211 | ||
|
|
7d04c3457a | ||
|
|
166a8b6ccf | ||
|
|
5cc425cf99 | ||
|
|
f19a63e50d | ||
|
|
506f26d292 | ||
|
|
c8d3571efd | ||
|
|
1fa34dbbcc | ||
|
|
3cabbb5a5a | ||
|
|
0c052ce2ed | ||
|
|
60bafc2050 | ||
|
|
0dd978df7a | ||
|
|
0ec0b79d6c | ||
|
|
9f0f107c66 | ||
|
|
cceb63ed12 | ||
|
|
e5185937c8 | ||
|
|
9221cab9c5 | ||
|
|
4b687b7a86 | ||
|
|
f32d30d033 | ||
|
|
c931140eaf | ||
|
|
21a2cf6ff1 | ||
|
|
3416f91704 | ||
|
|
7126619e40 | ||
|
|
12cf202cfc | ||
|
|
ae81ca6b6e | ||
|
|
27bfc09c7a | ||
|
|
ea5857c8d5 | ||
|
|
fb7f800ba7 | ||
|
|
0ecaf90a7c | ||
|
|
32fe2f09d4 | ||
|
|
46c52f2a97 | ||
|
|
dfd59cbfe1 | ||
|
|
81b32a3d89 | ||
|
|
98889b7331 | ||
|
|
4fefd87b80 | ||
|
|
586c177db9 | ||
|
|
b138fa8ab7 | ||
|
|
5aa7acd92b | ||
|
|
a4a684cb07 | ||
|
|
d009dec52f | ||
|
|
9d14c9908e | ||
|
|
cd5e4a999b | ||
|
|
46e53047bc | ||
|
|
1d120f7814 | ||
|
|
2c25825800 | ||
|
|
2f83db9442 | ||
|
|
78a59c33bd | ||
|
|
ec8a784d90 | ||
|
|
949d6f20e5 | ||
|
|
ce51923f87 | ||
|
|
1571ac72b7 | ||
|
|
64bef29848 | ||
|
|
fc0c2a76c1 | ||
|
|
fb09bd6c12 | ||
|
|
94e7f4e860 | ||
|
|
1ca2ed9729 | ||
|
|
f86acab9b2 | ||
|
|
5461ca4b6f | ||
|
|
0f797078f0 | ||
|
|
14332e5ca1 | ||
|
|
2f8a4c654a | ||
|
|
832fb9798e | ||
|
|
79b0f8c839 | ||
|
|
8d41495014 | ||
|
|
fb28e0ffa1 | ||
|
|
cb3ce747ca | ||
|
|
a6939bc46f | ||
|
|
773d0a2ddf | ||
|
|
1b3dba7860 | ||
|
|
f127220582 | ||
|
|
52abe9503f | ||
|
|
95acbe55b5 | ||
|
|
3a5d834643 | ||
|
|
2ab66723d5 | ||
|
|
044e20911b | ||
|
|
a256eac9c5 | ||
|
|
14b978369e | ||
|
|
25aeb1dadc | ||
|
|
762f0819ff | ||
|
|
0d30acccf1 | ||
|
|
5c73224c36 | ||
|
|
b65f0043ef | ||
|
|
283b9d4447 | ||
|
|
2d8b521e33 | ||
|
|
a6df790b64 | ||
|
|
c0ef8b8264 | ||
|
|
8c0413e293 | ||
|
|
a3288ea19a | ||
|
|
eeeb18926a | ||
|
|
dcb01cf3e5 | ||
|
|
6077e19029 | ||
|
|
34911d071e | ||
|
|
21acda6898 | ||
|
|
cdf9886a9e | ||
|
|
d91c8b81cd | ||
|
|
5a8aee3ede | ||
|
|
abefc9d8a8 | ||
|
|
8cbee2664f | ||
|
|
ebbf2d1653 | ||
|
|
aa81404a41 | ||
|
|
a69d12af10 | ||
|
|
1102058f31 | ||
|
|
684b4d8bf5 | ||
|
|
69fd9d7530 | ||
|
|
6ffe11dda5 | ||
|
|
a8e7dbd9ce | ||
|
|
a2e1dc04bf | ||
|
|
7b39cbddfd | ||
|
|
eaca0d3d3d | ||
|
|
2665191aed | ||
|
|
ed2b25e32c | ||
|
|
acdebc99bc | ||
|
|
574b3eb573 | ||
|
|
d32d406019 | ||
|
|
8b3a85e6bc | ||
|
|
91660974e2 | ||
|
|
0f547585d3 | ||
|
|
3ba5f22604 | ||
|
|
64707b12f2 | ||
|
|
7da5ae26d0 | ||
|
|
485776bf18 | ||
|
|
3eddec871a | ||
|
|
f8f04cb04c | ||
|
|
4f11db1653 | ||
|
|
63bd3be9cd | ||
|
|
4ca088dcf9 | ||
|
|
3ef97ddeea | ||
|
|
31c54aa3e4 | ||
|
|
76c45c7731 | ||
|
|
5efce09451 | ||
|
|
3f8e6d0a74 | ||
|
|
9433947d2a | ||
|
|
6f9b82142a | ||
|
|
1dcc2555e7 | ||
|
|
27f9021df7 | ||
|
|
9af08d6715 | ||
|
|
5c4800c774 | ||
|
|
dfd8594042 | ||
|
|
be2d80abca | ||
|
|
ca8f3d5f8a | ||
|
|
790c0091e6 | ||
|
|
ce58131cfc | ||
|
|
309da2fe07 | ||
|
|
97d706c640 | ||
|
|
f14f58c486 | ||
|
|
7c9cbc5ff9 | ||
|
|
2a70ea9f64 | ||
|
|
2f71509ebf | ||
|
|
320c51aa96 | ||
|
|
8de7ad3fa3 | ||
|
|
316726445d | ||
|
|
eac772a841 | ||
|
|
f2428e961f | ||
|
|
d636e89f9a | ||
|
|
cb67c10b5f | ||
|
|
7990effc06 | ||
|
|
8d2c3db14c | ||
|
|
04ea3aa6a2 | ||
|
|
d30a94bf4c | ||
|
|
8ff77c10f9 | ||
|
|
76edd07195 | ||
|
|
0ab211cb7c | ||
|
|
0cd6a935e0 | ||
|
|
cab0f50371 | ||
|
|
c62a57c006 | ||
|
|
fefe87ec13 | ||
|
|
8fd8036e33 | ||
|
|
f653048d5f | ||
|
|
caf56902c3 | ||
|
|
48498a1517 | ||
|
|
b86e644542 | ||
|
|
97091aa96c | ||
|
|
9574f4c087 | ||
|
|
a5002123a9 | ||
|
|
bddb6e8eaa | ||
|
|
41b1fcffe6 | ||
|
|
044f16b8b9 | ||
|
|
d581806619 | ||
|
|
48364df671 | ||
|
|
981ed52356 | ||
|
|
9a90ddd2d9 | ||
|
|
123058965c | ||
|
|
1364329fc8 | ||
|
|
07550df2f2 | ||
|
|
45f463ccd2 | ||
|
|
789d435abe | ||
|
|
6b8db67c91 | ||
|
|
2975f9c20a | ||
|
|
ebc855cf50 | ||
|
|
c9547497cc | ||
|
|
75d32b3af6 | ||
|
|
a844a278ab | ||
|
|
94dcfb4ec2 | ||
|
|
8528449dff | ||
|
|
8d7fd88d5f | ||
|
|
28dd1cf8a8 | ||
|
|
14de2266ba | ||
|
|
cc02695822 | ||
|
|
2c442c9e9a | ||
|
|
ca44b9cbce | ||
|
|
0483912e32 | ||
|
|
21b5109089 | ||
|
|
549e20fbe7 | ||
|
|
b4b7a13063 | ||
|
|
8b58890975 | ||
|
|
871521cfea | ||
|
|
f19018a03d | ||
|
|
2709a5e946 | ||
|
|
52d5d80508 | ||
|
|
86e465d5d8 | ||
|
|
50ed5ebd1c |
94
.gitignore
vendored
94
.gitignore
vendored
@@ -1,94 +0,0 @@
|
||||
doc/all_Doxyfile
|
||||
doc/auto_Doxyfile
|
||||
doc/core_Doxyfile
|
||||
doc/openscenegraph.doxyfile
|
||||
doc/openthreads.doxyfile
|
||||
|
||||
doc/OpenSceneGraphReferenceDocs/
|
||||
doc/OpenThreadsReferenceDocs/
|
||||
|
||||
cmake_uninstall.cmake
|
||||
|
||||
include/OpenThreads/Config
|
||||
include/OpenThreads/Version
|
||||
include/osg/Config
|
||||
include/osg/GL
|
||||
include/osg/Version
|
||||
include/osgQt/Version
|
||||
src/osgQt/__
|
||||
|
||||
lib/
|
||||
bin/
|
||||
|
||||
*.pc
|
||||
*.conf
|
||||
CMakeCache.txt
|
||||
CMakeFiles
|
||||
CMakeScripts
|
||||
Makefile
|
||||
cmake_install.cmake
|
||||
install_manifest*.txt
|
||||
|
||||
|
||||
# Compiled Object files
|
||||
*.slo
|
||||
*.lo
|
||||
*.o
|
||||
*.obj
|
||||
|
||||
# Precompiled Headers
|
||||
*.gch
|
||||
*.pch
|
||||
|
||||
# Compiled Dynamic libraries
|
||||
*.so
|
||||
*.dylib
|
||||
*.dll
|
||||
|
||||
# Fortran module files
|
||||
*.mod
|
||||
|
||||
# Compiled Static libraries
|
||||
*.lai
|
||||
*.la
|
||||
*.a
|
||||
*.lib
|
||||
|
||||
# Executables
|
||||
*.exe
|
||||
*.out
|
||||
*.app
|
||||
|
||||
# Platform Specifics - auto generated files
|
||||
PlatformSpecifics/Windows/*.rc
|
||||
|
||||
# Visual studio - project files
|
||||
*.sln
|
||||
*.suo
|
||||
*.vcxproj
|
||||
*.vcxproj.filters
|
||||
*.vcxproj.user
|
||||
|
||||
# Visual Studio - Build Results
|
||||
[Dd]ebug/
|
||||
[Rr]elease/
|
||||
[Mm]in[Ss]ize[Rr]el/
|
||||
[Rr]el[Ww]ith[Dd]eb[Ii]nfo/
|
||||
|
||||
# Visual Studio - Browsing Database File
|
||||
*.sdf
|
||||
*.opensdf
|
||||
|
||||
#osx xcode
|
||||
DerivedData/
|
||||
*.DS_Store
|
||||
*.build
|
||||
*.xcodeproj
|
||||
|
||||
#CPACK related files
|
||||
CPackConfig-*.cmake
|
||||
_CPack_Packages/
|
||||
|
||||
#packages
|
||||
*.tar.gz
|
||||
*.zip
|
||||
36
.travis.yml
36
.travis.yml
@@ -1,36 +0,0 @@
|
||||
matrix:
|
||||
fast_finish: true
|
||||
include:
|
||||
#Linux build
|
||||
- os: linux
|
||||
dist: trusty
|
||||
language: cpp
|
||||
env:
|
||||
#- LLVM_VERSION=3.8
|
||||
sudo: false
|
||||
cache:
|
||||
apt: true
|
||||
directories:
|
||||
- $HOME/.ccache
|
||||
compiler:
|
||||
#- clang
|
||||
- g++
|
||||
addons:
|
||||
apt:
|
||||
sources:
|
||||
#- llvm-toolchain-precise-3.8
|
||||
- ubuntu-toolchain-r-test
|
||||
packages:
|
||||
#- clang-3.8
|
||||
- g++
|
||||
- cmake
|
||||
# OSX build
|
||||
- os: osx
|
||||
language: cpp
|
||||
|
||||
script:
|
||||
- mkdir build
|
||||
- cd build
|
||||
- travis_wait 60 cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../product -DBUILD_OSG_EXAMPLES=ON ..
|
||||
- make install -j3
|
||||
|
||||
159
AUTHORS.txt
159
AUTHORS.txt
@@ -1,14 +1,15 @@
|
||||
OpenSceneGraph Library 3.4.1
|
||||
OpenSceneGraph Library 3.2.2
|
||||
|
||||
562 Contributors:
|
||||
529 Contributors:
|
||||
|
||||
Firstname Surname
|
||||
-----------------
|
||||
Robert Osfield
|
||||
Don Burns
|
||||
Stephan Huber
|
||||
Paul Martz
|
||||
Farshid Lashkari
|
||||
Mathias Fr<46>hlich
|
||||
Farshid Lashkari
|
||||
Marco Jez
|
||||
Wang Rui
|
||||
Jean-S<>bastien Guay
|
||||
@@ -19,64 +20,61 @@ Eric Wing
|
||||
Cedric Pinson
|
||||
Brede Johansen
|
||||
Bob Kuehne
|
||||
Wojciech Lewandowski
|
||||
Michael Platings
|
||||
Geoff Michel
|
||||
Wojciech Lewandowski
|
||||
Eric Sokolowsky
|
||||
Laurens Voerman
|
||||
David Callu
|
||||
Laurens Voerman
|
||||
Colin McDonald
|
||||
Trajce Nikolov
|
||||
Tim Moore
|
||||
Martin Lavery
|
||||
Mattias Helsing
|
||||
Jason Beverage
|
||||
Tree
|
||||
Pjotr Svetachov
|
||||
Luigi Calori
|
||||
Alberto Luaces
|
||||
Mike Wittman
|
||||
Jan Peciva
|
||||
Jason Beverage
|
||||
Chris Hanson
|
||||
Roland Smeenk
|
||||
Roger James
|
||||
Mattias Helsing
|
||||
Jeremy Moles
|
||||
Jannik Heller
|
||||
Jan Peciva
|
||||
Alberto Luaces
|
||||
J.P. Delport
|
||||
Andy Skinner
|
||||
Magnus Kessler
|
||||
David Fries
|
||||
Andy Skinner
|
||||
Tom Jolley
|
||||
Paul Melis
|
||||
Luc Frauciel
|
||||
Aurelien Albert
|
||||
Pavel Moloshtan
|
||||
Brad Christiansen
|
||||
Torben Dannhauer
|
||||
Terry Welsh
|
||||
Olaf Flebbe
|
||||
Mathieu Marache
|
||||
Lionel Lagarde
|
||||
Jason Daly
|
||||
Aurelien Albert
|
||||
Art Tevs
|
||||
Philip Lowman
|
||||
Per Fahlberg
|
||||
Norman Vine
|
||||
Chris Denham
|
||||
Sherman Wilcox
|
||||
Lionel Lagarde
|
||||
Terry Welsh
|
||||
Serge Lages
|
||||
Romano Jos<6F> Magacho da Silva
|
||||
Mourad Boufarguine
|
||||
Pjotr Svetachov
|
||||
Chris Denham
|
||||
Alberto Farre
|
||||
Glenn Waldron
|
||||
Torben Dannhauer
|
||||
Sherman Wilcox
|
||||
Robert Michael
|
||||
Mourad Boufarguine
|
||||
Andr<EFBFBD> Garneau
|
||||
Adrian Egli
|
||||
Sebastian Messerschmidt
|
||||
Randall Hopper
|
||||
Kristofer Tingdahl
|
||||
Jan Ciger
|
||||
Ruben Lopez
|
||||
Robert Michael
|
||||
Randall Hopper
|
||||
Jan Ciger
|
||||
Glenn Waldron
|
||||
Gideon May
|
||||
Don Tidrow
|
||||
Stephane Lamoliatte
|
||||
@@ -86,21 +84,20 @@ Joakim Simonsson
|
||||
David Spilling
|
||||
Daniel Sj<53>lie
|
||||
Bryan Thrall
|
||||
Andreas Ekstrand
|
||||
Rafa Gaitan
|
||||
Mike Connell
|
||||
Fabien Lavignotte
|
||||
Thomas Hogarth
|
||||
Andreas Ekstrand
|
||||
Riccardo Corsi
|
||||
Mike Connell
|
||||
Melchior Franz
|
||||
Konstantin Matveyev
|
||||
Johannes Baeuerle
|
||||
Thomas Hogarth
|
||||
Sebastian Messerschmidt
|
||||
Rafa Gaitan
|
||||
Neil Hughes
|
||||
Martin Beckett
|
||||
Marc Helbling
|
||||
Jordi Torres
|
||||
Joran Jessurun
|
||||
Gino van den Bergen
|
||||
Frederic Marmond
|
||||
David Guthrie
|
||||
Csaba Halasz
|
||||
Cory Riddell
|
||||
@@ -110,7 +107,6 @@ Yefei He
|
||||
Sondra Iverson
|
||||
Simon Julier
|
||||
Rune Schmidt Jensen
|
||||
Ravi Mathur
|
||||
Rainer Oder
|
||||
Nico Kruithof
|
||||
Martin Aumueller
|
||||
@@ -118,24 +114,23 @@ Mario Valle
|
||||
Lukasz Izdebski
|
||||
Jorge Izquierdo Ciges
|
||||
Gordon Tomlinson
|
||||
Frederic Marmond
|
||||
Frederic Bouvier
|
||||
Carlo Camporesi
|
||||
Bj<EFBFBD>rn Blissing
|
||||
Alexander Sinditskiy
|
||||
Ben Discoe
|
||||
Thibault Genessay
|
||||
Sasa Bistrovic
|
||||
Ravi Mathur
|
||||
Ralf Habacker
|
||||
Neil Groves
|
||||
Mikhail Izmestev
|
||||
Markus Trenkwalder
|
||||
Loic Dachary
|
||||
Joseph Steel
|
||||
Jordi Torres
|
||||
John Shue
|
||||
Hartwig Wiesmann
|
||||
Brad Colbert
|
||||
Ben Discoe
|
||||
Vladimir Chebaev
|
||||
Bj<EFBFBD>rn Blissing
|
||||
Alexander Sinditskiy
|
||||
Vivek Rajan
|
||||
Uwe Woessner
|
||||
Tony Horrobin
|
||||
@@ -152,12 +147,12 @@ Neil Salter
|
||||
Mihai Radu
|
||||
Michael Hartman
|
||||
Martins Innus
|
||||
Marc Helbling
|
||||
Maciej Krol
|
||||
Lilin Xiong
|
||||
Leandro Motta Barros
|
||||
Julien Valentin
|
||||
Johan Nouvel
|
||||
Javier Taibo
|
||||
Hartwig Wiesmann
|
||||
Donn Mielcarek
|
||||
Corbin Holtz
|
||||
Blasius Czink
|
||||
@@ -165,8 +160,11 @@ Alexander Irion
|
||||
Toshiyuki Takahei
|
||||
Sebastien Grignard
|
||||
Rudolf Wiedemann
|
||||
Robert Milharcic
|
||||
Maria Ten
|
||||
Liang Aibin
|
||||
Kristofer Tingdahl
|
||||
Konstantin Matveyev
|
||||
Katharina Plugge
|
||||
John Vidar Larring
|
||||
John Kelso
|
||||
@@ -181,26 +179,20 @@ Bruce Clay
|
||||
Bradley Anderegg
|
||||
Andreas Goebel
|
||||
Alok Priyadarshi
|
||||
Ali Botorabi
|
||||
Alberto Barbati
|
||||
Alan Dickinson
|
||||
Wee See
|
||||
Vladimir Shabanov
|
||||
Vladimir Chebaev
|
||||
Tugkan Calapoglu
|
||||
Tim Daoust
|
||||
Sylvain Marie
|
||||
Sohey Yamamoto
|
||||
Sergey Leontyev
|
||||
Santosh Gaikwad
|
||||
Ryan Pavlik
|
||||
Robert Milharcic
|
||||
Rene Molenaar
|
||||
Piotr Domagalski
|
||||
Philippe Renon
|
||||
Phil Atkin
|
||||
Pawel Ksiezopolski
|
||||
Patrick Neary
|
||||
Nathan Monteleone
|
||||
Miha Rav<61>elj
|
||||
Miguel Escriva
|
||||
Mattias Linde
|
||||
Mark Sciabica
|
||||
@@ -210,14 +202,11 @@ Lars Nilsson
|
||||
Konstantin Sinitsyn
|
||||
Ken Sewell
|
||||
Julian Ortiz
|
||||
Julen Garcia
|
||||
John Kaniarz
|
||||
Johannes Scholz
|
||||
Jim Vaughan
|
||||
Jeremy Bell
|
||||
Jaromir Vitek
|
||||
James French
|
||||
Jaap Glas
|
||||
Guillaume Millet
|
||||
Gary Quinn
|
||||
Garrett Potts
|
||||
@@ -226,48 +215,46 @@ Fabio Mierlo
|
||||
Doug McCorkle
|
||||
Donald Cipperly
|
||||
Don Leich
|
||||
Don Burns
|
||||
Dietmar Funck
|
||||
Colin Cochran
|
||||
Christian Ruzicka
|
||||
Christian Buchner
|
||||
Charles Cole
|
||||
Blake Williams
|
||||
Bj<EFBFBD>rn Hein
|
||||
Aur<EFBFBD>lien Chatelain
|
||||
Antoine Hue
|
||||
Andrew Bettison
|
||||
Andreas Henne
|
||||
Anders Backman
|
||||
Ali Botorabi
|
||||
Alexander Wiebel
|
||||
Alessandro Terenzi
|
||||
Alberto Barbati
|
||||
Zach Deedler
|
||||
Yuzhong Shen
|
||||
Wee See
|
||||
Warren Macchi
|
||||
Vincent Bourdier
|
||||
Terrex
|
||||
Tassilo Glander
|
||||
Sylvain Marie
|
||||
Steve Lunsford
|
||||
Stephane Simon
|
||||
Stephan Eilemann
|
||||
Stanislav Blinov
|
||||
Sergey Polischuk
|
||||
Roni Zanolli
|
||||
Raymond de Vries
|
||||
Ralf Kern
|
||||
Piotr Gwiazdowski
|
||||
Pierre Haritchabalet
|
||||
Perry Miller
|
||||
Pawel Ksiezopolski
|
||||
Paul Palumbo
|
||||
Paul Obermeier
|
||||
Patrick Neary
|
||||
Nguyen Van Truong
|
||||
Nathan Cournia
|
||||
Morten Haukness
|
||||
Morn<EFBFBD> Pistorius
|
||||
Michael Mc Donnell
|
||||
Michael Henheffer
|
||||
Michael Guerrero
|
||||
Maya Leonard
|
||||
Max Bandazian
|
||||
Mathias Fiedler
|
||||
Mathew May
|
||||
@@ -281,13 +268,18 @@ Marcel Pursche
|
||||
Lilith Bryant
|
||||
Kevin Moiule
|
||||
Keith Steffen
|
||||
Julien Valentin
|
||||
Julen Garcia
|
||||
Joseph Winston
|
||||
John Aughey
|
||||
Johannes Scholz
|
||||
Joachim Pouderoux
|
||||
Jean-Christophe Lombardo
|
||||
Javier Taibo
|
||||
Jannik Heller
|
||||
Jan Klimke
|
||||
James Turner
|
||||
James Moliere
|
||||
Jaap Glas
|
||||
Igor Kravtchenko
|
||||
Himar Carmona
|
||||
He Sicong
|
||||
@@ -297,13 +289,12 @@ Guillaume Taze
|
||||
Guillaume Chouvenc
|
||||
Giuseppe Donvito
|
||||
Gill Peacegood
|
||||
Giampaolo Vigan<61>
|
||||
Gerrick Bivins
|
||||
George Tarantilis
|
||||
Ferdi Smit
|
||||
Eric Buehler
|
||||
Eduardo Poyart
|
||||
Edgar Ellis
|
||||
Dmitry Marakasov
|
||||
Dimi Christopoulos
|
||||
Diane Delall<6C>e
|
||||
David Longest
|
||||
@@ -312,20 +303,18 @@ Daniel Trstenjak
|
||||
Craig Bosma
|
||||
Claus Scheiblauer
|
||||
Christophe Loustaunau
|
||||
Christian Kehl
|
||||
Christian Ruzicka
|
||||
Bradley Baker Searles
|
||||
Brad Anderegg
|
||||
Bj<EFBFBD>rn Hein
|
||||
Aric Aumann
|
||||
Anish Thomas
|
||||
Andrew Sampson
|
||||
Andrew Lorino
|
||||
Alexandre Amalric
|
||||
Aitor Moreno
|
||||
Zbigniew Sroczynski
|
||||
Yuri Vilmanis
|
||||
Xin Li
|
||||
Wang Lam
|
||||
Wand Rui
|
||||
Walter J. Altice
|
||||
Volker Walkiewicz
|
||||
Vladimir Vukicevic
|
||||
@@ -339,8 +328,6 @@ Valeriy Dubov
|
||||
Vaclav Bilek
|
||||
Tyge L<>vset
|
||||
Troy Yee
|
||||
Torben Dannahauer
|
||||
Tony Vasile
|
||||
Tomas Hogarth
|
||||
Tomas Hnilica
|
||||
Todd Furlong
|
||||
@@ -353,7 +340,6 @@ Tan Dunning
|
||||
Tamer Fahmy
|
||||
Stewart Andreason
|
||||
Steven Thomas
|
||||
Stephan Wenglorz
|
||||
Simon Hammett
|
||||
Simon Carmody
|
||||
Simon Buckley
|
||||
@@ -363,7 +349,6 @@ Shane Arnott
|
||||
Sergey Kurdakov
|
||||
Sebastien Kuntz
|
||||
Ruth Lang
|
||||
Ruben The
|
||||
Ruben Smelik
|
||||
Ross Anderson
|
||||
Ronny Krueger
|
||||
@@ -390,11 +375,9 @@ Philip Lamb
|
||||
Petr Salinger
|
||||
Peter Bear
|
||||
Peter Amstutz
|
||||
Per Nordqvist
|
||||
Paul Idstein
|
||||
Paul Fredrikson
|
||||
Paul Fotheringham
|
||||
Paul Cheyrou-Lagreze
|
||||
Pau Garcia
|
||||
Patrick Hartling
|
||||
Parag Chaudhur
|
||||
@@ -405,23 +388,20 @@ Oren Fromberg
|
||||
Oliver Neumann
|
||||
Ole-Morten Duesund
|
||||
Nicolas Brodu
|
||||
Nick Thu
|
||||
Nick Black
|
||||
Mojtaba Fathi
|
||||
Mirko Viviani
|
||||
Mikkel Gj<47>l
|
||||
Mike Krus
|
||||
Mike Garrity
|
||||
Mick Thu
|
||||
Michal Durkovic
|
||||
Miha Rav<61>elj
|
||||
Michael Schanne
|
||||
Michael Polak
|
||||
Michael Morrison
|
||||
Michael Mc Donnell
|
||||
Michael Logan
|
||||
Michael Kapelko
|
||||
Michael Bach Jensen
|
||||
Maya Thu
|
||||
Maya Leonard
|
||||
Max Rhiener
|
||||
Max Behensky
|
||||
Mauricio Hofmam
|
||||
@@ -437,13 +417,11 @@ Martin Innus
|
||||
Martin Beck
|
||||
Marius Kintel
|
||||
Mario Guimaraes
|
||||
Marcus Hein
|
||||
Marco Thu
|
||||
Marco Sciabica
|
||||
Marco Lehmann
|
||||
Maik Keller
|
||||
Lukas Diduch
|
||||
Louis Hamilton
|
||||
Likasz Izebski
|
||||
Lewis Harmon
|
||||
Leigh Stivers
|
||||
Laurence Muller
|
||||
@@ -460,24 +438,19 @@ Juergen Rensen
|
||||
Juan Manuel Alvarez
|
||||
Juan Hernando
|
||||
Josh Portway
|
||||
Jonathan Greig
|
||||
John Tan
|
||||
John Hedström
|
||||
John Grant
|
||||
John Farrier
|
||||
John Donovan
|
||||
John Davis
|
||||
John Cummings
|
||||
John Argentieri
|
||||
Joe Thompson
|
||||
Joan Abadie
|
||||
Jim Brooks
|
||||
Jeroen den Dekker
|
||||
Jeffrey Kinross
|
||||
Jay Zuckerman
|
||||
Jason Howlett
|
||||
Jason Ballenger
|
||||
Jamie Robertson
|
||||
James Turner
|
||||
James Killian
|
||||
James Athey
|
||||
J.E. Hoffmann
|
||||
@@ -488,10 +461,8 @@ Hartmut Seichter
|
||||
Gunter Huber
|
||||
Gregory Jaegy
|
||||
Graeme Harkness
|
||||
Github It
|
||||
Gian Lorenzetto
|
||||
George Papagiannakis
|
||||
Geoff Thu
|
||||
Galen Faidley
|
||||
Frida Schlaug
|
||||
Frederic Smith
|
||||
@@ -506,8 +477,6 @@ Ferdinand Cornelissen
|
||||
Fajran Iman
|
||||
Fabien Dachicourt
|
||||
Erik Johnson
|
||||
Eric Thu
|
||||
Eric Buehler
|
||||
Eduardo Alberto
|
||||
Edmond Gheury
|
||||
Ed Ralston
|
||||
@@ -515,7 +484,7 @@ Duvan Cope
|
||||
Duncan Cavens
|
||||
Drew Whitehouse
|
||||
Douglas A. Pouk
|
||||
Dmitriy Ogalcev
|
||||
Dmitry Marakasov
|
||||
Dean Iverson
|
||||
David Jung
|
||||
Danny Valente
|
||||
@@ -523,7 +492,6 @@ Daniel Stien
|
||||
Dan Minor
|
||||
C<EFBFBD>sar L. B. Silveira
|
||||
Cyril Brulebois
|
||||
Cory Slep
|
||||
Cl<EFBFBD>ment B<>sch
|
||||
Clay Fowler
|
||||
Claus Steuer
|
||||
@@ -539,8 +507,8 @@ Carlos Garcea
|
||||
Bryce Eldridge
|
||||
Bruno Herbelin
|
||||
Brian Keener
|
||||
Brede Thu
|
||||
Brandon Hamm
|
||||
Bora Utka
|
||||
Bill Prendergast
|
||||
Bernardt Duvenhage
|
||||
Benoit Laniel
|
||||
@@ -550,15 +518,14 @@ Bart Gallet
|
||||
Axel Volley
|
||||
Arjun Ramamurthy
|
||||
Anthousis Andreadis
|
||||
Anish Thomas
|
||||
Andy Preece
|
||||
Andrew Reyonolds
|
||||
Andreas Roth
|
||||
Andreas Jochens
|
||||
Andre Normann
|
||||
Alois Wismer
|
||||
Almalric Alexandre
|
||||
Allen Bierbaum
|
||||
Alexey Pavlov
|
||||
Alberto Jaspe
|
||||
Alan Purvis
|
||||
Alan Ott
|
||||
|
||||
413
CMakeLists.txt
413
CMakeLists.txt
@@ -52,12 +52,12 @@ endif()
|
||||
PROJECT(OpenSceneGraph)
|
||||
|
||||
SET(OPENSCENEGRAPH_MAJOR_VERSION 3)
|
||||
SET(OPENSCENEGRAPH_MINOR_VERSION 4)
|
||||
SET(OPENSCENEGRAPH_PATCH_VERSION 1)
|
||||
SET(OPENSCENEGRAPH_SOVERSION 131)
|
||||
SET(OPENSCENEGRAPH_MINOR_VERSION 2)
|
||||
SET(OPENSCENEGRAPH_PATCH_VERSION 2)
|
||||
SET(OPENSCENEGRAPH_SOVERSION 100)
|
||||
|
||||
# set to 0 when not a release candidate, non zero means that any generated
|
||||
# git tags will be treated as release candidates of given number
|
||||
# svn tags will be treated as release candidates of given number
|
||||
SET(OPENSCENEGRAPH_RELEASE_CANDIDATE 0)
|
||||
|
||||
SET(OPENSCENEGRAPH_VERSION ${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION}.${OPENSCENEGRAPH_PATCH_VERSION})
|
||||
@@ -85,16 +85,85 @@ SET(OpenThreads_SOURCE_DIR ${OpenSceneGraph_SOURCE_DIR})
|
||||
# Maybe this can be used override existing behavior if needed?
|
||||
SET(CMAKE_MODULE_PATH "${OpenSceneGraph_SOURCE_DIR}/CMakeModules;${CMAKE_MODULE_PATH}")
|
||||
|
||||
|
||||
# Change the default build type to Release
|
||||
IF(NOT CMAKE_BUILD_TYPE)
|
||||
SET(CMAKE_BUILD_TYPE Release CACHE STRING "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE)
|
||||
ENDIF(NOT CMAKE_BUILD_TYPE)
|
||||
|
||||
|
||||
IF(ANDROID)
|
||||
## Option to enable Android build using AndroidNDK
|
||||
OPTION(OSG_BUILD_PLATFORM_ANDROID OFF)
|
||||
IF(OSG_BUILD_PLATFORM_ANDROID)
|
||||
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0 FATAL_ERROR)
|
||||
|
||||
INCLUDE(OsgAndroidMacroUtils)
|
||||
SET(ANDROID TRUE)
|
||||
IF(NOT ANDROID_PLATFORM)
|
||||
MESSAGE("Warning Android Platform version NOT defined, Default selected version: 5")
|
||||
SET(ANDROID_PLATFORM 5)
|
||||
ENDIF()
|
||||
IF(NOT ANDROID_ABI)
|
||||
MESSAGE("Warning Android ABI version NOT defined, Default selection: armeabi armeabi-v7a")
|
||||
SET(ANDROID_ABI "armeabi armeabi-v7a")
|
||||
ENDIF()
|
||||
IF(NOT ANDROID_STL)
|
||||
MESSAGE("Warning Android STL NOT defined, Default selection: gnustl_static")
|
||||
SET(ANDROID_STL "gnustl_static")
|
||||
ENDIF()
|
||||
IF(ANDROID_DEBUG)
|
||||
MESSAGE("Warning Android Build is in debug mode")
|
||||
SET(ANDROID_RELEASE_OPTIM "debug")
|
||||
ELSE()
|
||||
MESSAGE("Warning Android Build is in release mode")
|
||||
SET(ANDROID_RELEASE_OPTIM "release")
|
||||
ENDIF()
|
||||
IF(ANDROID_NEON)
|
||||
MESSAGE("Warning Android NEON optimizations enabled, this will not be available on all armeabi-v7a devices ie. Tegra2")
|
||||
SET(ANDROID_OPTIM_NEON true)
|
||||
ELSE()
|
||||
SET(ANDROID_OPTIM_NEON false)
|
||||
ENDIF()
|
||||
IF(ANDROID_ARM32)
|
||||
MESSAGE("Warning ARM 32bit instruction set will be used")
|
||||
SET(ANDROID_OPTIM_ARM32 true)
|
||||
ELSE()
|
||||
SET(ANDROID_OPTIM_ARM32 false)
|
||||
ENDIF()
|
||||
|
||||
FIND_PACKAGE(AndroidNDK REQUIRED)
|
||||
|
||||
SET(OSG_ANDROID_TEMPLATES "${CMAKE_SOURCE_DIR}/PlatformSpecifics/Android")
|
||||
|
||||
SET(J "4" CACHE STRING "how many processes for make -j <J>")
|
||||
|
||||
ADD_CUSTOM_COMMAND(
|
||||
OUTPUT Android-OpenSceneGraph
|
||||
DEPENDS ${CMAKE_BINARY_DIR}/Android.mk
|
||||
COMMAND "${ANDROID_NDK}/ndk-build"
|
||||
ARGS --directory=${CMAKE_BINARY_DIR} NDK_APPLICATION_MK=Application.mk -j${J} NDK_LOG=1
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(ndk ALL echo
|
||||
DEPENDS Android-OpenSceneGraph
|
||||
)
|
||||
install(DIRECTORY include/ DESTINATION include/
|
||||
PATTERN ".svn" EXCLUDE
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/include/ DESTINATION include/
|
||||
)
|
||||
install(DIRECTORY ${CMAKE_BINARY_DIR}/obj/ DESTINATION obj/
|
||||
PATTERN ".svn" EXCLUDE
|
||||
PATTERN "objs" EXCLUDE
|
||||
)
|
||||
|
||||
ADD_DEFINITIONS(-DANDROID)
|
||||
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
# Okay, here's the problem: On some platforms, linking against OpenThreads
|
||||
# is not enough and explicit linking to the underlying thread library
|
||||
# is also required (e.g. FreeBSD). But OpenThreads may be built with different
|
||||
@@ -114,15 +183,27 @@ IF(CMAKE_SYSTEM MATCHES IRIX)
|
||||
SET(CMAKE_THREAD_LIBS_INIT "" CACHE INTERNAL "")
|
||||
ENDIF()
|
||||
|
||||
OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making git branches, tags, updating ChangeLog." OFF)
|
||||
OPTION(OSG_MAINTAINER "Enable OpenSceneGraph maintainer build methods, such as making svn branches, tags, updating ChangeLog." OFF)
|
||||
IF (OSG_MAINTAINER)
|
||||
|
||||
#SET(OPENSCENEGRAPH_SVN "trunk")
|
||||
SET(OPENSCENEGRAPH_SVN "branches")
|
||||
SET(OPENSCENEGRAPH_BRANCH OpenSceneGraph-${OPENSCENEGRAPH_MAJOR_VERSION}.${OPENSCENEGRAPH_MINOR_VERSION})
|
||||
|
||||
#
|
||||
# Provide target for tagging a release
|
||||
#
|
||||
SET(GITCOMMAND git)
|
||||
SET(SVNCOMMAND svn)
|
||||
SET(SVNTRUNKDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/trunk)
|
||||
SET(SVNTAGDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/tags)
|
||||
SET(SVNBRANCHDIR http://svn.openscenegraph.org/osg/OpenSceneGraph/branches)
|
||||
|
||||
IF (OPENSCENEGRAPH_SVN STREQUAL "trunk")
|
||||
SET(SVNSOURCEDIR ${SVNTRUNKDIR})
|
||||
ELSE()
|
||||
SET(SVNSOURCEDIR ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH})
|
||||
ENDIF()
|
||||
|
||||
|
||||
IF (OPENSCENEGRAPH_RELEASE_CANDIDATE EQUAL 0)
|
||||
SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION})
|
||||
@@ -130,38 +211,31 @@ IF (OSG_MAINTAINER)
|
||||
SET(RELEASE_NAME OpenSceneGraph-${OPENSCENEGRAPH_VERSION}-rc${OPENSCENEGRAPH_RELEASE_CANDIDATE})
|
||||
ENDIF()
|
||||
|
||||
SET(RELEASE_MESSAGE "Release ${RELEASE_NAME}")
|
||||
SET(BRANCH_MESSAGE "Branch ${OPENSCENEGRAPH_BRANCH}")
|
||||
|
||||
|
||||
ADD_CUSTOM_TARGET(tag-test
|
||||
COMMAND echo ${GITCOMMAND} tag -a ${RELEASE_NAME} -m ${RELEASE_MESSAGE}
|
||||
COMMAND echo ${GITCOMMAND} push origin ${RELEASE_NAME}
|
||||
COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(tag-run
|
||||
COMMAND ${GITCOMMAND} tag -a ${RELEASE_NAME} -m ${RELEASE_MESSAGE}
|
||||
COMMAND ${GITCOMMAND} push origin ${RELEASE_NAME}
|
||||
COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNTAGDIR}/${RELEASE_NAME} -m "Release ${RELEASE_NAME}"
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(branch-test
|
||||
COMMAND echo ${GITCOMMAND} branch ${OPENSCENEGRAPH_BRANCH} -m ${BRANCH_MESSAGE}
|
||||
COMMAND echo ${GITCOMMAND} push origin ${OPENSCENEGRAPH_BRANCH}
|
||||
COMMAND echo ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
|
||||
)
|
||||
|
||||
ADD_CUSTOM_TARGET(branch-run
|
||||
COMMAND ${GITCOMMAND} branch ${OPENSCENEGRAPH_BRANCH} -m ${BRANCH_MESSAGE}
|
||||
COMMAND ${GITCOMMAND} push origin ${OPENSCENEGRAPH_BRANCH}
|
||||
COMMAND ${SVNCOMMAND} copy ${SVNSOURCEDIR} ${SVNBRANCHDIR}/${OPENSCENEGRAPH_BRANCH} -m "Branch ${OPENSCENEGRAPH_BRANCH}"
|
||||
)
|
||||
|
||||
#
|
||||
# Provide target for generating ChangeLog
|
||||
#
|
||||
SET(GITLOGFORMAT "%aD%nChecked in by : %an%n%s%b%n")
|
||||
SET(GENERATELOGS git log --pretty=format:${GITLOGFORMAT})
|
||||
SET(GENERATELOGS svn2cl)
|
||||
|
||||
ADD_CUSTOM_TARGET(ChangeLog
|
||||
COMMAND ${GENERATELOGS} > ChangeLog
|
||||
COMMAND ${SVNCOMMAND} update
|
||||
COMMAND ${GENERATELOGS} ${SVNSOURCEDIR}
|
||||
)
|
||||
|
||||
ENDIF(OSG_MAINTAINER)
|
||||
@@ -228,10 +302,6 @@ ELSE()
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
IF(UNIX AND NOT ANDROID)
|
||||
# Not sure what this will do on Cygwin and Msys
|
||||
# Also, remember OS X X11 is a user installed option so it may not exist.
|
||||
@@ -393,228 +463,49 @@ ENDIF()
|
||||
OPTION(OSG_DISABLE_MSVC_WARNINGS "Set to OFF to not disable MSVC warnings generated by OSG headers." ON)
|
||||
MARK_AS_ADVANCED(OSG_DISABLE_MSVC_WARNINGS)
|
||||
|
||||
OPTION(OSG_PROVIDE_READFILE "Set to ON for include/osgDB/ReadFile to provide the osgDB::read*File(() methods. " ON)
|
||||
OPTION(OSG_USE_REF_PTR_IMPLICIT_OUTPUT_CONVERSION "Set to ON to use the ref_ptr<> T* operator() output conversion. " ON)
|
||||
|
||||
|
||||
# Map the OPENGL_PROFILE to OSG_GL*_AVAILABLE settings
|
||||
SET(OPENGL_PROFILE "GL2" CACHE STRING "OpenGL Profile to use, choose from GL1, GL2, GL3, GLES1, GLES2, GLES3")
|
||||
|
||||
IF ((OPENGL_PROFILE STREQUAL "GL1") OR (OPENGL_PROFILE STREQUAL "GL2"))
|
||||
OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." ON )
|
||||
ELSE()
|
||||
OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." OFF )
|
||||
ENDIF()
|
||||
|
||||
IF ((OPENGL_PROFILE STREQUAL "GL2"))
|
||||
OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." ON )
|
||||
ELSE()
|
||||
OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." OFF )
|
||||
ENDIF()
|
||||
|
||||
IF ((OPENGL_PROFILE STREQUAL "GL3") OR (OPENGL_PROFILE STREQUAL "GLCORE"))
|
||||
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." ON )
|
||||
ELSE()
|
||||
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." OFF )
|
||||
ENDIF()
|
||||
|
||||
IF ((OPENGL_PROFILE STREQUAL "GLES1"))
|
||||
OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." ON )
|
||||
ELSE()
|
||||
OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." OFF )
|
||||
ENDIF()
|
||||
|
||||
IF ((OPENGL_PROFILE STREQUAL "GLES2"))
|
||||
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." ON )
|
||||
ELSEIF ((OPENGL_PROFILE STREQUAL "GLES3"))
|
||||
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." ON )
|
||||
OPTION(OSG_GLES3_AVAILABLE "Set to OFF to disable use of OpenGL ES 3.x functions library." ON )
|
||||
ELSE()
|
||||
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." OFF )
|
||||
OPTION(OSG_GLES3_AVAILABLE "Set to OFF to disable use of OpenGL ES 3.x functions library." OFF )
|
||||
ENDIF()
|
||||
|
||||
|
||||
OPTION(OSG_GL1_AVAILABLE "Set to OFF to disable use of OpenGL 1.x functions library." ON)
|
||||
OPTION(OSG_GL2_AVAILABLE "Set to OFF to disable use of OpenGL 2.x functions library." ON)
|
||||
OPTION(OSG_GL3_AVAILABLE "Set to OFF to disable use of OpenGL 3.x functions library." OFF)
|
||||
OPTION(OSG_GLES1_AVAILABLE "Set to OFF to disable use of OpenGL ES 1.x functions library." OFF)
|
||||
OPTION(OSG_GLES2_AVAILABLE "Set to OFF to disable use of OpenGL ES 2.x functions library." OFF)
|
||||
OPTION(OSG_GL_LIBRARY_STATIC "Set to ON to statically link with OpenGL/GLES library." OFF)
|
||||
|
||||
SET(OPENGL_egl_LIBRARY CACHE STRING "Set the OpenGL egl library.")
|
||||
|
||||
# Map the OSG_GL*_AVAILABLE settings to OSG_GL_* settings
|
||||
IF (OSG_GLES2_AVAILABLE OR OSG_GL3_AVAILABLE)
|
||||
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." OFF)
|
||||
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." OFF)
|
||||
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." OFF)
|
||||
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." OFF)
|
||||
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." OFF)
|
||||
ELSEIF (OSG_GLES1_AVAILABLE)
|
||||
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." OFF)
|
||||
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ON)
|
||||
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ON)
|
||||
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ON)
|
||||
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ON)
|
||||
ELSE()
|
||||
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." ON)
|
||||
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ON)
|
||||
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ON)
|
||||
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ON)
|
||||
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ON)
|
||||
ENDIF()
|
||||
# SET(OSG_GL_DISPLAYLISTS_AVAILABLE ${OSG_GL1_AVAILABLE})
|
||||
# SET(OSG_GL_MATRICES_AVAILABLE ${OSG_GL1_AVAILABLE})
|
||||
# SET(OSG_GL_VERTEX_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
|
||||
# SET(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE ${OSG_GL1_AVAILABLE})
|
||||
# SET(OSG_GL_FIXED_FUNCTION_AVAILABLE ${OSG_GL1_AVAILABLE})
|
||||
|
||||
IF (OSG_GLES1_AVAILABLE OR OSG_GLES2_AVAILABLE)
|
||||
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." OFF)
|
||||
ELSE()
|
||||
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." ON)
|
||||
ENDIF()
|
||||
|
||||
|
||||
# Map the OSG_GL*_AVAILABLE settings to OpenGL header settings
|
||||
IF (OSG_GL3_AVAILABLE)
|
||||
IF (APPLE)
|
||||
SET(OPENGL_HEADER1 "#include <OpenGL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "#include <OpenGL/gl3.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ELSE()
|
||||
|
||||
IF (OPENGL_PROFILE STREQUAL "GLCORE")
|
||||
IF(WIN32)
|
||||
FIND_PACKAGE(GLCORE REQUIRED)
|
||||
ENDIF()
|
||||
SET(OPENGL_HEADER1 "#include <GL/glcorearb.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ELSE()
|
||||
SET(OPENGL_HEADER1 "#include <GL3/gl3.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ENDIF()
|
||||
|
||||
ENDIF()
|
||||
ELSEIF(OSG_GLES1_AVAILABLE)
|
||||
IF (APPLE AND NOT ANDROID)
|
||||
SET(OPENGL_HEADER1 "#include \"TargetConditionals.h\"" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "#include <OpenGLES/ES1/gl.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ELSE()
|
||||
SET(OPENGL_HEADER1 "#include <GLES/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ENDIF()
|
||||
ELSEIF(OSG_GLES2_AVAILABLE)
|
||||
IF (APPLE AND NOT ANDROID)
|
||||
SET(OPENGL_HEADER1 "#include \"TargetConditionals.h\"" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "#include <OpenGLES/ES2/gl.h>" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
# TODO: GLES3
|
||||
ELSE()
|
||||
SET(OPENGL_HEADER1 "#include <GLES2/gl2.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
# TODO: GLES3
|
||||
ENDIF()
|
||||
ELSE()
|
||||
IF (APPLE)
|
||||
SET(OPENGL_HEADER1 "#include <OpenGL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ELSE()
|
||||
SET(OPENGL_HEADER1 "#include <GL/gl.h>" CACHE STRING "#include<> line for OpenGL Header")
|
||||
SET(OPENGL_HEADER2 "" CACHE STRING "#include<> line for additional OpenGL Headers if required")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GL1_AVAILABLE)
|
||||
SET(OSG_GL1_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GL1_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GL2_AVAILABLE)
|
||||
SET(OSG_GL2_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GL2_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GL3_AVAILABLE)
|
||||
SET(OSG_GL3_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GL3_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GLES1_AVAILABLE)
|
||||
SET(OSG_GLES1_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GLES1_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GLES2_AVAILABLE)
|
||||
SET(OSG_GLES2_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GLES2_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF (OSG_GLES3_AVAILABLE)
|
||||
SET(OSG_GLES3_FEATURES 1)
|
||||
ELSE()
|
||||
SET(OSG_GLES3_FEATURES 0)
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
IF(OSG_GLES1_AVAILABLE)
|
||||
FIND_PATH(OPENGL_INCLUDE_DIR GLES/gl.h
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/include)
|
||||
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv1_CM
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/lib)
|
||||
ELSEIF(OSG_GLES2_AVAILABLE)
|
||||
FIND_PATH(OPENGL_INCLUDE_DIR GLES2/gl2.h
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/include)
|
||||
FIND_LIBRARY(OPENGL_gl_LIBRARY GLESv2
|
||||
PATHS
|
||||
${ANDROID_SYSROOT}/usr/lib)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
OPTION(OSG_GL_DISPLAYLISTS_AVAILABLE "Set to OFF to disable use of OpenGL display lists." ${OSG_GL1_AVAILABLE})
|
||||
OPTION(OSG_GL_MATRICES_AVAILABLE "Set to OFF to disable use of OpenGL built-in matrices." ${OSG_GL1_AVAILABLE})
|
||||
OPTION(OSG_GL_VERTEX_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertex/glColor etc." ${OSG_GL1_AVAILABLE})
|
||||
OPTION(OSG_GL_VERTEX_ARRAY_FUNCS_AVAILABLE "Set to OFF to disable use of OpenGL vertex functions such as glVertexPointer/glColorPointer etc." ${OSG_GL1_AVAILABLE})
|
||||
OPTION(OSG_GL_FIXED_FUNCTION_AVAILABLE "Set to OFF to disable use of OpenGL fixed function pipeline." ${OSG_GL1_AVAILABLE})
|
||||
|
||||
OPTION(OSG_CPP_EXCEPTIONS_AVAILABLE "Set to OFF to disable compile of OSG components that use C++ exceptions." ON)
|
||||
|
||||
################################################################################
|
||||
# Set Config header file
|
||||
# Set Config file
|
||||
|
||||
SET(OPENSCENEGRAPH_CONFIG_HEADER "${PROJECT_BINARY_DIR}/include/osg/Config")
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Config.in"
|
||||
"${OPENSCENEGRAPH_CONFIG_HEADER}")
|
||||
|
||||
|
||||
################################################################################
|
||||
# Set OpenGL header file
|
||||
|
||||
INCLUDE (CheckCXXSourceCompiles)
|
||||
#SET(CMAKE_REQUIRED_INCLUDES ${CMAKE_REQUIRED_INCLUDES} ${OPENGL_INCLUDE_DIR})
|
||||
|
||||
check_cxx_source_compiles(
|
||||
"${OPENGL_HEADER1}
|
||||
${OPENGL_HEADER2}
|
||||
int main() { GLint64 test; return 0; }"
|
||||
GL_HEADER_HAS_GLINT64
|
||||
)
|
||||
|
||||
check_cxx_source_compiles(
|
||||
"${OPENGL_HEADER1}
|
||||
${OPENGL_HEADER2}
|
||||
int main() { GLuint64 test; return 0; }"
|
||||
GL_HEADER_HAS_GLUINT64
|
||||
)
|
||||
|
||||
SET(OPENSCENEGRAPH_OPENGL_HEADER "${PROJECT_BINARY_DIR}/include/osg/GL")
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/GL.in"
|
||||
"${OPENSCENEGRAPH_OPENGL_HEADER}")
|
||||
SET(OPENSCENEGRAPH_VERSION_HEADER "${CMAKE_CURRENT_SOURCE_DIR}/include/osg/Version")
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Version.in"
|
||||
"${OPENSCENEGRAPH_VERSION_HEADER}")
|
||||
|
||||
# INSTALL_FILES(/include/osg/ FILES "${OPENSCENEGRAPH_CONFIG_HEADER}")
|
||||
|
||||
|
||||
################################################################################
|
||||
# Set Version header file
|
||||
|
||||
SET(OPENSCENEGRAPH_VERSION_HEADER "${PROJECT_BINARY_DIR}/include/osg/Version")
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/src/osg/Version.in"
|
||||
"${OPENSCENEGRAPH_VERSION_HEADER}")
|
||||
|
||||
################################################################################
|
||||
# Set Version Info resource file
|
||||
|
||||
|
||||
IF(MSVC)
|
||||
SET(OPENSCENEGRAPH_VERSIONINFO_RC "${PROJECT_BINARY_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc")
|
||||
CONFIGURE_FILE("${CMAKE_CURRENT_SOURCE_DIR}/PlatformSpecifics/Windows/OpenSceneGraphVersionInfo.rc.in"
|
||||
@@ -636,13 +527,12 @@ IF(WIN32 AND NOT ANDROID)
|
||||
INCLUDE(Find3rdPartyDependencies)
|
||||
ENDIF()
|
||||
|
||||
OPTION(OSG_USE_LOCAL_LUA_SOURCE "Enable to use local Lua source when building the lua plugin" ON)
|
||||
|
||||
#
|
||||
# If you want to prevent CMake from picking up on any of the following optional 3rd Party dependencies in CMake 2.8 onwards
|
||||
# you can use the following style of command line option when invoking Cmake (here illustrating ignoring PythonLibs) :
|
||||
# cmake -DCMAKE_DISABLE_FIND_PACKAGE_PythonLibs=1 .
|
||||
#
|
||||
|
||||
IF(ANDROID)
|
||||
ANDROID_3RD_PARTY()
|
||||
ELSE()
|
||||
@@ -663,10 +553,7 @@ ELSE()
|
||||
FIND_PACKAGE(LibVNCServer)
|
||||
FIND_PACKAGE(OurDCMTK)
|
||||
FIND_PACKAGE(FFmpeg)
|
||||
FIND_PACKAGE(GStreamer COMPONENTS app pbutils)
|
||||
FIND_PACKAGE(GLIB COMPONENTS gobject)
|
||||
FIND_PACKAGE(DirectShow)
|
||||
FIND_PACKAGE(SDL2)
|
||||
FIND_PACKAGE(SDL)
|
||||
FIND_PACKAGE(Poppler-glib)
|
||||
FIND_PACKAGE(RSVG)
|
||||
@@ -677,19 +564,6 @@ ELSE()
|
||||
FIND_PACKAGE(Asio)
|
||||
ENDIF()
|
||||
FIND_PACKAGE(ZeroConf)
|
||||
|
||||
FIND_PACKAGE(LIBLAS)
|
||||
|
||||
IF (NOT(OSG_USE_LOCAL_LUA_SOURCE))
|
||||
FIND_PACKAGE(Lua52)
|
||||
IF (NOT (LUA_LIBRARIES AND LUA_INCLUDE_DIR))
|
||||
FIND_PACKAGE(Lua51)
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
# V8 and Python plugins are tests for linking against these libraries but aren't functionality beyond this.
|
||||
# FIND_PACKAGE(V8)
|
||||
# FIND_PACKAGE(PythonLibs)
|
||||
ENDIF()
|
||||
|
||||
IF(CMAKE_MAJOR_VERSION EQUAL 2 AND CMAKE_MINOR_VERSION LESS 8)
|
||||
@@ -708,11 +582,11 @@ IF(OSG_USE_QT AND NOT ANDROID)
|
||||
|
||||
IF (DESIRED_QT_VERSION)
|
||||
IF (DESIRED_QT_VERSION MATCHES 5)
|
||||
FIND_PACKAGE(Qt5Widgets)
|
||||
FIND_PACKAGE(Qt5Widgets)
|
||||
ELSEIF (DESIRED_QT_VERSION MATCHES 4)
|
||||
FIND_PACKAGE(Qt4)
|
||||
FIND_PACKAGE(Qt4)
|
||||
ELSE()
|
||||
FIND_PACKAGE(Qt3)
|
||||
FIND_PACKAGE(Qt3)
|
||||
ENDIF()
|
||||
|
||||
ELSE()
|
||||
@@ -950,10 +824,6 @@ IF(CMAKE_COMPILER_IS_GNUCXX)
|
||||
# returns too many hits.
|
||||
# FYI, if we do implement GNUCC, then -Wmissing-prototypes in another
|
||||
# interesting C-specific flag.
|
||||
# Also, there is a bug in gcc 4.0. Under C++, -pedantic will create
|
||||
# errors instead of warnings for certain issues, including superfluous
|
||||
# semicolons and commas, and the use of long long. -fpermissive seems
|
||||
# to be the workaround.
|
||||
SET(OSG_AGGRESSIVE_WARNING_FLAGS -Wall -Wparentheses -Wno-long-long -Wno-import -pedantic -Wreturn-type -Wmissing-braces -Wunknown-pragmas -Wunused)
|
||||
|
||||
# Previous included -Wformat=2 in OSG_AGGRESSIVE_WARNING_FLAGS but had to remove it due to standard library errors
|
||||
@@ -973,32 +843,10 @@ ELSEIF(CMAKE_CXX_COMPILER_ID STREQUAL "Clang")
|
||||
# remain unset.
|
||||
|
||||
IF (APPLE)
|
||||
SET(OSG_CXX_LANGUAGE_STANDARD "C++11" CACHE STRING "set the c++ language standard (C++98 / GNU++98 / C++11) for OSG" )
|
||||
MARK_AS_ADVANCED(OSG_CXX_LANGUAGE_STANDARD)
|
||||
# remove existing flags
|
||||
REMOVE_CXX_FLAG(-std=c++98)
|
||||
REMOVE_CXX_FLAG(-std=gnu++98)
|
||||
REMOVE_CXX_FLAG(-std=c++11)
|
||||
REMOVE_CXX_FLAG(-stdlib=libstdc++)
|
||||
REMOVE_CXX_FLAG(-stdlib=libc++)
|
||||
|
||||
IF(${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "c++98" OR ${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "C++98")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++98")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++98 -stdlib=libstdc++")
|
||||
ELSE()
|
||||
IF(${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "gnu++98" OR ${OSG_CXX_LANGUAGE_STANDARD} STREQUAL "GNU++98")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "gnu++98")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libstdc++")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++98 -stdlib=libstdc++")
|
||||
ELSE()
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11")
|
||||
set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -stdlib=libc++")
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-overloaded-virtual -Wno-conversion")
|
||||
# set 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()
|
||||
@@ -1062,21 +910,16 @@ IF(APPLE AND NOT ANDROID)
|
||||
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} -mno-thumb -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN} -mno-thumb -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
ELSE()
|
||||
SET(CMAKE_OSX_ARCHITECTURES "armv7;armv7s;arm64" CACHE STRING "Build architectures for iOS" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN} -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
ENDIF()
|
||||
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -miphoneos-version-min=${IPHONE_VERSION_MIN}" FORCE)
|
||||
|
||||
ELSE()
|
||||
#simulator uses i386 architectures
|
||||
SET(CMAKE_OSX_ARCHITECTURES "i386" CACHE STRING "Build architectures for iOS Simulator" FORCE)
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mno-thumb -arch i386 -pipe -no-cpp-precomp" CACHE STRING "Flags used by the compiler during all build types." FORCE)
|
||||
|
||||
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mios-simulator-version-min=${IPHONE_VERSION_MIN}" FORCE)
|
||||
|
||||
ENDIF()
|
||||
|
||||
#here we set the specific iphone sdk version. We can only set either device or simulator sdk. So if you want both you currently have to have two seperate projects
|
||||
@@ -1341,4 +1184,10 @@ ADD_CUSTOM_TARGET(uninstall
|
||||
"${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
|
||||
|
||||
#
|
||||
IF(ANDROID)
|
||||
message(STATUS "Creating Android Makefile Master files" )
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Android.mk.master.in" "${CMAKE_BINARY_DIR}/Android.mk")
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/Application.mk.master.in" "${CMAKE_BINARY_DIR}/Application.mk")
|
||||
configure_file("${OSG_ANDROID_TEMPLATES}/AndroidManifest.xml.master.in" "${CMAKE_BINARY_DIR}/AndroidManifest.xml")
|
||||
ENDIF(ANDROID)
|
||||
|
||||
|
||||
@@ -9,19 +9,19 @@ MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBU
|
||||
|
||||
SET(MY_PATH_INCLUDE )
|
||||
SET(MY_PATH_LIB )
|
||||
|
||||
|
||||
FOREACH( MYPATH ${SEARCHPATHLIST} )
|
||||
SET(MY_PATH_INCLUDE ${MY_PATH_INCLUDE} ${MYPATH}/include)
|
||||
SET(MY_PATH_LIB ${MY_PATH_LIB} ${MYPATH}/lib)
|
||||
ENDFOREACH( MYPATH ${SEARCHPATHLIST} )
|
||||
|
||||
|
||||
FIND_PATH("${DEPNAME}_INCLUDE_DIR" ${INCLUDEFILE}
|
||||
${MY_PATH_INCLUDE}
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
MARK_AS_ADVANCED("${DEPNAME}_INCLUDE_DIR")
|
||||
#MESSAGE( " ${DEPNAME}_INCLUDE_DIR --> ${${DEPNAME}_INCLUDE_DIR}<--")
|
||||
|
||||
|
||||
SET(LIBRARY_NAMES "")
|
||||
FOREACH(LIBNAME ${LIBRARY_NAMES_BASE})
|
||||
LIST(APPEND LIBRARY_NAMES "${LIBNAME}${EXSUFFIX}")
|
||||
@@ -35,7 +35,7 @@ MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBU
|
||||
FOREACH(LIBNAME ${LIBRARY_NAMES_BASE})
|
||||
LIST(APPEND LIBRARY_NAMES_DEBUG "${LIBNAME}${DEBUGSUFFIX}${EXSUFFIX}")
|
||||
ENDFOREACH(LIBNAME)
|
||||
FIND_LIBRARY("${DEPNAME}_LIBRARY_DEBUG"
|
||||
FIND_LIBRARY("${DEPNAME}_LIBRARY_DEBUG"
|
||||
NAMES ${LIBRARY_NAMES_DEBUG}
|
||||
PATHS ${MY_PATH_LIB}
|
||||
NO_DEFAULT_PATH
|
||||
@@ -49,13 +49,7 @@ MACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBU
|
||||
MESSAGE("-- Warning Debug ${DEPNAME} not found, using: ${${DEPNAME}_LIBRARY}")
|
||||
SET(${DEPNAME}_LIBRARY_DEBUG "${${DEPNAME}_LIBRARY}")
|
||||
ENDIF(NOT ${DEPNAME}_LIBRARY_DEBUG)
|
||||
|
||||
SET(${DEPNAME}_LIBRARIES debug ${${DEPNAME}_LIBRARY_DEBUG} optimized ${${DEPNAME}_LIBRARY} )
|
||||
|
||||
ENDIF(${DEPNAME}_INCLUDE_DIR AND ${DEPNAME}_LIBRARY)
|
||||
|
||||
|
||||
|
||||
ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX)
|
||||
|
||||
|
||||
@@ -64,21 +58,21 @@ ENDMACRO(FIND_DEPENDENCY DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST D
|
||||
################################################################################################
|
||||
|
||||
MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
|
||||
FIND_DEPENDENCY(TIFF tiff.h "libtiff;tiff" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
FIND_DEPENDENCY(FREETYPE ft2build.h "freetype;freetype2311MT;freetype234;freetype234MT;freetype235;freetype237;freetype238;freetype244;freetype250;freetype27;" ${OSG_3RDPARTY_BIN} "d" "")
|
||||
FIND_DEPENDENCY(TIFF tiff.h libtiff ${OSG_3RDPARTY_BIN} "D" "_i")
|
||||
FIND_DEPENDENCY(FREETYPE ft2build.h "freetype;freetype2311MT;freetype234;freetype234MT;freetype235;freetype237;freetype238;freetype244;freetype250;" ${OSG_3RDPARTY_BIN} "d" "")
|
||||
IF(FREETYPE_FOUND)
|
||||
#forcing subsequent FindFreeType stuff to not search for other variables.... kind of a hack
|
||||
#forcing subsequent FindFreeType stuff to not search for other variables.... kind of a hack
|
||||
SET(FREETYPE_INCLUDE_DIR_ft2build ${FREETYPE_INCLUDE_DIR} CACHE PATH "" FORCE)
|
||||
SET(FREETYPE_INCLUDE_DIR_freetype2 ${FREETYPE_INCLUDE_DIR} CACHE PATH "" FORCE)
|
||||
MARK_AS_ADVANCED(FREETYPE_INCLUDE_DIR_ft2build FREETYPE_INCLUDE_DIR_freetype2)
|
||||
SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
|
||||
ENDIF(FREETYPE_FOUND)
|
||||
FIND_DEPENDENCY(CURL curl/curl.h "libcurl;curllib;libcurl_imp" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
FIND_DEPENDENCY(CURL curl/curl.h "libcurl;curllib" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
FIND_DEPENDENCY(JPEG jpeglib.h "libjpeg;jpeg" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
FIND_DEPENDENCY(GDAL gdal.h "gdal;gdal16" ${OSG_3RDPARTY_BIN} "d" "_i")
|
||||
FIND_DEPENDENCY(GLUT GL/glut.h glut32 ${OSG_3RDPARTY_BIN} "D" "")
|
||||
IF(GLUT_FOUND)
|
||||
#forcing subsequent FindGlut stuff to not search for other variables.... kind of a hack
|
||||
#forcing subsequent FindGlut stuff to not search for other variables.... kind of a hack
|
||||
SET(GLUT_glut_LIBRARY ${GLUT_LIBRARY} CACHE FILEPATH "")
|
||||
MARK_AS_ADVANCED(GLUT_glut_LIBRARY)
|
||||
ENDIF(GLUT_FOUND)
|
||||
@@ -87,18 +81,16 @@ MACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
|
||||
IF(ZLIB_FOUND)
|
||||
FIND_DEPENDENCY(PNG png.h "libpng;libpng13;libpng15;libpng16" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
IF(PNG_FOUND)
|
||||
#forcing subsequent FindPNG stuff to not search for other variables.... kind of a hack
|
||||
#forcing subsequent FindPNG stuff to not search for other variables.... kind of a hack
|
||||
SET(PNG_PNG_INCLUDE_DIR ${PNG_INCLUDE_DIR} CACHE FILEPATH "")
|
||||
MARK_AS_ADVANCED(PNG_PNG_INCLUDE_DIR)
|
||||
ENDIF(PNG_FOUND)
|
||||
ENDIF(ZLIB_FOUND)
|
||||
|
||||
# CMakes default module to find libxml2 will not find the in
|
||||
FIND_DEPENDENCY(LIBXML2 libxml/xpath.h "libxml2" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
FIND_DEPENDENCY(LIBXML2 libxml2 "libxml2" ${OSG_3RDPARTY_BIN} "D" "")
|
||||
IF(LIBXML2_FOUND)
|
||||
# The CMAKE find libxml module uses LIBXML2_LIBRARIES -> fill it.... kind of a hack
|
||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY} CACHE FILEPATH "LibXML2 library for collada" FORCE)
|
||||
# SET(LIBXML2_XMLLINT_EXECUTABLE ${OSG_3RDPARTY_BIN}/bin/xmllint.exe CACHE FILEPATH "Path to xmllint executable" FORCE)
|
||||
# The CMAKE find libxml module uses LIBXML2_LIBRARIES -> fill it.... kind of a hack
|
||||
SET(LIBXML2_LIBRARIES ${LIBXML2_LIBRARY} CACHE FILEPATH "" FORCE)
|
||||
SET(LIBXML2_XMLLINT_EXECUTABLE ${OSG_3RDPARTY_BIN}/bin/xmllint.exe CACHE FILEPATH "Path to xmllint executable" FORCE)
|
||||
ENDIF(LIBXML2_FOUND)
|
||||
#FIND_DEPENDENCY(DEPNAME INCLUDEFILE LIBRARY_NAMES_BASE SEARCHPATHLIST DEBUGSUFFIX EXSUFFIX)
|
||||
FIND_Package(NVTT)
|
||||
@@ -112,7 +104,7 @@ ENDMACRO(SEARCH_3RDPARTY OSG_3RDPARTY_BIN)
|
||||
# this is code for handling optional 3RDPARTY usage
|
||||
################################################################################################
|
||||
|
||||
OPTION(USE_3RDPARTY_BIN "Set to ON to use Mike or Torbens prebuilt dependencies situated side of OpenSceneGraph source. Use OFF for avoiding." ON)
|
||||
OPTION(USE_3RDPARTY_BIN "Set to ON to use Mike prebuilt dependencies situated side of OpenSceneGraph source. Use OFF for avoiding." ON)
|
||||
IF(USE_3RDPARTY_BIN)
|
||||
|
||||
# Check Architecture
|
||||
@@ -140,7 +132,7 @@ IF(USE_3RDPARTY_BIN)
|
||||
SET(TEST_3RDPARTY_DIR "${PARENT_DIR}/3rdParty_win32binaries_vs90sp1")
|
||||
ENDIF()
|
||||
ENDIF(NOT EXISTS ${TEST_3RDPARTY_DIR})
|
||||
|
||||
|
||||
SET(ACTUAL_3RDPARTY_DIR "${TEST_3RDPARTY_DIR}" CACHE PATH "Location of 3rdparty dependencies")
|
||||
SET(ACTUAL_3DPARTY_DIR "${ACTUAL_3RDPARTY_DIR}") # kept for backcompatibility
|
||||
IF(EXISTS ${ACTUAL_3RDPARTY_DIR})
|
||||
|
||||
@@ -30,7 +30,7 @@ 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" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.10" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.11")
|
||||
IF(${OSG_OSX_SDK_NAME} STREQUAL "macosx10.8" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.9" OR ${OSG_OSX_SDK_NAME} STREQUAL "macosx10.10")
|
||||
# nothing special here ;-)
|
||||
ELSE()
|
||||
MESSAGE("AVFoundation disabled for SDK < 10.8")
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
# Locate ASIO-headers (http://think-async.com/Asio)
|
||||
# This module defines
|
||||
# ASIO_FOUND, if false, do not try to link to gdal
|
||||
# ASIO_FOUND, if false, do not try to link to gdal
|
||||
# ASIO_INCLUDE_DIR, where to find the headers
|
||||
#
|
||||
# Created by Stephan Maximilian Huber
|
||||
# Created by Stephan Maximilian Huber
|
||||
|
||||
FIND_PATH(ASIO_INCLUDE_DIR
|
||||
NAMES
|
||||
@@ -14,9 +14,7 @@ FIND_PATH(ASIO_INCLUDE_DIR
|
||||
)
|
||||
|
||||
SET(ASIO_FOUND "NO")
|
||||
IF(ASIO_INCLUDE_DIR)
|
||||
FIND_PACKAGE( Boost 1.37 )
|
||||
IF(Boost_FOUND)
|
||||
SET(ASIO_FOUND "YES")
|
||||
ENDIF()
|
||||
FIND_PACKAGE( Boost 1.37 )
|
||||
IF(Boost_FOUND AND ASIO_INCLUDE_DIR)
|
||||
SET(ASIO_FOUND "YES")
|
||||
ENDIF()
|
||||
|
||||
@@ -11,16 +11,16 @@
|
||||
# $COLLADA_DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$COLLADA_DIR
|
||||
#
|
||||
# Created by Robert Osfield.
|
||||
# Created by Robert Osfield.
|
||||
|
||||
|
||||
# Check if COLLADA_DIR is set, otherwise use ACTUAL_3DPARTY_DIR:
|
||||
SET( COLLADA_ENV_VAR_AVAILABLE $ENV{COLLADA_DIR} )
|
||||
IF ( COLLADA_ENV_VAR_AVAILABLE )
|
||||
SET(COLLADA_DOM_ROOT "$ENV{COLLADA_DIR}/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
|
||||
ELSE ()
|
||||
ELSE ( COLLADA_ENV_VAR_AVAILABLE )
|
||||
SET(COLLADA_DOM_ROOT "${ACTUAL_3DPARTY_DIR}/include/1.4/dom" CACHE PATH "Location of Collada DOM directory" FORCE)
|
||||
ENDIF()
|
||||
ENDIF( COLLADA_ENV_VAR_AVAILABLE )
|
||||
|
||||
|
||||
|
||||
@@ -28,8 +28,6 @@ IF(APPLE)
|
||||
SET(COLLADA_BUILDNAME "mac")
|
||||
ELSEIF(MINGW)
|
||||
SET(COLLADA_BUILDNAME "mingw")
|
||||
ELSEIF(MSVC14)
|
||||
SET(COLLADA_BUILDNAME "vc14")
|
||||
ELSEIF(MSVC12)
|
||||
SET(COLLADA_BUILDNAME "vc12")
|
||||
ELSEIF(MSVC11)
|
||||
@@ -55,16 +53,10 @@ FIND_PATH(COLLADA_INCLUDE_DIR dae.h
|
||||
/usr/local/include
|
||||
/usr/local/include/colladadom
|
||||
/usr/local/include/collada-dom
|
||||
/usr/local/include/collada-dom2.4
|
||||
/usr/local/include/collada-dom2.2
|
||||
/opt/local/include/collada-dom
|
||||
/opt/local/include/collada-dom2.4
|
||||
/opt/local/include/collada-dom2.2
|
||||
/usr/include/
|
||||
/usr/include/colladadom
|
||||
/usr/include/collada-dom
|
||||
/usr/include/collada-dom2.4
|
||||
/usr/include/collada-dom2.2
|
||||
/sw/include # Fink
|
||||
/opt/local/include # DarwinPorts
|
||||
/opt/csw/include # Blastwave
|
||||
@@ -73,17 +65,16 @@ FIND_PATH(COLLADA_INCLUDE_DIR dae.h
|
||||
${ACTUAL_3DPARTY_DIR}/include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
|
||||
NAMES collada_dom collada14dom Collada14Dom libcollada14dom21 libcollada14dom22 collada-dom2.4-dp collada-dom2.4-dp-vc120-mt
|
||||
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
|
||||
NAMES collada_dom collada14dom Collada14Dom libcollada14dom21 libcollada14dom22
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4
|
||||
${COLLADA_DOM_ROOT}
|
||||
$ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4
|
||||
$ENV{COLLADA_DIR}/lib
|
||||
$ENV{COLLADA_DIR}/lib-dbg
|
||||
$ENV{COLLADA_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/opt/local/Library/Frameworks #macports
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
@@ -97,11 +88,10 @@ FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY
|
||||
${ACTUAL_3DPARTY_DIR}/lib
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
|
||||
NAMES collada_dom-d collada14dom-d Collada14Dom-d libcollada14dom21-d libcollada14dom22-d collada-dom2.4-dp-d collada-dom2.4-dp-vc120-mt-d
|
||||
FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
|
||||
NAMES collada_dom-d collada14dom-d Collada14Dom-d libcollada14dom21-d libcollada14dom22-d
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4-d
|
||||
${COLLADA_DOM_ROOT}
|
||||
$ENV{COLLADA_DIR}/build/${COLLADA_BUILDNAME}-1.4-d
|
||||
$ENV{COLLADA_DIR}/lib
|
||||
$ENV{COLLADA_DIR}/lib-dbg
|
||||
@@ -121,7 +111,7 @@ FIND_LIBRARY(COLLADA_DYNAMIC_LIBRARY_DEBUG
|
||||
${ACTUAL_3DPARTY_DIR}/lib
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_STATIC_LIBRARY
|
||||
FIND_LIBRARY(COLLADA_STATIC_LIBRARY
|
||||
NAMES libcollada14dom21-s libcollada14dom22-s libcollada14dom.a
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4
|
||||
@@ -144,7 +134,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY
|
||||
${ACTUAL_3DPARTY_DIR}/lib
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
NAMES collada_dom-sd collada14dom-sd libcollada14dom21-sd libcollada14dom22-sd libcollada14dom-d.a
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/build/${COLLADA_BUILDNAME}-1.4-d
|
||||
@@ -183,19 +173,10 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
)
|
||||
ENDIF(WIN32)
|
||||
ENDIF(LIBXML2_FOUND)
|
||||
|
||||
|
||||
FIND_PACKAGE(ZLIB)
|
||||
IF (ZLIB_FOUND)
|
||||
IF (ZLIB_LIBRARY_RELEASE)
|
||||
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY_RELEASE}" CACHE FILEPATH "" FORCE)
|
||||
ELSE(ZLIB_LIBRARY_RELEASE)
|
||||
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
|
||||
ENDIF(ZLIB_LIBRARY_RELEASE)
|
||||
IF (ZLIB_LIBRARY_DEBUG)
|
||||
SET(COLLADA_ZLIB_LIBRARY_DEBUG "${ZLIB_LIBRARY_DEBUG}" CACHE FILEPATH "" FORCE)
|
||||
ELSE(ZLIB_LIBRARY_DEBUG)
|
||||
SET(COLLADA_ZLIB_LIBRARY_DEBUG "${COLLADA_ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
|
||||
ENDIF(ZLIB_LIBRARY_DEBUG)
|
||||
SET(COLLADA_ZLIB_LIBRARY "${ZLIB_LIBRARY}" CACHE FILEPATH "" FORCE)
|
||||
ELSE(ZLIB_FOUND)
|
||||
IF(WIN32)
|
||||
FIND_LIBRARY(COLLADA_ZLIB_LIBRARY
|
||||
@@ -261,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 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_58 boost_filesystem-${COLLADA_BUILDNAME}0-mt-1_62
|
||||
NAMES libboost_filesystem boost_filesystem boost_filesystem-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-1_55
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
@@ -269,7 +250,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG
|
||||
NAMES libboost_filesystem-d boost_filesystem-d boost_filesystem-mt-d libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_55 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_58 boost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_62
|
||||
NAMES libboost_filesystem-d boost_filesystem-d boost_filesystem-mt-d libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_filesystem-${COLLADA_BUILDNAME}0-mt-gd-1_55
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
@@ -277,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 libboost_system-${COLLADA_BUILDNAME}0-mt-1_58 boost_system-${COLLADA_BUILDNAME}0-mt-1_62
|
||||
NAMES libboost_system boost_system boost_system-mt libboost_system-${COLLADA_BUILDNAME}0-mt libboost_system-${COLLADA_BUILDNAME}0-mt-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-1_55
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
@@ -285,7 +266,7 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
)
|
||||
|
||||
FIND_LIBRARY(COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG
|
||||
NAMES libboost_system-d boost_system-d boost_system-mt-d libboost_system-${COLLADA_BUILDNAME}0-mt-gd libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_55 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_58 boost_system-${COLLADA_BUILDNAME}0-mt-gd-1_62
|
||||
NAMES libboost_system-d boost_system-d boost_system-mt-d libboost_system-${COLLADA_BUILDNAME}0-mt-gd libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_54 libboost_system-${COLLADA_BUILDNAME}0-mt-gd-1_55
|
||||
PATHS
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/${COLLADA_BUILDNAME}
|
||||
${COLLADA_DOM_ROOT}/external-libs/boost/lib/mingw
|
||||
@@ -296,20 +277,6 @@ FIND_LIBRARY(COLLADA_STATIC_LIBRARY_DEBUG
|
||||
SET(COLLADA_FOUND "NO")
|
||||
IF(COLLADA_DYNAMIC_LIBRARY OR COLLADA_STATIC_LIBRARY)
|
||||
IF (COLLADA_INCLUDE_DIR)
|
||||
|
||||
SET(COLLADA_FOUND "YES")
|
||||
|
||||
FIND_PATH(COLLADA_INCLUDE_DOMANY_DIR 1.4/dom/domAny.h
|
||||
${COLLADA_INCLUDE_DIR}
|
||||
)
|
||||
|
||||
IF (COLLADA_INCLUDE_DOMANY_DIR)
|
||||
SET(COLLADA_DOM_2_4_OR_LATER TRUE)
|
||||
ELSEIF()
|
||||
SET(COLLADA_DOM_2_4_OR_LATER FALSE)
|
||||
ENDIF()
|
||||
|
||||
ENDIF()
|
||||
ENDIF()
|
||||
|
||||
|
||||
ENDIF(COLLADA_INCLUDE_DIR)
|
||||
ENDIF(COLLADA_DYNAMIC_LIBRARY OR COLLADA_STATIC_LIBRARY)
|
||||
|
||||
@@ -50,13 +50,13 @@ SET( FBX_SEARCH_PATHS
|
||||
$ENV{FBX_DIR}
|
||||
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2015.1"
|
||||
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2015.1"
|
||||
"/Applications/Autodesk/FBX/FBX SDK/2015.1"
|
||||
/Applications/Autodesk/FBXSDK20151
|
||||
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.2"
|
||||
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.2"
|
||||
"/Applications/Autodesk/FBX/FBX SDK/2014.2"
|
||||
/Applications/Autodesk/FBXSDK20142
|
||||
/Applications/Autodesk/FBXSDK20141
|
||||
)
|
||||
#I think the last line in the search path is an old typo, but let's search for 2014.1 anyway - LV
|
||||
|
||||
# search for headers & debug/release libraries
|
||||
FIND_PATH(FBX_INCLUDE_DIR "fbxsdk.h"
|
||||
@@ -96,9 +96,8 @@ IF(NOT FBX_FOUND)
|
||||
|
||||
SET( FBX_SEARCH_PATHS
|
||||
$ENV{FBX_DIR}
|
||||
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.1"
|
||||
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.1"
|
||||
"/Applications/Autodesk/FBX/FBX SDK/2014.1"
|
||||
$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2014.1
|
||||
$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2014.1
|
||||
/Applications/Autodesk/FBXSDK20141
|
||||
)
|
||||
|
||||
@@ -135,9 +134,8 @@ IF(NOT FBX_FOUND)
|
||||
|
||||
SET( FBX_SEARCH_PATHS
|
||||
$ENV{FBX_DIR}
|
||||
"$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2013.3"
|
||||
"$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2013.3"
|
||||
"/Applications/Autodesk/FBX/FBX SDK/2013.3"
|
||||
$ENV{ProgramW6432}/Autodesk/FBX/FBX SDK/2013.3
|
||||
$ENV{PROGRAMFILES}/Autodesk/FBX/FBX SDK/2013.3
|
||||
/Applications/Autodesk/FBXSDK20133
|
||||
)
|
||||
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
#In OSG ffmpeg plugin, we used "#include <header.h>" for compatibility with old version of ffmpeg
|
||||
#With the new version of FFmpeg, a file named "time.h" was added that breaks compatability with the old version of ffmpeg.
|
||||
|
||||
#We have to search the path which contain the header.h (useful for old version)
|
||||
#and search the path which contain the libname/header.h (useful for new version)
|
||||
#We have to search the path which contain the header.h (usefull for old version)
|
||||
#and search the path which contain the libname/header.h (usefull for new version)
|
||||
|
||||
#Then we need to include ${FFMPEG_libname_INCLUDE_DIRS} (in old version case, use by ffmpeg header and osg plugin code)
|
||||
# (in new version case, use by ffmpeg header)
|
||||
@@ -32,8 +32,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
|
||||
PATHS
|
||||
${FFMPEG_ROOT}/include
|
||||
$ENV{FFMPEG_DIR}/include
|
||||
${FFMPEG_ROOT}
|
||||
$ENV{FFMPEG_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/include
|
||||
@@ -51,8 +49,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
|
||||
PATHS
|
||||
${FFMPEG_ROOT}/include
|
||||
$ENV{FFMPEG_DIR}/include
|
||||
${FFMPEG_ROOT}
|
||||
$ENV{FFMPEG_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/include
|
||||
@@ -71,8 +67,6 @@ MACRO(FFMPEG_FIND varname shortname headername)
|
||||
PATHS
|
||||
${FFMPEG_ROOT}/lib
|
||||
$ENV{FFMPEG_DIR}/lib
|
||||
${FFMPEG_ROOT}/lib${shortname}
|
||||
$ENV{FFMPEG_DIR}/lib${shortname}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
@@ -129,14 +123,11 @@ FFMPEG_FIND(LIBAVFORMAT avformat avformat.h)
|
||||
FFMPEG_FIND(LIBAVDEVICE avdevice avdevice.h)
|
||||
FFMPEG_FIND(LIBAVCODEC avcodec avcodec.h)
|
||||
FFMPEG_FIND(LIBAVUTIL avutil avutil.h)
|
||||
FFMPEG_FIND(LIBSWRESAMPLE swresample swresample.h)
|
||||
FFMPEG_FIND(LIBAVRESAMPLE avresample avresample.h)
|
||||
FFMPEG_FIND(LIBSWSCALE swscale swscale.h) # not sure about the header to look for here.
|
||||
|
||||
SET(FFMPEG_FOUND "NO")
|
||||
# Note we don't check FFMPEG_LIBSWSCALE_FOUND here, it's optional.
|
||||
IF (FFMPEG_LIBAVFORMAT_FOUND AND FFMPEG_LIBAVDEVICE_FOUND AND FFMPEG_LIBAVCODEC_FOUND AND FFMPEG_LIBAVUTIL_FOUND AND STDINT_OK
|
||||
AND ( FFMPEG_LIBSWRESAMPLE_FOUND OR FFMPEG_LIBAVRESAMPLE_FOUND ) )
|
||||
IF (FFMPEG_LIBAVFORMAT_FOUND AND FFMPEG_LIBAVDEVICE_FOUND AND FFMPEG_LIBAVCODEC_FOUND AND FFMPEG_LIBAVUTIL_FOUND AND STDINT_OK)
|
||||
|
||||
SET(FFMPEG_FOUND "YES")
|
||||
|
||||
|
||||
@@ -9,15 +9,6 @@
|
||||
#
|
||||
# Created by Robert Osfield.
|
||||
|
||||
# prefer FindFLTK from cmake distribution
|
||||
if(EXISTS ${CMAKE_ROOT}/Modules/FindFLTK.cmake)
|
||||
include(${CMAKE_ROOT}/Modules/FindFLTK.cmake)
|
||||
|
||||
if(FLTK_FOUND)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
FIND_PATH(FLTK_INCLUDE_DIR Fl/Fl.H Fl/Fl.h
|
||||
$ENV{FLTK_DIR}/include
|
||||
$ENV{FLTK_DIR}
|
||||
|
||||
@@ -1,188 +1,131 @@
|
||||
#.rst:
|
||||
# FindFreetype
|
||||
# ------------
|
||||
#
|
||||
# Locate FreeType library
|
||||
#
|
||||
# - Locate FreeType library
|
||||
# This module defines
|
||||
#
|
||||
# ::
|
||||
#
|
||||
# FREETYPE_LIBRARIES, the library to link against
|
||||
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
|
||||
# FREETYPE_INCLUDE_DIRS, where to find headers.
|
||||
# FREETYPE_VERSION_STRING, the version of freetype found (since CMake 2.8.8)
|
||||
# This is the concatenation of the paths:
|
||||
# FREETYPE_INCLUDE_DIR_ft2build
|
||||
# FREETYPE_INCLUDE_DIR_freetype2
|
||||
#
|
||||
#
|
||||
#
|
||||
# $FREETYPE_DIR is an environment variable that would correspond to the
|
||||
# ./configure --prefix=$FREETYPE_DIR used in building FREETYPE.
|
||||
# FREETYPE_LIBRARY, the library to link against
|
||||
# FREETYPE_FOUND, if false, do not try to link to FREETYPE
|
||||
# FREETYPE_INCLUDE_DIRS, where to find headers.
|
||||
# This is the concatenation of the paths:
|
||||
# FREETYPE_INCLUDE_DIR_ft2build
|
||||
# FREETYPE_INCLUDE_DIR_freetype2
|
||||
#
|
||||
# $FREETYPE_DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$FREETYPE_DIR
|
||||
# used in building FREETYPE.
|
||||
# Created by Eric Wing.
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2000-2016 Kitware, Inc.
|
||||
# Copyright 2000-2011 Insight Software Consortium
|
||||
# All rights reserved.
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
#
|
||||
# * Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
#
|
||||
# * Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# * Neither the names of Kitware, Inc., the Insight Software Consortium,
|
||||
# nor the names of their contributors may be used to endorse or promote
|
||||
# products derived from this software without specific prior written
|
||||
# permission.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
#=============================================================================
|
||||
|
||||
# Created by Eric Wing.
|
||||
# Modifications by Alexander Neundorf.
|
||||
# This file has been renamed to "FindFreetype.cmake" instead of the correct
|
||||
# "FindFreeType.cmake" in order to be compatible with the one from KDE4, Alex.
|
||||
|
||||
# Ugh, FreeType seems to use some #include trickery which
|
||||
# Ugh, FreeType seems to use some #include trickery which
|
||||
# makes this harder than it should be. It looks like they
|
||||
# put ft2build.h in a common/easier-to-find location which
|
||||
# then contains a #include to a more specific header in a
|
||||
# then contains a #include to a more specific header in a
|
||||
# more specific location (#include <freetype/config/ftheader.h>).
|
||||
# Then from there, they need to set a bunch of #define's
|
||||
# Then from there, they need to set a bunch of #define's
|
||||
# so you can do something like:
|
||||
# #include FT_FREETYPE_H
|
||||
# Unfortunately, using CMake's mechanisms like include_directories()
|
||||
# Unfortunately, using CMake's mechanisms like INCLUDE_DIRECTORIES()
|
||||
# wants explicit full paths and this trickery doesn't work too well.
|
||||
# I'm going to attempt to cut out the middleman and hope
|
||||
# I'm going to attempt to cut out the middleman and hope
|
||||
# everything still works.
|
||||
|
||||
# Adapted for OpenSceneGraph until the updates here for finding the debug Windows library freetyped are released with CMake
|
||||
|
||||
set(FREETYPE_FIND_ARGS
|
||||
HINTS
|
||||
ENV FREETYPE_DIR
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
|
||||
PATHS
|
||||
/usr/X11R6
|
||||
/usr/local/X11R6
|
||||
/usr/local/X11
|
||||
/usr/freeware
|
||||
ENV GTKMM_BASEPATH
|
||||
[HKEY_CURRENT_USER\\SOFTWARE\\gtkmm\\2.4;Path]
|
||||
[HKEY_LOCAL_MACHINE\\SOFTWARE\\gtkmm\\2.4;Path]
|
||||
$ENV{FREETYPE_DIR}
|
||||
NO_DEFAULT_PATH
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
|
||||
PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
|
||||
NO_DEFAULT_PATH
|
||||
PATH_SUFFIXES include
|
||||
)
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_ft2build ft2build.h
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
/usr/local/X11R6
|
||||
/usr/local/X11
|
||||
/usr/X11R6
|
||||
/usr/X11
|
||||
/sw
|
||||
/opt/local
|
||||
/opt/csw
|
||||
/opt
|
||||
/usr/freeware
|
||||
PATH_SUFFIXES include include/freetype2
|
||||
)
|
||||
|
||||
find_path(
|
||||
FREETYPE_INCLUDE_DIR_ft2build
|
||||
ft2build.h
|
||||
${FREETYPE_FIND_ARGS}
|
||||
PATH_SUFFIXES
|
||||
include/freetype2
|
||||
include
|
||||
freetype2
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
|
||||
$ENV{FREETYPE_DIR}/include/freetype2
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
|
||||
PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
|
||||
NO_DEFAULT_PATH
|
||||
PATH_SUFFIXES include/freetype2
|
||||
)
|
||||
FIND_PATH(FREETYPE_INCLUDE_DIR_freetype2 freetype/config/ftheader.h
|
||||
/usr/local/include/freetype2
|
||||
/usr/include/freetype2
|
||||
/usr/local/X11R6/include/freetype2
|
||||
/usr/local/X11/include/freetype2
|
||||
/usr/X11R6/include/freetype2
|
||||
/usr/X11/include/freetype2
|
||||
/sw/include/freetype2
|
||||
/opt/local/include/freetype2
|
||||
/opt/csw/include/freetype2
|
||||
/opt/include/freetype2
|
||||
/usr/freeware/include/freetype2
|
||||
)
|
||||
|
||||
find_path(
|
||||
FREETYPE_INCLUDE_DIR_freetype2
|
||||
NAMES
|
||||
freetype/config/ftheader.h
|
||||
config/ftheader.h
|
||||
${FREETYPE_FIND_ARGS}
|
||||
PATH_SUFFIXES
|
||||
include/freetype2
|
||||
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
|
||||
)
|
||||
|
||||
if(NOT FREETYPE_LIBRARY)
|
||||
find_library(FREETYPE_LIBRARY_RELEASE
|
||||
NAMES
|
||||
freetype
|
||||
libfreetype
|
||||
freetype219
|
||||
${FREETYPE_FIND_ARGS}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
find_library(FREETYPE_LIBRARY_DEBUG
|
||||
NAMES
|
||||
freetyped
|
||||
libfreetyped
|
||||
freetype219d
|
||||
${FREETYPE_FIND_ARGS}
|
||||
PATH_SUFFIXES
|
||||
lib
|
||||
)
|
||||
include(SelectLibraryConfigurations) #OSG Look in CMake Modules dir
|
||||
select_library_configurations(FREETYPE)
|
||||
endif()
|
||||
|
||||
unset(FREETYPE_FIND_ARGS)
|
||||
|
||||
# set the user variables
|
||||
if(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
|
||||
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
|
||||
list(REMOVE_DUPLICATES FREETYPE_INCLUDE_DIRS)
|
||||
endif()
|
||||
set(FREETYPE_LIBRARIES "${FREETYPE_LIBRARY}")
|
||||
|
||||
if(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
|
||||
set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype/freetype.h")
|
||||
elseif(EXISTS "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
|
||||
set(FREETYPE_H "${FREETYPE_INCLUDE_DIR_freetype2}/freetype.h")
|
||||
endif()
|
||||
|
||||
if(FREETYPE_INCLUDE_DIR_freetype2 AND FREETYPE_H)
|
||||
file(STRINGS "${FREETYPE_H}" freetype_version_str
|
||||
REGEX "^#[\t ]*define[\t ]+FREETYPE_(MAJOR|MINOR|PATCH)[\t ]+[0-9]+$")
|
||||
|
||||
unset(FREETYPE_VERSION_STRING)
|
||||
foreach(VPART MAJOR MINOR PATCH)
|
||||
foreach(VLINE ${freetype_version_str})
|
||||
if(VLINE MATCHES "^#[\t ]*define[\t ]+FREETYPE_${VPART}[\t ]+([0-9]+)$")
|
||||
set(FREETYPE_VERSION_PART "${CMAKE_MATCH_1}")
|
||||
if(FREETYPE_VERSION_STRING)
|
||||
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_STRING}.${FREETYPE_VERSION_PART}")
|
||||
else()
|
||||
set(FREETYPE_VERSION_STRING "${FREETYPE_VERSION_PART}")
|
||||
endif()
|
||||
unset(FREETYPE_VERSION_PART)
|
||||
endif()
|
||||
endforeach()
|
||||
endforeach()
|
||||
endif()
|
||||
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set FREETYPE_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
include(FindPackageHandleStandardArgs) #OSG Look in CMake Modules dir
|
||||
|
||||
find_package_handle_standard_args(
|
||||
Freetype
|
||||
REQUIRED_VARS
|
||||
FREETYPE_LIBRARY
|
||||
FREETYPE_INCLUDE_DIRS
|
||||
VERSION_VAR
|
||||
FREETYPE_VERSION_STRING
|
||||
FIND_LIBRARY(FREETYPE_LIBRARY
|
||||
NAMES freetype libfreetype freetype219
|
||||
PATHS
|
||||
$ENV{FREETYPE_DIR}
|
||||
NO_DEFAULT_PATH
|
||||
PATH_SUFFIXES lib64 lib
|
||||
)
|
||||
FIND_LIBRARY(FREETYPE_LIBRARY
|
||||
NAMES freetype libfreetype freetype219
|
||||
PATHS ${CMAKE_PREFIX_PATH} # Unofficial: We are proposing this.
|
||||
NO_DEFAULT_PATH
|
||||
PATH_SUFFIXES lib64 lib
|
||||
)
|
||||
FIND_LIBRARY(FREETYPE_LIBRARY
|
||||
NAMES freetype libfreetype freetype219
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
/usr/local/X11R6
|
||||
/usr/local/X11
|
||||
/usr/X11R6
|
||||
/usr/X11
|
||||
/sw
|
||||
/opt/local
|
||||
/opt/csw
|
||||
/opt
|
||||
/usr/freeware
|
||||
PATH_SUFFIXES lib64 lib
|
||||
)
|
||||
|
||||
mark_as_advanced(
|
||||
FREETYPE_INCLUDE_DIR_freetype2
|
||||
FREETYPE_INCLUDE_DIR_ft2build
|
||||
)
|
||||
IF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
|
||||
SET(FREETYPE_INCLUDE_DIRS "${FREETYPE_INCLUDE_DIR_ft2build};${FREETYPE_INCLUDE_DIR_freetype2}")
|
||||
ENDIF(FREETYPE_INCLUDE_DIR_ft2build AND FREETYPE_INCLUDE_DIR_freetype2)
|
||||
|
||||
|
||||
SET(FREETYPE_FOUND "NO")
|
||||
IF(FREETYPE_LIBRARY AND FREETYPE_INCLUDE_DIRS)
|
||||
SET(FREETYPE_FOUND "YES")
|
||||
ENDIF(FREETYPE_LIBRARY AND FREETYPE_INCLUDE_DIRS)
|
||||
|
||||
|
||||
|
||||
@@ -19,15 +19,6 @@
|
||||
# This makes the presumption that you are include gdal.h like
|
||||
# #include "gdal.h"
|
||||
|
||||
# prefer FindGDAL from cmake distribution
|
||||
if(EXISTS ${CMAKE_ROOT}/Modules/FindGDAL.cmake)
|
||||
include(${CMAKE_ROOT}/Modules/FindGDAL.cmake)
|
||||
|
||||
if(GDAL_FOUND)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
FIND_PATH(GDAL_INCLUDE_DIR gdal.h
|
||||
PATHS
|
||||
$ENV{GDAL_DIR}
|
||||
|
||||
@@ -1,36 +0,0 @@
|
||||
# Finds the OpenGL Core Profile (cp) header file.
|
||||
# Looks for glcorearb.h
|
||||
#
|
||||
# This script defines the following:
|
||||
# GLCORE_FOUND // Set to TRUE if glcorearb.h is found
|
||||
# GLCORE_INCLUDE_DIR // Parent directory of directory (gl, GL3, or OpenGL) containing the CP header.
|
||||
# GLCORE_GLCOREARB_HEADER // advanced
|
||||
#
|
||||
# GLCORE_ROOT can be set as an environment variable or a CMake variable,
|
||||
# to the parent directory of the gl, GL3, or OpenGL directory containing the CP header.
|
||||
#
|
||||
|
||||
|
||||
FIND_PATH( GLCORE_GLCOREARB_HEADER
|
||||
NAMES GL/glcorearb.h GL3/glcorearb.h OpenGL/glcorearb.h gl/glcorearb.h
|
||||
HINTS ${GLCORE_ROOT}
|
||||
PATHS ENV GLCORE_ROOT
|
||||
)
|
||||
|
||||
set( GLCORE_INCLUDE_DIR )
|
||||
if( GLCORE_GLCOREARB_HEADER )
|
||||
set( GLCORE_INCLUDE_DIR ${GLCORE_GLCOREARB_HEADER} )
|
||||
endif()
|
||||
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set
|
||||
# GLCORE_FOUND to TRUE as appropriate
|
||||
INCLUDE( FindPackageHandleStandardArgs )
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS( GLCORE
|
||||
"Set GLCORE_ROOT as the parent of the directory containing the OpenGL core profile header."
|
||||
GLCORE_INCLUDE_DIR )
|
||||
|
||||
MARK_AS_ADVANCED(
|
||||
GLCORE_INCLUDE_DIR
|
||||
GLCORE_GLCOREARB_HEADER
|
||||
)
|
||||
@@ -1,142 +0,0 @@
|
||||
# - Try to find Glib and its components (gio, gobject etc)
|
||||
# Once done, this will define
|
||||
#
|
||||
# GLIB_FOUND - system has Glib
|
||||
# GLIB_INCLUDE_DIRS - the Glib include directories
|
||||
# GLIB_LIBRARIES - link these to use Glib
|
||||
#
|
||||
# Optionally, the COMPONENTS keyword can be passed to find_package()
|
||||
# and Glib components can be looked for. Currently, the following
|
||||
# components can be used, and they define the following variables if
|
||||
# found:
|
||||
#
|
||||
# gio: GLIB_GIO_LIBRARIES
|
||||
# gobject: GLIB_GOBJECT_LIBRARIES
|
||||
# gmodule: GLIB_GMODULE_LIBRARIES
|
||||
# gthread: GLIB_GTHREAD_LIBRARIES
|
||||
#
|
||||
# Note that the respective _INCLUDE_DIR variables are not set, since
|
||||
# all headers are in the same directory as GLIB_INCLUDE_DIRS.
|
||||
#
|
||||
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
if (WIN32)
|
||||
find_library(GLIB_LIBRARIES
|
||||
NAMES glib-2.0
|
||||
PATHS C:/gstreamer/1.0/x86_64/lib
|
||||
)
|
||||
|
||||
else ()
|
||||
find_package(PkgConfig)
|
||||
pkg_check_modules(PC_GLIB QUIET glib-2.0)
|
||||
|
||||
find_library(GLIB_LIBRARIES
|
||||
NAMES glib-2.0
|
||||
HINTS ${PC_GLIB_LIBDIR}
|
||||
${PC_GLIB_LIBRARY_DIRS}
|
||||
)
|
||||
endif ()
|
||||
|
||||
# Files in glib's main include path may include glibconfig.h, which,
|
||||
# for some odd reason, is normally in $LIBDIR/glib-2.0/include.
|
||||
get_filename_component(_GLIB_LIBRARY_DIR ${GLIB_LIBRARIES} PATH)
|
||||
|
||||
find_path(GLIBCONFIG_INCLUDE_DIR
|
||||
NAMES glibconfig.h
|
||||
HINTS ${PC_LIBDIR} ${PC_LIBRARY_DIRS} ${_GLIB_LIBRARY_DIR}
|
||||
PATH_SUFFIXES glib-2.0/include
|
||||
)
|
||||
|
||||
if (WIN32)
|
||||
find_path(GLIB_INCLUDE_DIR
|
||||
NAMES glib.h
|
||||
PATHS C:/gstreamer/1.0/x86_64/include
|
||||
PATH_SUFFIXES glib-2.0
|
||||
)
|
||||
else()
|
||||
find_path(GLIB_INCLUDE_DIR
|
||||
NAMES glib.h
|
||||
HINTS ${PC_GLIB_INCLUDEDIR}
|
||||
${PC_GLIB_INCLUDE_DIRS}
|
||||
PATH_SUFFIXES glib-2.0
|
||||
)
|
||||
endif()
|
||||
|
||||
if (GLIBCONFIG_INCLUDE_DIR)
|
||||
|
||||
set(GLIB_INCLUDE_DIRS ${GLIB_INCLUDE_DIR} ${GLIBCONFIG_INCLUDE_DIR})
|
||||
|
||||
# Version detection
|
||||
file(READ "${GLIBCONFIG_INCLUDE_DIR}/glibconfig.h" GLIBCONFIG_H_CONTENTS)
|
||||
string(REGEX MATCH "#define GLIB_MAJOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||
string(REGEX MATCH "#define GLIB_MINOR_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MINOR "${CMAKE_MATCH_1}")
|
||||
string(REGEX MATCH "#define GLIB_MICRO_VERSION ([0-9]+)" _dummy "${GLIBCONFIG_H_CONTENTS}")
|
||||
set(GLIB_VERSION_MICRO "${CMAKE_MATCH_1}")
|
||||
set(GLIB_VERSION "${GLIB_VERSION_MAJOR}.${GLIB_VERSION_MINOR}.${GLIB_VERSION_MICRO}")
|
||||
|
||||
# Additional Glib components. We only look for libraries, as not all of them
|
||||
# have corresponding headers and all headers are installed alongside the main
|
||||
# glib ones.
|
||||
foreach (_component ${GLIB_FIND_COMPONENTS})
|
||||
if (${_component} STREQUAL "gio")
|
||||
find_library(GLIB_GIO_LIBRARIES NAMES gio-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GIO_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gobject")
|
||||
find_library(GLIB_GOBJECT_LIBRARIES NAMES gobject-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GOBJECT_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gmodule")
|
||||
find_library(GLIB_GMODULE_LIBRARIES NAMES gmodule-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GMODULE_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gthread")
|
||||
find_library(GLIB_GTHREAD_LIBRARIES NAMES gthread-2.0 HINTS ${_GLIB_LIBRARY_DIR})
|
||||
set(ADDITIONAL_REQUIRED_VARS ${ADDITIONAL_REQUIRED_VARS} GLIB_GTHREAD_LIBRARIES)
|
||||
elseif (${_component} STREQUAL "gio-unix")
|
||||
# gio-unix is compiled as part of the gio library, but the include paths
|
||||
# are separate from the shared glib ones. Since this is currently only used
|
||||
# by WebKitGTK+ we don't go to extraordinary measures beyond pkg-config.
|
||||
pkg_check_modules(GIO_UNIX QUIET gio-unix-2.0)
|
||||
endif ()
|
||||
endforeach ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GLIB REQUIRED_VARS GLIB_INCLUDE_DIRS GLIB_LIBRARIES ${ADDITIONAL_REQUIRED_VARS}
|
||||
VERSION_VAR GLIB_VERSION)
|
||||
|
||||
mark_as_advanced(
|
||||
GLIBCONFIG_INCLUDE_DIR
|
||||
GLIB_GIO_LIBRARIES
|
||||
GLIB_GIO_UNIX_LIBRARIES
|
||||
GLIB_GMODULE_LIBRARIES
|
||||
GLIB_GOBJECT_LIBRARIES
|
||||
GLIB_GTHREAD_LIBRARIES
|
||||
GLIB_INCLUDE_DIR
|
||||
GLIB_INCLUDE_DIRS
|
||||
GLIB_LIBRARIES
|
||||
)
|
||||
|
||||
else()
|
||||
|
||||
endif ()
|
||||
@@ -1,174 +0,0 @@
|
||||
# - Try to find GStreamer and its plugins
|
||||
# Once done, this will define
|
||||
#
|
||||
# GSTREAMER_FOUND - system has GStreamer
|
||||
# GSTREAMER_INCLUDE_DIRS - the GStreamer include directories
|
||||
# GSTREAMER_LIBRARIES - link these to use GStreamer
|
||||
#
|
||||
# Additionally, gstreamer-base is always looked for and required, and
|
||||
# the following related variables are defined:
|
||||
#
|
||||
# GSTREAMER_BASE_INCLUDE_DIRS - gstreamer-base's include directory
|
||||
# GSTREAMER_BASE_LIBRARIES - link to these to use gstreamer-base
|
||||
#
|
||||
# Optionally, the COMPONENTS keyword can be passed to find_package()
|
||||
# and GStreamer plugins can be looked for. Currently, the following
|
||||
# plugins can be searched, and they define the following variables if
|
||||
# found:
|
||||
#
|
||||
# gstreamer-app: GSTREAMER_APP_INCLUDE_DIRS and GSTREAMER_APP_LIBRARIES
|
||||
# gstreamer-audio: GSTREAMER_AUDIO_INCLUDE_DIRS and GSTREAMER_AUDIO_LIBRARIES
|
||||
# gstreamer-fft: GSTREAMER_FFT_INCLUDE_DIRS and GSTREAMER_FFT_LIBRARIES
|
||||
# gstreamer-pbutils: GSTREAMER_PBUTILS_INCLUDE_DIRS and GSTREAMER_PBUTILS_LIBRARIES
|
||||
# gstreamer-video: GSTREAMER_VIDEO_INCLUDE_DIRS and GSTREAMER_VIDEO_LIBRARIES
|
||||
#
|
||||
# Copyright (C) 2012 Raphael Kubo da Costa <rakuco@webkit.org>
|
||||
#
|
||||
# Redistribution and use in source and binary forms, with or without
|
||||
# modification, are permitted provided that the following conditions
|
||||
# are met:
|
||||
# 1. Redistributions of source code must retain the above copyright
|
||||
# notice, this list of conditions and the following disclaimer.
|
||||
# 2. Redistributions in binary form must reproduce the above copyright
|
||||
# notice, this list of conditions and the following disclaimer in the
|
||||
# documentation and/or other materials provided with the distribution.
|
||||
#
|
||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND ITS CONTRIBUTORS ``AS
|
||||
# IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
|
||||
# THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
||||
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR ITS
|
||||
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
||||
# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
||||
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
|
||||
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
|
||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
|
||||
# Helper macro to find a GStreamer plugin (or GStreamer itself)
|
||||
# _component_prefix is prepended to the _INCLUDE_DIRS and _LIBRARIES variables (eg. "GSTREAMER_AUDIO")
|
||||
# _pkgconfig_name is the component's pkg-config name (eg. "gstreamer-1.0", or "gstreamer-video-1.0").
|
||||
# _header is the component's header, relative to the gstreamer-1.0 directory (eg. "gst/gst.h").
|
||||
# _library is the component's library name (eg. "gstreamer-1.0" or "gstvideo-1.0")
|
||||
#macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
|
||||
# pkg_check_modules(PC_${_component_prefix} QUIET ${_pkgconfig_name})
|
||||
#
|
||||
# find_path(${_component_prefix}_INCLUDE_DIRS
|
||||
# NAMES ${_header}
|
||||
# HINTS ${PC_${_component_prefix}_INCLUDE_DIRS} ${PC_${_component_prefix}_INCLUDEDIR}
|
||||
# PATH_SUFFIXES gstreamer-1.0
|
||||
# )
|
||||
#
|
||||
# find_library(${_component_prefix}_LIBRARIES
|
||||
# NAMES ${_library}
|
||||
# HINTS ${PC_${_component_prefix}_LIBRARY_DIRS} ${PC_${_component_prefix}_LIBDIR}
|
||||
# )
|
||||
#endmacro()
|
||||
|
||||
if (WIN32)
|
||||
macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
|
||||
find_path(${_component_prefix}_INCLUDE_DIRS
|
||||
NAMES ${_header}
|
||||
PATHS C:/gstreamer/1.0/x86_64/include
|
||||
PATH_SUFFIXES gstreamer-1.0
|
||||
)
|
||||
|
||||
find_library(${_component_prefix}_LIBRARIES
|
||||
NAMES ${_library}
|
||||
PATHS C:/gstreamer/1.0/x86_64/lib
|
||||
)
|
||||
endmacro()
|
||||
else ()
|
||||
|
||||
find_package(PkgConfig)
|
||||
|
||||
macro(FIND_GSTREAMER_COMPONENT _component_prefix _pkgconfig_name _header _library)
|
||||
pkg_check_modules(${_component_prefix} QUIET ${_pkgconfig_name})
|
||||
|
||||
# find_path(${_component_prefix}_INCLUDE_DIRS
|
||||
# NAMES ${_header}
|
||||
# HINTS ${PC_${_component_prefix}_INCLUDE_DIRS} ${PC_${_component_prefix}_INCLUDEDIR}
|
||||
# PATH_SUFFIXES gstreamer-1.0
|
||||
# )
|
||||
|
||||
# find_library(${_component_prefix}_LIBRARIES
|
||||
# NAMES ${_library}
|
||||
# HINTS ${PC_${_component_prefix}_LIBRARY_DIRS} ${PC_${_component_prefix}_LIBDIR}
|
||||
# )
|
||||
endmacro()
|
||||
endif ()
|
||||
|
||||
# ------------------------
|
||||
# 1. Find GStreamer itself
|
||||
# ------------------------
|
||||
|
||||
# 1.1. Find headers and libraries
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER gstreamer-1.0 gst/gst.h gstreamer-1.0)
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_BASE gstreamer-base-1.0 gst/gst.h gstbase-1.0)
|
||||
|
||||
|
||||
# 1.2. Check GStreamer version
|
||||
if (GSTREAMER_INCLUDE_DIRS)
|
||||
if (EXISTS "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h")
|
||||
file(READ "${GSTREAMER_INCLUDE_DIRS}/gst/gstversion.h" GSTREAMER_VERSION_CONTENTS)
|
||||
|
||||
string(REGEX MATCH "#define +GST_VERSION_MAJOR +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
|
||||
set(GSTREAMER_VERSION_MAJOR "${CMAKE_MATCH_1}")
|
||||
|
||||
string(REGEX MATCH "#define +GST_VERSION_MINOR +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
|
||||
set(GSTREAMER_VERSION_MINOR "${CMAKE_MATCH_1}")
|
||||
|
||||
string(REGEX MATCH "#define +GST_VERSION_MICRO +\\(([0-9]+)\\)" _dummy "${GSTREAMER_VERSION_CONTENTS}")
|
||||
set(GSTREAMER_VERSION_MICRO "${CMAKE_MATCH_1}")
|
||||
|
||||
set(GSTREAMER_VERSION "${GSTREAMER_VERSION_MAJOR}.${GSTREAMER_VERSION_MINOR}.${GSTREAMER_VERSION_MICRO}")
|
||||
endif ()
|
||||
endif ()
|
||||
|
||||
|
||||
if ("${GStreamer_FIND_VERSION}" VERSION_GREATER "${GSTREAMER_VERSION}")
|
||||
message(FATAL_ERROR "Required version (" ${GStreamer_FIND_VERSION} ") is higher than found version (" ${GSTREAMER_VERSION} ")")
|
||||
endif ()
|
||||
|
||||
# -------------------------
|
||||
# 2. Find GStreamer plugins
|
||||
# -------------------------
|
||||
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_APP gstreamer-app-1.0 gst/app/gstappsink.h gstapp-1.0)
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_AUDIO gstreamer-audio-1.0 gst/audio/audio.h gstaudio-1.0)
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_FFT gstreamer-fft-1.0 gst/fft/gstfft.h gstfft-1.0)
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_PBUTILS gstreamer-pbutils-1.0 gst/pbutils/pbutils.h gstpbutils-1.0)
|
||||
FIND_GSTREAMER_COMPONENT(GSTREAMER_VIDEO gstreamer-video-1.0 gst/video/video.h gstvideo-1.0)
|
||||
|
||||
# ------------------------------------------------
|
||||
# 3. Process the COMPONENTS passed to FIND_PACKAGE
|
||||
# ------------------------------------------------
|
||||
set(_GSTREAMER_REQUIRED_VARS GSTREAMER_INCLUDE_DIRS GSTREAMER_LIBRARIES GSTREAMER_VERSION GSTREAMER_BASE_INCLUDE_DIRS GSTREAMER_BASE_LIBRARIES)
|
||||
|
||||
foreach (_component ${GStreamer_FIND_COMPONENTS})
|
||||
set(_gst_component "GSTREAMER_${_component}")
|
||||
string(TOUPPER ${_gst_component} _UPPER_NAME)
|
||||
|
||||
list(APPEND _GSTREAMER_REQUIRED_VARS ${_UPPER_NAME}_INCLUDE_DIRS ${_UPPER_NAME}_LIBRARIES)
|
||||
endforeach ()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GStreamer REQUIRED_VARS ${_GSTREAMER_REQUIRED_VARS}
|
||||
VERSION_VAR GSTREAMER_VERSION)
|
||||
|
||||
mark_as_advanced(
|
||||
GSTREAMER_APP_INCLUDE_DIRS
|
||||
GSTREAMER_APP_LIBRARIES
|
||||
GSTREAMER_AUDIO_INCLUDE_DIRS
|
||||
GSTREAMER_AUDIO_LIBRARIES
|
||||
GSTREAMER_BASE_INCLUDE_DIRS
|
||||
GSTREAMER_BASE_LIBRARIES
|
||||
GSTREAMER_FFT_INCLUDE_DIRS
|
||||
GSTREAMER_FFT_LIBRARIES
|
||||
GSTREAMER_INCLUDE_DIRS
|
||||
GSTREAMER_LIBRARIES
|
||||
GSTREAMER_PBUTILS_INCLUDE_DIRS
|
||||
GSTREAMER_PBUTILS_LIBRARIES
|
||||
GSTREAMER_VIDEO_INCLUDE_DIRS
|
||||
GSTREAMER_VIDEO_LIBRARIES
|
||||
)
|
||||
@@ -9,15 +9,6 @@
|
||||
#
|
||||
# Created by Robert Osfield.
|
||||
|
||||
# prefer FindJasper from cmake distribution
|
||||
if(EXISTS ${CMAKE_ROOT}/Modules/FindJasper.cmake)
|
||||
include(${CMAKE_ROOT}/Modules/FindJasper.cmake)
|
||||
|
||||
if(JASPER_FOUND)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
FIND_PATH(JASPER_INCLUDE_DIR jasper/jasper.h
|
||||
$ENV{JASPER_DIR}/include
|
||||
$ENV{JASPER_DIR}/src/libjasper/include
|
||||
|
||||
@@ -1,107 +0,0 @@
|
||||
#---
|
||||
# File: FindLIBLAS.cmake
|
||||
#
|
||||
# Find the native LIBLAS includes and library
|
||||
#
|
||||
# LIBLAS_INCLUDE_DIRS - where to find liblas's includes.
|
||||
# LIBLAS_LIBRARIES - List of libraries when using liblas.
|
||||
# LIBLAS_FOUND - True if liblas found.
|
||||
#---
|
||||
|
||||
|
||||
# Set the include dir:
|
||||
find_path(LIBLAS_INCLUDE_DIR liblas/liblas.hpp)
|
||||
|
||||
# Macro for setting libraries:
|
||||
macro(FIND_LIBLAS_LIBRARY MYLIBRARY MYLIBRARYNAME)
|
||||
|
||||
find_library(
|
||||
"${MYLIBRARY}_DEBUG"
|
||||
NAMES "${MYLIBRARYNAME}${CMAKE_DEBUG_POSTFIX}"
|
||||
PATHS
|
||||
${LIBLAS_DIR}/lib/Debug
|
||||
${LIBLAS_DIR}/lib64/Debug
|
||||
${LIBLAS_DIR}/lib
|
||||
${LIBLAS_DIR}/lib64
|
||||
$ENV{LIBLAS_DIR}/lib/debug
|
||||
$ENV{LIBLAS_DIR}/lib64/debug
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(
|
||||
"${MYLIBRARY}_DEBUG"
|
||||
NAMES "${MYLIBRARYNAME}${CMAKE_DEBUG_POSTFIX}"
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;LIBLAS_ROOT]/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
find_library(
|
||||
${MYLIBRARY}
|
||||
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
|
||||
PATHS
|
||||
${LIBLAS_DIR}/lib/Release
|
||||
${LIBLAS_DIR}/lib64/Release
|
||||
${LIBLAS_DIR}/lib
|
||||
${LIBLAS_DIR}/lib64
|
||||
$ENV{LIBLAS_DIR}/lib/Release
|
||||
$ENV{LIBLAS_DIR}/lib64/Release
|
||||
$ENV{LIBLAS_DIR}/lib
|
||||
$ENV{LIBLAS_DIR}/lib64
|
||||
$ENV{LIBLAS_DIR}
|
||||
$ENV{LIBLASDIR}/lib
|
||||
$ENV{LIBLASDIR}/lib64
|
||||
$ENV{LIBLASDIR}
|
||||
$ENV{LIBLAS_ROOT}/lib
|
||||
$ENV{LIBLAS_ROOT}/lib64
|
||||
NO_DEFAULT_PATH
|
||||
)
|
||||
|
||||
find_library(
|
||||
${MYLIBRARY}
|
||||
NAMES "${MYLIBRARYNAME}${CMAKE_RELEASE_POSTFIX}"
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/local/lib64
|
||||
/usr/lib
|
||||
/usr/lib64
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Control\\Session\ Manager\\Environment;LIBLAS_ROOT]/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
if( NOT ${MYLIBRARY}_DEBUG )
|
||||
if( MYLIBRARY )
|
||||
set( ${MYLIBRARY}_DEBUG ${MYLIBRARY} )
|
||||
endif(MYLIBRARY)
|
||||
endif( NOT ${MYLIBRARY}_DEBUG )
|
||||
|
||||
endmacro(FIND_LIBLAS_LIBRARY LIBRARY LIBRARYNAME)
|
||||
|
||||
FIND_LIBLAS_LIBRARY(LIBLAS_LIBRARY las)
|
||||
FIND_LIBLAS_LIBRARY(LIBLASC_LIBRARY las_c)
|
||||
|
||||
set(LIBLAS_FOUND "NO")
|
||||
if(LIBLAS_LIBRARY AND LIBLASC_LIBRARY AND LIBLAS_INCLUDE_DIR)
|
||||
|
||||
FIND_PACKAGE(Boost) # used by LIBLAS
|
||||
if(Boost_FOUND)
|
||||
set(LIBLAS_LIBRARIES ${LIBLAS_LIBRARY} ${LIBLASC_LIBRARY} )
|
||||
set(LIBLAS_FOUND "YES")
|
||||
endif()
|
||||
endif()
|
||||
@@ -1,83 +0,0 @@
|
||||
# Locate Lua library
|
||||
# This module defines
|
||||
# LUA51_FOUND, if false, do not try to link to Lua
|
||||
# LUA_LIBRARIES
|
||||
# LUA_INCLUDE_DIR, where to find lua.h
|
||||
# LUA_VERSION_STRING, the version of Lua found (since CMake 2.8.8)
|
||||
#
|
||||
# Note that the expected include convention is
|
||||
# #include "lua.h"
|
||||
# and not
|
||||
# #include <lua/lua.h>
|
||||
# This is because, the lua location is not standardized and may exist
|
||||
# in locations other than lua/
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2007-2009 Kitware, Inc.
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
find_path(LUA_INCLUDE_DIR lua.h
|
||||
HINTS
|
||||
ENV LUA_DIR
|
||||
PATH_SUFFIXES include/lua52 include/lua5.2 include/lua include
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/sw # Fink
|
||||
/opt/local # DarwinPorts
|
||||
/opt/csw # Blastwave
|
||||
/opt
|
||||
)
|
||||
|
||||
find_library(LUA_LIBRARY
|
||||
NAMES lua52 lua5.2 lua-5.2 lua
|
||||
HINTS
|
||||
ENV LUA_DIR
|
||||
PATH_SUFFIXES lib
|
||||
PATHS
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/sw
|
||||
/opt/local
|
||||
/opt/csw
|
||||
/opt
|
||||
)
|
||||
|
||||
if(LUA_LIBRARY)
|
||||
# include the math library for Unix
|
||||
if(UNIX AND NOT APPLE)
|
||||
find_library(LUA_MATH_LIBRARY m)
|
||||
set( LUA_LIBRARIES "${LUA_LIBRARY};${LUA_MATH_LIBRARY}" CACHE STRING "Lua Libraries")
|
||||
# For Windows and Mac, don't need to explicitly include the math library
|
||||
else()
|
||||
set( LUA_LIBRARIES "${LUA_LIBRARY}" CACHE STRING "Lua Libraries")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(LUA_INCLUDE_DIR AND EXISTS "${LUA_INCLUDE_DIR}/lua.h")
|
||||
file(STRINGS "${LUA_INCLUDE_DIR}/lua.h" lua_version_str REGEX "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua .+\"")
|
||||
|
||||
string(REGEX REPLACE "^#define[ \t]+LUA_RELEASE[ \t]+\"Lua ([^\"]+)\".*" "\\1" LUA_VERSION_STRING "${lua_version_str}")
|
||||
unset(lua_version_str)
|
||||
endif()
|
||||
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# handle the QUIETLY and REQUIRED arguments and set LUA_FOUND to TRUE if
|
||||
# all listed variables are TRUE
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Lua52
|
||||
REQUIRED_VARS LUA_LIBRARIES LUA_INCLUDE_DIR
|
||||
VERSION_VAR LUA_VERSION_STRING)
|
||||
|
||||
mark_as_advanced(LUA_INCLUDE_DIR LUA_LIBRARIES LUA_LIBRARY LUA_MATH_LIBRARY)
|
||||
|
||||
@@ -98,85 +98,6 @@ FIND_LIBRARY(NVCORE_LIBRARY_DEBUG
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
|
||||
# NVTHREAD
|
||||
FIND_LIBRARY(NVTHREAD_LIBRARY
|
||||
NAMES nvthread
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
FIND_LIBRARY(NVTHREAD_LIBRARY_DEBUG
|
||||
NAMES nvthread_d
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
|
||||
# SQUISH
|
||||
FIND_LIBRARY(NVSQUISH_LIBRARY
|
||||
NAMES squish
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
FIND_LIBRARY(NVSQUISH_LIBRARY_DEBUG
|
||||
NAMES squish_d
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
|
||||
# BC6H
|
||||
FIND_LIBRARY(NVBC6H_LIBRARY
|
||||
NAMES bc6h
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
FIND_LIBRARY(NVBC6H_LIBRARY_DEBUG
|
||||
NAMES bc6h_d
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
|
||||
# BC7
|
||||
FIND_LIBRARY(NVBC7_LIBRARY
|
||||
NAMES bc7
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
FIND_LIBRARY(NVBC7_LIBRARY_DEBUG
|
||||
NAMES bc7_d
|
||||
PATHS
|
||||
/usr/local
|
||||
/usr
|
||||
$ENV{NVTT_DIR}
|
||||
${3rdPartyRoot}
|
||||
PATH_SUFFIXES lib64 lib lib/shared lib/static lib64/static
|
||||
)
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
#
|
||||
# Created by Robert Osfield.
|
||||
|
||||
|
||||
FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h
|
||||
$ENV{OPENEXR_DIR}/include
|
||||
$ENV{OPENEXR_DIR}
|
||||
@@ -24,41 +23,78 @@ FIND_PATH(OPENEXR_INCLUDE_DIR OpenEXR/ImfIO.h
|
||||
/usr/freeware/include
|
||||
)
|
||||
|
||||
# Macro to find exr libraries (deduplicating search paths)
|
||||
# example: OPENEXR_FIND_VAR(OPENEXR_IlmImf_LIBRARY IlmImf)
|
||||
MACRO(OPENEXR_FIND_VAR varname libname)
|
||||
FIND_LIBRARY( ${varname}
|
||||
NAMES ${libname}
|
||||
PATHS
|
||||
$ENV{OPENEXR_DIR}/lib
|
||||
$ENV{OPENEXR_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
ENDMACRO(OPENEXR_FIND_VAR)
|
||||
FIND_LIBRARY(OPENEXR_IlmIlf_LIBRARY
|
||||
NAMES IlmImf
|
||||
PATHS
|
||||
$ENV{OPENEXR_DIR}/lib
|
||||
$ENV{OPENEXR_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
# Macro to find exr libraries (and debug versions)
|
||||
# example: OPENEXR_FIND(IlmImf)
|
||||
MACRO(OPENEXR_FIND libname)
|
||||
OPENEXR_FIND_VAR(OPENEXR_${libname}_LIBRARY ${libname})
|
||||
OPENEXR_FIND_VAR(OPENEXR_${libname}_LIBRARY_DEBUG ${libname}d)
|
||||
ENDMACRO(OPENEXR_FIND)
|
||||
FIND_LIBRARY(OPENEXR_IlmThread_LIBRARY
|
||||
NAMES IlmThread
|
||||
PATHS
|
||||
$ENV{OPENEXR_DIR}/lib
|
||||
$ENV{OPENEXR_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
OPENEXR_FIND(IlmImf)
|
||||
OPENEXR_FIND(IlmThread)
|
||||
OPENEXR_FIND(Iex)
|
||||
OPENEXR_FIND(Half)
|
||||
|
||||
FIND_LIBRARY(OPENEXR_Iex_LIBRARY
|
||||
NAMES Iex
|
||||
PATHS
|
||||
$ENV{OPENEXR_DIR}/lib
|
||||
$ENV{OPENEXR_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
FIND_LIBRARY(OPENEXR_Half_LIBRARY
|
||||
NAMES Half
|
||||
PATHS
|
||||
$ENV{OPENEXR_DIR}/lib
|
||||
$ENV{OPENEXR_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
SET(OPENEXR_FOUND "NO")
|
||||
IF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmImf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)
|
||||
SET(OPENEXR_LIBRARIES ${OPENEXR_IlmImf_LIBRARY} ${OPENEXR_IlmThread_LIBRARY} ${OPENEXR_Half_LIBRARY} ${OPENEXR_Iex_LIBRARY} )
|
||||
SET(OPENEXR_LIBRARIES_VARS OPENEXR_IlmImf_LIBRARY OPENEXR_IlmThread_LIBRARY OPENEXR_Half_LIBRARY OPENEXR_Iex_LIBRARY )
|
||||
IF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmIlf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)
|
||||
SET(OPENEXR_LIBRARIES
|
||||
${OPENEXR_IlmIlf_LIBRARY}
|
||||
${OPENEXR_IlmThread_LIBRARY}
|
||||
${OPENEXR_Half_LIBRARY}
|
||||
${OPENEXR_Iex_LIBRARY}
|
||||
)
|
||||
SET(OPENEXR_FOUND "YES")
|
||||
ENDIF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmImf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)
|
||||
ENDIF(OPENEXR_INCLUDE_DIR AND OPENEXR_IlmIlf_LIBRARY AND OPENEXR_IlmThread_LIBRARY AND OPENEXR_Iex_LIBRARY AND OPENEXR_Half_LIBRARY)
|
||||
|
||||
@@ -17,16 +17,6 @@
|
||||
#
|
||||
# Created by Eric Wing.
|
||||
|
||||
# prefer FindOpenThreads from cmake distribution
|
||||
if(EXISTS ${CMAKE_ROOT}/Modules/FindOpenThreads.cmake)
|
||||
include(${CMAKE_ROOT}/Modules/FindOpenThreads.cmake)
|
||||
|
||||
if(OPENTHREADS_FOUND)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
# Header files are presumed to be included like
|
||||
# #include <OpenThreads/Thread>
|
||||
|
||||
|
||||
@@ -1,14 +1,13 @@
|
||||
# Locate QuickTime
|
||||
# This module defines
|
||||
# QUICKTIME_LIBRARY
|
||||
# QUICKTIME_FOUND, if false, do not try to link to gdal
|
||||
# QUICKTIME_FOUND, if false, do not try to link to gdal
|
||||
# QUICKTIME_INCLUDE_DIR, where to find the headers
|
||||
#
|
||||
# $QUICKTIME_DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$QUICKTIME_DIR
|
||||
#
|
||||
# Created by Eric Wing.
|
||||
|
||||
# Created by Eric Wing.
|
||||
|
||||
# QuickTime on OS X looks different than QuickTime for Windows,
|
||||
# so I am going to case the two.
|
||||
|
||||
@@ -1,178 +0,0 @@
|
||||
# - Locate SDL library
|
||||
# This module defines
|
||||
# SDL2_LIBRARY, the name of the library to link against
|
||||
# SDL2_FOUND, if false, do not try to link to SDL
|
||||
# SDL2_INCLUDE_DIR, where to find SDL.h
|
||||
# SDL2_VERSION_STRING, human-readable string containing the version of SDL
|
||||
#
|
||||
# This module responds to the flag:
|
||||
# SDL2_BUILDING_LIBRARY
|
||||
# If this is defined, then no SDL2_main will be linked in because
|
||||
# only applications need main().
|
||||
# Otherwise, it is assumed you are building an application and this
|
||||
# module will attempt to locate and set the proper link flags
|
||||
# as part of the returned SDL2_LIBRARY variable.
|
||||
#
|
||||
# Don't forget to include SDLmain.h and SDLmain.m your project for the
|
||||
# OS X framework based version. (Other versions link to -lSDLmain which
|
||||
# this module will try to find on your behalf.) Also for OS X, this
|
||||
# module will automatically add the -framework Cocoa on your behalf.
|
||||
#
|
||||
#
|
||||
# Additional Note: If you see an empty SDL2_LIBRARY_TEMP in your configuration
|
||||
# and no SDL2_LIBRARY, it means CMake did not find your SDL library
|
||||
# (SDL.dll, libsdl.so, SDL.framework, etc).
|
||||
# Set SDL2_LIBRARY_TEMP to point to your SDL library, and configure again.
|
||||
# Similarly, if you see an empty SDL2MAIN_LIBRARY, you should set this value
|
||||
# as appropriate. These values are used to generate the final SDL2_LIBRARY
|
||||
# variable, but when these values are unset, SDL2_LIBRARY does not get created.
|
||||
#
|
||||
#
|
||||
# $SDLDIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$SDLDIR
|
||||
# used in building SDL.
|
||||
# l.e.galup 9-20-02
|
||||
#
|
||||
# Modified by Eric Wing.
|
||||
# Added code to assist with automated building by using environmental variables
|
||||
# and providing a more controlled/consistent search behavior.
|
||||
# Added new modifications to recognize OS X frameworks and
|
||||
# additional Unix paths (FreeBSD, etc).
|
||||
# Also corrected the header search path to follow "proper" SDL guidelines.
|
||||
# Added a search for SDLmain which is needed by some platforms.
|
||||
# Added a search for threads which is needed by some platforms.
|
||||
# Added needed compile switches for MinGW.
|
||||
#
|
||||
# On OSX, this will prefer the Framework version (if found) over others.
|
||||
# People will have to manually change the cache values of
|
||||
# SDL2_LIBRARY to override this selection or set the CMake environment
|
||||
# CMAKE_INCLUDE_PATH to modify the search paths.
|
||||
#
|
||||
# Note that the header path has changed from SDL/SDL.h to just SDL.h
|
||||
# This needed to change because "proper" SDL convention
|
||||
# is #include "SDL.h", not <SDL/SDL.h>. This is done for portability
|
||||
# reasons because not all systems place things in SDL/ (see FreeBSD).
|
||||
|
||||
#=============================================================================
|
||||
# Copyright 2003-2009 Kitware, Inc.
|
||||
# Copyright 2012 Benjamin Eikel
|
||||
#
|
||||
# Distributed under the OSI-approved BSD License (the "License");
|
||||
# see accompanying file Copyright.txt for details.
|
||||
#
|
||||
# This software is distributed WITHOUT ANY WARRANTY; without even the
|
||||
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
# See the License for more information.
|
||||
#=============================================================================
|
||||
# (To distribute this file outside of CMake, substitute the full
|
||||
# License text for the above reference.)
|
||||
|
||||
find_path(SDL2_INCLUDE_DIR SDL.h
|
||||
HINTS
|
||||
ENV SDL2DIR
|
||||
PATH_SUFFIXES include/SDL2
|
||||
)
|
||||
|
||||
# SDL-1.1 is the name used by FreeBSD ports...
|
||||
# don't confuse it for the version number.
|
||||
find_library(SDL2_LIBRARY_TEMP
|
||||
NAMES SDL2
|
||||
HINTS
|
||||
ENV SDL2DIR
|
||||
PATH_SUFFIXES lib
|
||||
)
|
||||
|
||||
if(NOT SDL2_BUILDING_LIBRARY)
|
||||
if(NOT ${SDL2_INCLUDE_DIR} MATCHES ".framework")
|
||||
# Non-OS X framework versions expect you to also dynamically link to
|
||||
# SDLmain. This is mainly for Windows and OS X. Other (Unix) platforms
|
||||
# seem to provide SDLmain for compatibility even though they don't
|
||||
# necessarily need it.
|
||||
find_library(SDL2MAIN_LIBRARY
|
||||
NAMES SDL2main
|
||||
HINTS
|
||||
ENV SDL2DIR
|
||||
PATH_SUFFIXES lib
|
||||
PATHS
|
||||
/sw
|
||||
/opt/local
|
||||
/opt/csw
|
||||
/opt
|
||||
)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
# SDL may require threads on your system.
|
||||
# The Apple build may not need an explicit flag because one of the
|
||||
# frameworks may already provide it.
|
||||
# But for non-OSX systems, I will use the CMake Threads package.
|
||||
if(NOT APPLE)
|
||||
find_package(Threads)
|
||||
endif()
|
||||
|
||||
# MinGW needs an additional library, mwindows
|
||||
# It's total link flags should look like -lmingw32 -lSDLmain -lSDL -lmwindows
|
||||
# (Actually on second look, I think it only needs one of the m* libraries.)
|
||||
if(MINGW)
|
||||
set(MINGW32_LIBRARY mingw32 CACHE STRING "mwindows for MinGW")
|
||||
endif()
|
||||
|
||||
if(SDL2_LIBRARY_TEMP)
|
||||
# For SDLmain
|
||||
if(SDL2MAIN_LIBRARY AND NOT SDL2_BUILDING_LIBRARY)
|
||||
list(FIND SDL2_LIBRARY_TEMP "${SDL2MAIN_LIBRARY}" _SDL2_MAIN_INDEX)
|
||||
if(_SDL2_MAIN_INDEX EQUAL -1)
|
||||
set(SDL2_LIBRARY_TEMP "${SDL2MAIN_LIBRARY}" ${SDL2_LIBRARY_TEMP})
|
||||
endif()
|
||||
unset(_SDL2_MAIN_INDEX)
|
||||
endif()
|
||||
|
||||
# For OS X, SDL uses Cocoa as a backend so it must link to Cocoa.
|
||||
# CMake doesn't display the -framework Cocoa string in the UI even
|
||||
# though it actually is there if I modify a pre-used variable.
|
||||
# I think it has something to do with the CACHE STRING.
|
||||
# So I use a temporary variable until the end so I can set the
|
||||
# "real" variable in one-shot.
|
||||
if(APPLE)
|
||||
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} "-framework Cocoa")
|
||||
endif()
|
||||
|
||||
# For threads, as mentioned Apple doesn't need this.
|
||||
# In fact, there seems to be a problem if I used the Threads package
|
||||
# and try using this line, so I'm just skipping it entirely for OS X.
|
||||
if(NOT APPLE)
|
||||
set(SDL2_LIBRARY_TEMP ${SDL2_LIBRARY_TEMP} ${CMAKE_THREAD_LIBS_INIT})
|
||||
endif()
|
||||
|
||||
# For MinGW library
|
||||
if(MINGW)
|
||||
set(SDL2_LIBRARY_TEMP ${MINGW32_LIBRARY} ${SDL2_LIBRARY_TEMP})
|
||||
endif()
|
||||
|
||||
# Set the final string here so the GUI reflects the final state.
|
||||
set(SDL2_LIBRARY ${SDL2_LIBRARY_TEMP} CACHE STRING "Where the SDL Library can be found")
|
||||
# Set the temp variable to INTERNAL so it is not seen in the CMake GUI
|
||||
set(SDL2_LIBRARY_TEMP "${SDL2_LIBRARY_TEMP}" CACHE INTERNAL "")
|
||||
endif()
|
||||
|
||||
if(SDL2_INCLUDE_DIR AND EXISTS "${SDL2_INCLUDE_DIR}/SDL2_version.h")
|
||||
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MAJOR_LINE REGEX "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+[0-9]+$")
|
||||
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_MINOR_LINE REGEX "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+[0-9]+$")
|
||||
file(STRINGS "${SDL2_INCLUDE_DIR}/SDL2_version.h" SDL2_VERSION_PATCH_LINE REGEX "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+[0-9]+$")
|
||||
string(REGEX REPLACE "^#define[ \t]+SDL2_MAJOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MAJOR "${SDL2_VERSION_MAJOR_LINE}")
|
||||
string(REGEX REPLACE "^#define[ \t]+SDL2_MINOR_VERSION[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_MINOR "${SDL2_VERSION_MINOR_LINE}")
|
||||
string(REGEX REPLACE "^#define[ \t]+SDL2_PATCHLEVEL[ \t]+([0-9]+)$" "\\1" SDL2_VERSION_PATCH "${SDL2_VERSION_PATCH_LINE}")
|
||||
set(SDL2_VERSION_STRING ${SDL2_VERSION_MAJOR}.${SDL2_VERSION_MINOR}.${SDL2_VERSION_PATCH})
|
||||
unset(SDL2_VERSION_MAJOR_LINE)
|
||||
unset(SDL2_VERSION_MINOR_LINE)
|
||||
unset(SDL2_VERSION_PATCH_LINE)
|
||||
unset(SDL2_VERSION_MAJOR)
|
||||
unset(SDL2_VERSION_MINOR)
|
||||
unset(SDL2_VERSION_PATCH)
|
||||
endif()
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
FIND_PACKAGE_HANDLE_STANDARD_ARGS(SDL2
|
||||
REQUIRED_VARS SDL2_LIBRARY SDL2_INCLUDE_DIR
|
||||
VERSION_VAR SDL2_VERSION_STRING)
|
||||
@@ -1,45 +0,0 @@
|
||||
# Locate V8
|
||||
# This module defines
|
||||
# V8_LIBRARY
|
||||
# V8_FOUND, if false, do not try to link to gdal
|
||||
# V8_INCLUDE_DIR, where to find the headers
|
||||
#
|
||||
# $V8_DIR is an environment variable that would
|
||||
# correspond to the ./configure --prefix=$V8_DIR
|
||||
#
|
||||
# Created by Robert Osfield (based on FindFLTK.cmake)
|
||||
|
||||
FIND_PATH(V8_INCLUDE_DIR v8.h
|
||||
$ENV{V8_DIR}/include
|
||||
$ENV{V8_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/include
|
||||
/usr/include
|
||||
/sw/include # Fink
|
||||
/opt/local/include # DarwinPorts
|
||||
/opt/csw/include # Blastwave
|
||||
/opt/include
|
||||
/usr/freeware/include
|
||||
)
|
||||
|
||||
FIND_LIBRARY(V8_LIBRARY
|
||||
NAMES v8 libv8
|
||||
PATHS
|
||||
$ENV{V8_DIR}/lib
|
||||
$ENV{V8_DIR}
|
||||
~/Library/Frameworks
|
||||
/Library/Frameworks
|
||||
/usr/local/lib
|
||||
/usr/lib
|
||||
/sw/lib
|
||||
/opt/local/lib
|
||||
/opt/csw/lib
|
||||
/opt/lib
|
||||
/usr/freeware/lib64
|
||||
)
|
||||
|
||||
SET(V8_FOUND "NO")
|
||||
IF(V8_LIBRARY AND V8_INCLUDE_DIR)
|
||||
SET(V8_FOUND "YES")
|
||||
ENDIF()
|
||||
@@ -10,16 +10,6 @@
|
||||
#
|
||||
# Created by Ulrich Hertlein.
|
||||
|
||||
# prefer FindZLIB from cmake distribution
|
||||
if(EXISTS ${CMAKE_ROOT}/Modules/FindZLIB.cmake)
|
||||
include(${CMAKE_ROOT}/Modules/FindZLIB.cmake)
|
||||
|
||||
if(ZLIB_FOUND)
|
||||
return()
|
||||
endif()
|
||||
endif()
|
||||
|
||||
|
||||
FIND_PATH(ZLIB_INCLUDE_DIR zlib.h
|
||||
$ENV{ZLIB_DIR}/include
|
||||
$ENV{ZLIB_DIR}
|
||||
|
||||
@@ -25,6 +25,14 @@ IF(MSVC AND OSG_MSVC_VERSIONED_DLL)
|
||||
HANDLE_MSVC_DLL()
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
INSTALL (
|
||||
FILES ${TARGET_H}
|
||||
DESTINATION ${INSTALL_INCDIR}/${LIB_NAME}
|
||||
COMPONENT libopenscenegraph-dev
|
||||
)
|
||||
ELSE(ANDROID)
|
||||
|
||||
INSTALL(
|
||||
TARGETS ${LIB_NAME}
|
||||
RUNTIME DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph
|
||||
@@ -32,12 +40,6 @@ INSTALL(
|
||||
ARCHIVE DESTINATION ${INSTALL_ARCHIVEDIR} COMPONENT libopenscenegraph-dev
|
||||
)
|
||||
|
||||
IF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
|
||||
GET_TARGET_PROPERTY(PREFIX ${LIB_NAME} PREFIX)
|
||||
INSTALL(FILES ${OUTPUT_BINDIR}/${PREFIX}${LIB_NAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph CONFIGURATIONS RelWithDebInfo)
|
||||
INSTALL(FILES ${OUTPUT_BINDIR}/${PREFIX}${LIB_NAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION ${INSTALL_BINDIR} COMPONENT libopenscenegraph CONFIGURATIONS Debug)
|
||||
ENDIF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
|
||||
|
||||
IF(NOT OSG_COMPILE_FRAMEWORKS)
|
||||
INSTALL (
|
||||
FILES ${TARGET_H}
|
||||
@@ -57,3 +59,4 @@ ELSE()
|
||||
# MESSAGE("${OSG_COMPILE_FRAMEWORKS_INSTALL_NAME_DIR}")
|
||||
ENDIF()
|
||||
|
||||
ENDIF(ANDROID)
|
||||
|
||||
@@ -67,7 +67,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#JPEG
|
||||
################################################
|
||||
FIND_PATH(JPEG_INCLUDE_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libjpeg NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libjpeg
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libjpeg")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${JPEG_INCLUDE_DIR}/Android.mk \n")
|
||||
@@ -82,7 +82,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#PNG
|
||||
################################################
|
||||
FIND_PATH(PNG_INCLUDE_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libpng NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libpng
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libpng")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${PNG_INCLUDE_DIR}/Android.mk \n")
|
||||
@@ -97,7 +97,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#GIF
|
||||
################################################
|
||||
FIND_PATH(GIFLIB_INCLUDE_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/giflib NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/giflib
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libgif")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${GIFLIB_INCLUDE_DIR}/Android.mk \n")
|
||||
@@ -112,7 +112,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#TIF
|
||||
################################################
|
||||
FIND_PATH(TIFF_INCLUDE_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libtiff NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/libtiff
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libtiff")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${TIFF_INCLUDE_DIR}/Android.mk \n")
|
||||
@@ -142,7 +142,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#CURL
|
||||
################################################
|
||||
FIND_PATH(CURL_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/curl NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/curl
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libcurl")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${CURL_DIR}/Android.mk \n")
|
||||
@@ -159,11 +159,11 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#FREETYPE
|
||||
################################################
|
||||
FIND_PATH(FREETYPE_DIR Android.mk
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/freetype NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/freetype
|
||||
)
|
||||
#set(ENV{AND_OSG_LIB_NAMES} "$ENV{AND_OSG_LIB_NAMES} libft2")
|
||||
#set(ENV{AND_OSG_LIB_PATHS} "$ENV{AND_OSG_LIB_PATHS}include ${FREETYPE_DIR}/Android.mk \n")
|
||||
set(FREETYPE_INCLUDE_DIRS ${FREETYPE_DIR}/include ${FREETYPE_DIR}/include/freetype/config)
|
||||
set(FREETYPE_INCLUDE_DIRS "${FREETYPE_DIR}/include ${FREETYPE_DIR}/include/freetype/config")
|
||||
if(FREETYPE_DIR)
|
||||
message(STATUS "FREETYPE found ${FREETYPE_DIR}" )
|
||||
set(FREETYPE_FOUND "Yes")
|
||||
@@ -175,7 +175,7 @@ MACRO(ANDROID_3RD_PARTY)
|
||||
#GDAL
|
||||
################################################
|
||||
FIND_PATH(GDAL_DIR gdal.h
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/gdal/include NO_CMAKE_FIND_ROOT_PATH
|
||||
${CMAKE_SOURCE_DIR}/3rdparty/gdal/include
|
||||
)
|
||||
set(GDAL_INCLUDE_DIR "${GDAL_DIR}")
|
||||
if(GDAL_DIR)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
# full path of the library name. in order to differentiate release and debug, this macro get the
|
||||
# NAME of the variables, so the macro gets as arguments the target name and the following list of parameters
|
||||
# is intended as a list of variable names each one containing the path of the libraries to link to
|
||||
# The existence of a variable name with _DEBUG appended is tested and, in case it' s value is used
|
||||
# The existance of a variable name with _DEBUG appended is tested and, in case it' s value is used
|
||||
# for linking to when in debug mode
|
||||
# the content of this library for linking when in debugging
|
||||
#######################################################################################################
|
||||
@@ -43,11 +43,7 @@ SET(VALID_BUILDER_VERSION OFF)
|
||||
MACRO(LINK_WITH_VARIABLES TRGTNAME)
|
||||
FOREACH(varname ${ARGN})
|
||||
IF(${varname}_DEBUG)
|
||||
IF(${varname}_RELEASE)
|
||||
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}_RELEASE}" debug "${${varname}_DEBUG}")
|
||||
ELSE(${varname}_RELEASE)
|
||||
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}}" debug "${${varname}_DEBUG}")
|
||||
ENDIF(${varname}_RELEASE)
|
||||
TARGET_LINK_LIBRARIES(${TRGTNAME} optimized "${${varname}}" debug "${${varname}_DEBUG}")
|
||||
ELSE(${varname}_DEBUG)
|
||||
TARGET_LINK_LIBRARIES(${TRGTNAME} "${${varname}}" )
|
||||
ENDIF(${varname}_DEBUG)
|
||||
@@ -127,9 +123,9 @@ MACRO(SETUP_LINK_LIBRARIES)
|
||||
FOREACH(LINKLIB ${TARGET_ADDED_LIBRARIES})
|
||||
SET(TO_INSERT TRUE)
|
||||
FOREACH (value ${TARGET_COMMON_LIBRARIES})
|
||||
IF ("${value}" STREQUAL "${LINKLIB}")
|
||||
IF (${value} STREQUAL ${LINKLIB})
|
||||
SET(TO_INSERT FALSE)
|
||||
ENDIF ("${value}" STREQUAL "${LINKLIB}")
|
||||
ENDIF (${value} STREQUAL ${LINKLIB})
|
||||
ENDFOREACH (value ${TARGET_COMMON_LIBRARIES})
|
||||
IF(TO_INSERT)
|
||||
LIST(APPEND TARGET_LIBRARIES ${LINKLIB})
|
||||
@@ -216,10 +212,9 @@ ENDMACRO(SET_OUTPUT_DIR_PROPERTY_260 TARGET_TARGETNAME RELATIVE_OUTDIR)
|
||||
##########################################################################################################
|
||||
|
||||
MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
IF(GLCORE_FOUND)
|
||||
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
|
||||
ENDIF()
|
||||
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${LIB_NAME})
|
||||
ELSE()
|
||||
SET(TARGET_NAME ${LIB_NAME} )
|
||||
SET(TARGET_TARGETNAME ${LIB_NAME} )
|
||||
ADD_LIBRARY(${LIB_NAME}
|
||||
@@ -247,13 +242,14 @@ MACRO(SETUP_LIBRARY LIB_NAME)
|
||||
ENDIF(TARGET_LIBRARIES_VARS)
|
||||
LINK_CORELIB_DEFAULT(${LIB_NAME})
|
||||
|
||||
ENDIF()
|
||||
INCLUDE(ModuleInstall OPTIONAL)
|
||||
ENDMACRO(SETUP_LIBRARY LIB_NAME)
|
||||
|
||||
MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
IF(GLCORE_FOUND)
|
||||
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
|
||||
ENDIF()
|
||||
IF(ANDROID)
|
||||
SETUP_ANDROID_LIBRARY(${TARGET_DEFAULT_PREFIX}${PLUGIN_NAME})
|
||||
ELSE()
|
||||
|
||||
SET(TARGET_NAME ${PLUGIN_NAME} )
|
||||
|
||||
@@ -330,16 +326,13 @@ MACRO(SETUP_PLUGIN PLUGIN_NAME)
|
||||
RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT}
|
||||
ARCHIVE DESTINATION lib/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
|
||||
LIBRARY DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
|
||||
IF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
|
||||
INSTALL(FILES ${OUTPUT_BINDIR}/${OSG_PLUGINS}/${TARGET_TARGETNAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT} CONFIGURATIONS RelWithDebInfo)
|
||||
INSTALL(FILES ${OUTPUT_BINDIR}/${OSG_PLUGINS}/${TARGET_TARGETNAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION bin/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT} CONFIGURATIONS Debug)
|
||||
ENDIF(MSVC AND DYNAMIC_OPENSCENEGRAPH)
|
||||
ELSE(WIN32)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME}
|
||||
RUNTIME DESTINATION bin COMPONENT ${PACKAGE_COMPONENT}
|
||||
ARCHIVE DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT libopenscenegraph-dev
|
||||
LIBRARY DESTINATION lib${LIB_POSTFIX}/${OSG_PLUGINS} COMPONENT ${PACKAGE_COMPONENT})
|
||||
ENDIF(WIN32)
|
||||
ENDIF()
|
||||
ENDMACRO(SETUP_PLUGIN)
|
||||
|
||||
|
||||
@@ -349,10 +342,6 @@ ENDMACRO(SETUP_PLUGIN)
|
||||
|
||||
MACRO(SETUP_EXE IS_COMMANDLINE_APP)
|
||||
#MESSAGE("in -->SETUP_EXE<-- ${TARGET_NAME}-->${TARGET_SRC} <--> ${TARGET_H}<--")
|
||||
IF(GL3_FOUND)
|
||||
INCLUDE_DIRECTORIES( ${GLCORE_INCLUDE_DIR} )
|
||||
ENDIF()
|
||||
|
||||
IF(NOT TARGET_TARGETNAME)
|
||||
SET(TARGET_TARGETNAME "${TARGET_DEFAULT_PREFIX}${TARGET_NAME}")
|
||||
ENDIF(NOT TARGET_TARGETNAME)
|
||||
@@ -436,10 +425,6 @@ MACRO(SETUP_APPLICATION APPLICATION_NAME)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin BUNDLE DESTINATION bin)
|
||||
ELSE(APPLE)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION bin COMPONENT openscenegraph )
|
||||
IF(MSVC)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/bin/${TARGET_NAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION bin COMPONENT openscenegraph CONFIGURATIONS RelWithDebInfo)
|
||||
INSTALL(FILES ${CMAKE_BINARY_DIR}/bin/${TARGET_NAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION bin COMPONENT openscenegraph CONFIGURATIONS Debug)
|
||||
ENDIF(MSVC)
|
||||
ENDIF(APPLE)
|
||||
|
||||
ENDMACRO(SETUP_APPLICATION)
|
||||
@@ -469,10 +454,6 @@ MACRO(SETUP_EXAMPLE EXAMPLE_NAME)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin BUNDLE DESTINATION share/OpenSceneGraph/bin )
|
||||
ELSE(APPLE)
|
||||
INSTALL(TARGETS ${TARGET_TARGETNAME} RUNTIME DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples )
|
||||
IF(MSVC)
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TARGETNAME}${CMAKE_RELWITHDEBINFO_POSTFIX}.pdb DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples CONFIGURATIONS RelWithDebInfo)
|
||||
INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_TARGETNAME}${CMAKE_DEBUG_POSTFIX}.pdb DESTINATION share/OpenSceneGraph/bin COMPONENT openscenegraph-examples CONFIGURATIONS Debug)
|
||||
ENDIF(MSVC)
|
||||
ENDIF(APPLE)
|
||||
|
||||
ENDMACRO(SETUP_EXAMPLE)
|
||||
|
||||
74
NEWS.txt
74
NEWS.txt
@@ -1,72 +1,58 @@
|
||||
OSG News
|
||||
========
|
||||
|
||||
OpenSceneGraph 3.4.1 release is maintaince release that provide build/runtime improvements and better GLES support
|
||||
PERTHSHIRE, Scotland - 28th August 2017 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.4.1, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.4 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.4 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
|
||||
Updates include:
|
||||
|
||||
* Improves to GLES support across platforms
|
||||
* Full support for osgText and on screen stats across all platfroms, including GLES2 and core pofile
|
||||
* Build fixes to allow compilation against recent 3rd party depdendency changes
|
||||
* Range of runtime fixes
|
||||
= OpenSceneGraph 3.2.2 maintance release provides a number of bug and build fixes over the 3.2.1 stable release
|
||||
|
||||
Downloads and Licensing:
|
||||
PERTHSHIRE, Scotland - 4th August 2015 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.2.2, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.2.2 is written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.2.2 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
|
||||
|
||||
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the Downloads section of the openscenegraph.org website.
|
||||
=== Open-source development delivers industry-leading features and performance ===
|
||||
The OpenSceneGraph 3.2.2 stable release is the culmination of 16 years of work by the open-source community that has grown up around the project. This point release is fully binary compatible with the 3.2.0 and 3.2.1 stable releases. The changes made are focused on addressing bugs and improving build support for latest compilers, OS updates and 3rd changes to Party Libraries.
|
||||
|
||||
OpenSceneGraph is released under the OpenSceneGraph Public License, which is based on the Lesser GNU Public License (LGPL), permitting the software to be used free of charge across the full spectrum of commercial and open-source applications. Furthermore, it allows both static and dynamic linking of the OpenSceneGraph libraries without restricting the licensing of the user's software.
|
||||
Professional support and services
|
||||
=== 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 project is backed up with professional services by OpenSceneGraph Professional Services, based in Scotland, and a range of Contractors from around the world. Services available include:
|
||||
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.
|
||||
|
||||
Confidential Professional Support
|
||||
Bespoke development
|
||||
Consultancy
|
||||
Training
|
||||
=== Professional support and services ===
|
||||
OpenSceneGraph project is backed up with professional services by [http://www.openscenegraph.com OpenSceneGraph Professional Services], based in Scotland, and [http://www.alphapixel.com AlphaPixel] based in the USA, and a range of [wiki:Community/Contractors Contractors] from around the world. Services available include:
|
||||
|
||||
Community support and contributions:
|
||||
* 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 562 individuals from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.
|
||||
The OpenSceneGraph project owes a great deal to the community for its development and support, in particular we wish to thank the [http://www.openscenegraph.org/index.php/about/197-contributors-to-openscenegraph-3-2-2 individuals] from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.
|
||||
|
||||
|
||||
|
||||
= OpenSceneGraph 3.2.1 stable release provides a number of bug and build fixes to the 3.2.0 stable release
|
||||
|
||||
PERTHSHIRE, Scotland - 4th July 2014 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.2.1, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.2 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.2 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
|
||||
|
||||
OpenSceneGraph 3.4 release introduces shader composition, new osgUI library, displacement mapping, volume rendering, lua scripting support and much more
|
||||
PERTHSHIRE, Scotland - 12th August 2015 - OpenSceneGraph Professional Services announces the release of OpenSceneGraph 3.4, the industry's leading open-source scene graph technology, designed to accelerate application development and improve 3D graphics performance. OpenSceneGraph 3.4 written entirely in Standard C++ and built upon OpenGL, offers developers working in the visual simulation, game development, virtual reality, scientific visualization and modeling markets - a real-time visualization tool which eclipses commercial scene graph toolkits in functionality, stability and performance. OpenSceneGraph 3.4 runs on all Microsoft Windows platforms, Apple OS/X, IOS, GNU/Linux, Android, IRIX, Solaris, HP-UX, AIX and FreeBSD operating systems.
|
||||
Updates include:
|
||||
=== 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.
|
||||
|
||||
* New #pragma(tic) composition shader functionality built into the core OSG that provides a easy to use yet flexible scheme for controlling and composing shaders at runtime levering GLSL support for #define and #pragma.
|
||||
* New osgTerrain::DisplacementMappingTechnique to uses vertex, geometry and fragment shader based displacement mapping technique that dramatically lowers the CPU and GPU memory footprint and bandwidth needs for the same visual quality. The new scheme enables paged terrain that work robustly on smaller hardware, or with far higher loads without framedrops. This new technique levels #pragma(tic) shader composition to enable one to toggle on/off features in the shaders at runtime in a way that is as convenient to use as toggle modes in a fixed function pipeline scene graph.
|
||||
* New osgVolume::MultipassTechique that uses multipass rendering and shaders to enable seamless mixing of traditional 3D geometry and volumes, support for geometry hulls that constrain where the volume should be rendered as well as improving the ray tracing shaders so that they are both faster and have higher visual quality than the previous generation of ray traced shaders supported by OSG-3.2 releases and before.
|
||||
* New osgDB::Classiterface class that provides an easy to use mechanism for introspection of scene graph classes, allowing one to get, set properties and invoke methods in a generic way, making the task of integrating 3rd prarty tools such as scripting languages straight forward.
|
||||
* New Lua scripting support via a plugin that integrates Lua 5.2.3 and the OSG via the OSG's native serialization codes.
|
||||
* New osgUI NodeKit, that enables User Interface elements to be placed directly into 3D scene graph. The classes are fully scriptable so you create create UI and behaviours all within lua scripts.
|
||||
* Improvements to OpenGL ES 1.1, ES 2.0 and ES3.0 support, including platform specific extensions
|
||||
* Improvements to OpenGL 4.x support with a range of new extensions support
|
||||
* Updates to osgQt to support Qt5 and provide better support for Qt4
|
||||
=== Downloads and Licensing ===
|
||||
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the [http://www.openscenegraph.org/index.php/download-section/stable-releases Downloads] section of the openscenegraph.org website.
|
||||
|
||||
Downloads and Licensing:
|
||||
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.
|
||||
|
||||
OpenSceneGraph is open-source, so full source code is provided, and can be copied, modified and used free of charge for commercial and non-commercial use. Access to the source allows end users greater flexibility in how they develop, debug and deploy their applications. They gain productivity and freedom by being able to leverage the tool chain in accordance with their own release cycles. Downloads of binaries and source can be found in the Downloads section of the openscenegraph.org website.
|
||||
=== 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:
|
||||
|
||||
OpenSceneGraph is released under the OpenSceneGraph Public License, which is based on the Lesser GNU Public License (LGPL), permitting the software to be used free of charge across the full spectrum of commercial and open-source applications. Furthermore, it allows both static and dynamic linking of the OpenSceneGraph libraries without restricting the licensing of the user's software.
|
||||
Professional support and services
|
||||
|
||||
OpenSceneGraph project is backed up with professional services by OpenSceneGraph Professional Services, based in Scotland, and a range of Contractors from around the world. Services available include:
|
||||
|
||||
Confidential Professional Support
|
||||
Bespoke development
|
||||
Consultancy
|
||||
Training
|
||||
|
||||
Community support and contributions:
|
||||
* Confidential Professional Support
|
||||
* Bespoke development
|
||||
* Consultancy
|
||||
* Training
|
||||
|
||||
=== Community support and contributions ===
|
||||
The diverse and growing community of over 5000 developers is centred around the public osg-users mailing list/forum, where members discuss how best to use OpenSceneGraph, provide mutual support, and coordinate development of new features and bug fixes. Members of this community come from many different countries with backgrounds ranging from some of the world's largest aerospace companies, game companies, and visual simulation specialists to university researchers, students and hobbyists.
|
||||
|
||||
The OpenSceneGraph project owes a great deal to the community for its development and support, in particular we wish to thank the 550 individuals from around the world that have directly contributed to the development and refinement of the OpenSceneGraph code base.
|
||||
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.
|
||||
|
||||
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
15
README.txt
15
README.txt
@@ -23,7 +23,7 @@ more indepth instructions.
|
||||
|
||||
Robert Osfield.
|
||||
Project Lead.
|
||||
28th August 2017.
|
||||
4th July 2014.
|
||||
|
||||
--
|
||||
|
||||
@@ -43,12 +43,13 @@ OpenSceneGraph's CMake build can be found at:
|
||||
http://www.openscenegraph.org/projects/osg/wiki/Build/CMake
|
||||
|
||||
Under unices (i.e. Linux, IRIX, Solaris, Free-BSD, HP-Ux, AIX, OSX)
|
||||
use the cmake or ccmake command-line utils. Note that cmake . defaults
|
||||
to building Release to ensure that you get the best performance from
|
||||
your final libraries/applications.
|
||||
use the cmake or ccmake command-line utils, or use the included tiny
|
||||
configure script that'll run cmake for you. The configure script
|
||||
simply runs 'cmake . -DCMAKE_BUILD_TYPE=Release' to ensure that you
|
||||
get the best performance from your final libraries/applications.
|
||||
|
||||
cd OpenSceneGraph
|
||||
cmake .
|
||||
./configure
|
||||
make
|
||||
sudo make install
|
||||
|
||||
@@ -61,7 +62,7 @@ directory alongside the OpenSceneGraph use:
|
||||
|
||||
mkdir build
|
||||
cd build
|
||||
cmake ../OpenSceneGraph
|
||||
cmake ../OpenSceneGraph -DCMAKE_BUILD_TYPE=Release
|
||||
make
|
||||
sudo make install
|
||||
|
||||
@@ -166,7 +167,7 @@ Section 3. Release notes on iOS build, by Thomas Hoghart
|
||||
This will give us the static build we need for iPhone.
|
||||
* Disable OSG_GL1_AVAILABLE, OSG_GL2_AVAILABLE, OSG_GL3_AVAILABLE,
|
||||
OSG_GL_DISPLAYLISTS_AVAILABLE, OSG_GL_VERTEX_FUNCS_AVAILABLE
|
||||
* Enable OSG_GLES1_AVAILABLE *OR* OSG_GLES2_AVAILABLE *OR* OSG_GLES3_AVAILABLE (GLES3 will enable GLES2 features)
|
||||
* Enable OSG_GLES1_AVAILABLE *OR* OSG_GLES2_AVAILABLE
|
||||
* Ensure OSG_WINDOWING_SYSTEM is set to IOS
|
||||
* Change FREETYPE include and library paths to an iPhone version
|
||||
(OpenFrameworks has one bundled with its distribution)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
*
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* freely and without restriction, both in commercial and non commercial applications,
|
||||
* as long as this copyright notice is maintained.
|
||||
*
|
||||
*
|
||||
* This application 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.
|
||||
@@ -26,12 +26,12 @@ 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 an application for collecting a set of separate files into a single archive file that can be later read in OSG applications..");
|
||||
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
|
||||
|
||||
|
||||
// if user request help write it out to cout.
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
@@ -49,14 +49,14 @@ int main( int argc, char **argv )
|
||||
{
|
||||
insert = true;
|
||||
}
|
||||
|
||||
|
||||
bool extract = false;
|
||||
while (arguments.read("-e") || arguments.read("--extract"))
|
||||
{
|
||||
extract = true;
|
||||
}
|
||||
|
||||
bool list = false;
|
||||
|
||||
bool list = false;
|
||||
while (arguments.read("-l") || arguments.read("--list"))
|
||||
{
|
||||
list = true;
|
||||
@@ -93,7 +93,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// any option left unread are converted into errors to write out later.
|
||||
arguments.reportRemainingOptionsAsUnrecognized();
|
||||
|
||||
@@ -103,7 +103,7 @@ int main( int argc, char **argv )
|
||||
arguments.writeErrorMessages(std::cout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if (archiveFilename.empty())
|
||||
{
|
||||
std::cout<<"Please specify an archive name using --archive filename"<<std::endl;
|
||||
@@ -115,7 +115,7 @@ int main( int argc, char **argv )
|
||||
std::cout<<"Please specify an operation on the archive, either --insert, --extract or --list"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if (insert && extract)
|
||||
{
|
||||
std::cout<<"Cannot insert and extract files from the archive at one time, please use either --insert or --extract."<<std::endl;
|
||||
@@ -127,7 +127,7 @@ int main( int argc, char **argv )
|
||||
if (insert)
|
||||
{
|
||||
archive = osgDB::openArchive(archiveFilename, osgDB::Archive::WRITE);
|
||||
|
||||
|
||||
if (archive.valid())
|
||||
{
|
||||
for (FileNameList::iterator itr=files.begin();
|
||||
@@ -135,7 +135,7 @@ int main( int argc, char **argv )
|
||||
++itr)
|
||||
{
|
||||
std::cout<<"reading "<<*itr<<std::endl;
|
||||
osg::ref_ptr<osg::Object> obj = osgDB::readRefObjectFile(*itr);
|
||||
osg::ref_ptr<osg::Object> obj = osgDB::readObjectFile(*itr);
|
||||
if (obj.valid())
|
||||
{
|
||||
std::cout<<" write to archive "<<*itr<<std::endl;
|
||||
@@ -152,10 +152,10 @@ int main( int argc, char **argv )
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
archive = osgDB::openArchive(archiveFilename, osgDB::Archive::READ);
|
||||
|
||||
|
||||
if (extract && archive.valid())
|
||||
{
|
||||
for (FileNameList::iterator itr=files.begin();
|
||||
@@ -175,7 +175,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
if (list && archive.valid())
|
||||
{
|
||||
{
|
||||
std::cout<<"List of files in archive:"<<std::endl;
|
||||
osgDB::Archive::FileNameList fileNames;
|
||||
if (archive->getFileNames(fileNames))
|
||||
@@ -187,11 +187,11 @@ int main( int argc, char **argv )
|
||||
std::cout<<" "<<*itr<<std::endl;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
std::cout<<std::endl;
|
||||
std::cout<<"Master file "<<archive->getMasterFileName()<<std::endl;
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -157,7 +157,6 @@ public:
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::State> state = new osg::State;
|
||||
state->initializeExtensionProcs();
|
||||
|
||||
for(TextureSet::iterator itr=_textureSet.begin();
|
||||
itr!=_textureSet.end();
|
||||
@@ -175,7 +174,7 @@ public:
|
||||
{
|
||||
texture->setInternalFormatMode(_internalFormatMode);
|
||||
|
||||
// need to disable the unref after apply, otherwise the image could go out of scope.
|
||||
// need to disable the unref after apply, other the image could go out of scope.
|
||||
bool unrefImageDataAfterApply = texture->getUnRefImageDataAfterApply();
|
||||
texture->setUnRefImageDataAfterApply(false);
|
||||
|
||||
@@ -374,6 +373,16 @@ public:
|
||||
++_numStateSetRemoved;
|
||||
}
|
||||
|
||||
for(unsigned int i=0;i<node.getNumDrawables();++i)
|
||||
{
|
||||
osg::Drawable* drawable = node.getDrawable(i);
|
||||
if (drawable && drawable->getStateSet())
|
||||
{
|
||||
drawable->setStateSet(0);
|
||||
++_numStateSetRemoved;
|
||||
}
|
||||
}
|
||||
|
||||
traverse(node);
|
||||
}
|
||||
|
||||
@@ -772,7 +781,7 @@ int main( int argc, char **argv )
|
||||
|
||||
osg::Timer_t startTick = osg::Timer::instance()->tick();
|
||||
|
||||
osg::ref_ptr<osg::Node> root = osgDB::readRefNodeFiles(fileNames);
|
||||
osg::ref_ptr<osg::Node> root = osgDB::readNodeFiles(fileNames);
|
||||
|
||||
if (root.valid())
|
||||
{
|
||||
@@ -808,7 +817,7 @@ int main( int argc, char **argv )
|
||||
root->accept(av);
|
||||
}
|
||||
|
||||
// optimize the scene graph, remove redundant nodes and state etc.
|
||||
// optimize the scene graph, remove rendundent nodes and state etc.
|
||||
osgUtil::Optimizer optimizer;
|
||||
optimizer.optimize(root.get());
|
||||
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
*
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* freely and without restriction, both in commercial and non commercial applications,
|
||||
* as long as this copyright notice is maintained.
|
||||
*
|
||||
*
|
||||
* This application 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.
|
||||
@@ -46,20 +46,20 @@ struct Extents
|
||||
_maxLevel(maxLevel),
|
||||
_min(minX, minY),
|
||||
_max(maxX, maxY) {}
|
||||
|
||||
|
||||
Extents(const Extents& extents):
|
||||
_maxLevel(extents._maxLevel),
|
||||
_min(extents._min),
|
||||
_max(extents._max) {}
|
||||
|
||||
|
||||
Extents& operator = (const Extents& rhs)
|
||||
{
|
||||
if (&rhs == this) return *this;
|
||||
|
||||
|
||||
_maxLevel = rhs._maxLevel;
|
||||
_min = rhs._min;
|
||||
_max = rhs._max;
|
||||
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
@@ -69,10 +69,10 @@ struct Extents
|
||||
osg::notify(osg::INFO)<<" _maxLevel="<<_maxLevel<<", _min="<<_min<<" _max="<<_max<<std::endl;
|
||||
|
||||
if (level>_maxLevel) return false;
|
||||
|
||||
|
||||
osg::Vec2d union_min, union_max;
|
||||
|
||||
// handle mins
|
||||
// handle mins
|
||||
if (_min.x()!=DBL_MAX && in_min.x()!=DBL_MAX)
|
||||
{
|
||||
// both _min.x() and in_min.x() are defined so use max of two
|
||||
@@ -95,7 +95,7 @@ struct Extents
|
||||
union_min.y() = _min.y()<in_min.y() ? _min.y() : in_min.y();
|
||||
}
|
||||
|
||||
// handle maxs
|
||||
// handle maxs
|
||||
if (_max.x()!=-DBL_MAX && in_max.x()!=-DBL_MAX)
|
||||
{
|
||||
// both _max.x() and in_max.x() are defined so use max of two
|
||||
@@ -121,7 +121,7 @@ struct Extents
|
||||
bool result = union_min.x()<union_max.x() && union_min.y()<union_max.y() ;
|
||||
|
||||
osg::notify(osg::INFO)<<" union_min="<<union_min<<" union_max="<<union_max<<" result = "<<result<<std::endl;
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -140,7 +140,7 @@ public:
|
||||
_currentLevel(0) {}
|
||||
|
||||
void setFileCache(osgDB::FileCache* fileCache) { _fileCache = fileCache; }
|
||||
|
||||
|
||||
void addExtents(unsigned int maxLevel, double minX, double minY, double maxX, double maxY)
|
||||
{
|
||||
_extentsList.push_back(Extents(maxLevel, minX, minY, maxX, maxY));
|
||||
@@ -154,16 +154,16 @@ public:
|
||||
void apply(osg::CoordinateSystemNode& cs)
|
||||
{
|
||||
_csnStack.push_back(&cs);
|
||||
|
||||
|
||||
if (!s_ExitApplication) traverse(cs);
|
||||
|
||||
_csnStack.pop_back();
|
||||
}
|
||||
|
||||
|
||||
void apply(osg::Group& group)
|
||||
{
|
||||
if (s_ExitApplication) return;
|
||||
|
||||
|
||||
osgTerrain::TerrainTile* terrainTile = dynamic_cast<osgTerrain::TerrainTile*>(&group);
|
||||
osgTerrain::Locator* locator = terrainTile ? terrainTile->getLocator() : 0;
|
||||
if (locator)
|
||||
@@ -196,7 +196,7 @@ public:
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
traverse(group);
|
||||
}
|
||||
|
||||
@@ -217,11 +217,11 @@ public:
|
||||
void apply(osg::PagedLOD& plod)
|
||||
{
|
||||
if (s_ExitApplication) return;
|
||||
|
||||
|
||||
++_currentLevel;
|
||||
|
||||
|
||||
initBound();
|
||||
|
||||
|
||||
// first compute the bounds of this subgraph
|
||||
for(unsigned int i=0; i<plod.getNumFileNames(); ++i)
|
||||
{
|
||||
@@ -230,7 +230,7 @@ public:
|
||||
traverse(plod);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (intersects())
|
||||
{
|
||||
for(unsigned int i=0; i<plod.getNumFileNames(); ++i)
|
||||
@@ -239,7 +239,7 @@ public:
|
||||
if (!plod.getFileName(i).empty())
|
||||
{
|
||||
std::string filename;
|
||||
if (!plod.getDatabasePath().empty())
|
||||
if (!plod.getDatabasePath().empty())
|
||||
{
|
||||
filename = plod.getDatabasePath() + plod.getFileName(i);
|
||||
}
|
||||
@@ -255,10 +255,10 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
--_currentLevel;
|
||||
}
|
||||
|
||||
|
||||
void apply(osg::Geode& geode)
|
||||
{
|
||||
for(unsigned int i=0; i<geode.getNumDrawables(); ++i)
|
||||
@@ -271,10 +271,10 @@ public:
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Node> readNodeFileAndWriteToCache(const std::string& filename)
|
||||
|
||||
osg::Node* readNodeFileAndWriteToCache(const std::string& filename)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> node = 0;
|
||||
osg::Node* node = 0;
|
||||
if (_fileCache.valid() )
|
||||
{
|
||||
if (_fileCache->existsInCache(filename))
|
||||
@@ -286,7 +286,7 @@ public:
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl;
|
||||
|
||||
node = osgDB::readRefNodeFile(filename);
|
||||
node = osgDB::readNodeFile(filename);
|
||||
if (node)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"write to FileCache : "<<filename<<std::endl;
|
||||
@@ -298,7 +298,7 @@ public:
|
||||
else
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"reading : "<<filename<<std::endl;
|
||||
node = osgDB::readRefNodeFile(filename);
|
||||
node = osgDB::readNodeFile(filename);
|
||||
}
|
||||
return node;
|
||||
}
|
||||
@@ -307,18 +307,18 @@ public:
|
||||
protected:
|
||||
|
||||
inline void pushMatrix(osg::Matrix& matrix) { _matrixStack.push_back(matrix); }
|
||||
|
||||
|
||||
inline void popMatrix() { _matrixStack.pop_back(); }
|
||||
|
||||
void convertXYZToLatLongHeight(osg::EllipsoidModel* em, osg::Vec3d& v)
|
||||
{
|
||||
em->convertXYZToLatLongHeight(v.x(), v.y(), v.z(),
|
||||
v.y(), v.x(), v.z());
|
||||
|
||||
|
||||
v.x() = osg::RadiansToDegrees(v.x());
|
||||
v.y() = osg::RadiansToDegrees(v.y());
|
||||
}
|
||||
|
||||
|
||||
void initBound()
|
||||
{
|
||||
_min.set(DBL_MAX, DBL_MAX);
|
||||
@@ -332,16 +332,16 @@ protected:
|
||||
if (v.x() > _max.x()) _max.x() = v.x();
|
||||
if (v.y() > _max.y()) _max.y() = v.y();
|
||||
}
|
||||
|
||||
|
||||
void updateBound(osg::Vec3Array& vertices)
|
||||
{
|
||||
// set up matrix
|
||||
osg::Matrix matrix;
|
||||
if (!_matrixStack.empty()) matrix = _matrixStack.back();
|
||||
|
||||
|
||||
// set up ellipsoid model
|
||||
osg::EllipsoidModel* em = !_csnStack.empty() ? _csnStack.back()->getEllipsoidModel() : 0;
|
||||
|
||||
|
||||
for(osg::Vec3Array::iterator itr = vertices.begin();
|
||||
itr != vertices.end();
|
||||
++itr)
|
||||
@@ -352,7 +352,7 @@ protected:
|
||||
updateBound(v);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool intersects()
|
||||
{
|
||||
osg::notify(osg::INFO)<<"intersects() _min = "<<_min<<" _max = "<<_max<<std::endl;
|
||||
@@ -362,7 +362,7 @@ protected:
|
||||
{
|
||||
if (itr->intersects(_currentLevel, _min, _max)) return true;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -376,7 +376,7 @@ protected:
|
||||
unsigned int _currentLevel;
|
||||
MatrixStack _matrixStack;
|
||||
CSNStack _csnStack;
|
||||
|
||||
|
||||
osg::Vec2d _min;
|
||||
osg::Vec2d _max;
|
||||
};
|
||||
@@ -403,7 +403,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 an application for collecting a set of separate files into a single archive file that can be later read in OSG applications..");
|
||||
@@ -412,21 +412,21 @@ int main( int argc, char **argv )
|
||||
arguments.getApplicationUsage()->addCommandLineOption("-e level minX minY maxX maxY","Read down to <level> across the extents minX, minY to maxY, maxY. Note, for geocentric datase X and Y are longitude and latitude respectively.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("-c directory","Shorthand for --file-cache directory.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--file-cache directory","Set directory as to place cache download files.");
|
||||
|
||||
|
||||
// if user request help write it out to cout.
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
arguments.getApplicationUsage()->write(std::cout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
LoadDataVisitor ldv;
|
||||
|
||||
std::string fileCachePath;
|
||||
while(arguments.read("--file-cache",fileCachePath) || arguments.read("-c",fileCachePath)) {}
|
||||
|
||||
|
||||
if (fileCachePath.empty())
|
||||
{
|
||||
{
|
||||
const char* env_fileCachePath = getenv("OSG_FILE_CACHE");
|
||||
if (env_fileCachePath)
|
||||
{
|
||||
@@ -439,7 +439,7 @@ int main( int argc, char **argv )
|
||||
std::cout<<"No path to the file cache defined, please set OSG_FILE_PATH env var, or use --file-cache <directory> to set a suitable directory for the file cache."<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
ldv.setFileCache(new osgDB::FileCache(fileCachePath));
|
||||
|
||||
unsigned int maxLevels = 0;
|
||||
@@ -447,14 +447,14 @@ int main( int argc, char **argv )
|
||||
{
|
||||
ldv.addExtents(maxLevels);
|
||||
}
|
||||
|
||||
|
||||
double minX, maxX, minY, maxY;
|
||||
while(arguments.read("-e",maxLevels, minX, minY, maxX, maxY))
|
||||
{
|
||||
ldv.addExtents(maxLevels, minX, minY, maxX, maxY);
|
||||
}
|
||||
|
||||
|
||||
|
||||
std::string filename;
|
||||
for(int i=1; i<arguments.argc(); ++i)
|
||||
{
|
||||
@@ -464,21 +464,21 @@ int main( int argc, char **argv )
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (filename.empty())
|
||||
|
||||
if (filename.empty())
|
||||
{
|
||||
std::cout<<"No file to load specified."<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Node> loadedModel = ldv.readNodeFileAndWriteToCache(filename);
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout<<"No data loaded, please specify a database to load"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
loadedModel->accept(ldv);
|
||||
|
||||
if (s_ExitApplication)
|
||||
|
||||
@@ -260,22 +260,7 @@ const char* invalidNames[] =
|
||||
"PushStackValueVisitor",
|
||||
"RayIntersector",
|
||||
"OpenSceneGraph-Data",
|
||||
"Node",
|
||||
"AlphaFunc",
|
||||
"CompositeViewer",
|
||||
"OpenSceneGraph-3",
|
||||
"DisplaySettings::SHADER_NONE",
|
||||
"CodeDocs",
|
||||
"Mon",
|
||||
"Tue",
|
||||
"Wed",
|
||||
"Fri",
|
||||
"Sat",
|
||||
"Sun",
|
||||
"I",
|
||||
"TriangleFunctor",
|
||||
"PrimitiveFunctor",
|
||||
"OpenMW"
|
||||
"Node"
|
||||
};
|
||||
|
||||
|
||||
@@ -496,11 +481,7 @@ TypoCorrection typoCorrections[] =
|
||||
{"Ravsel", "Rav<EFBFBD>elj"},
|
||||
{"Ravselj", "Rav<EFBFBD>elj"},
|
||||
{"Janik", "Jannik"},
|
||||
{"Viganò", "Vigan<EFBFBD>"},
|
||||
{"Vigano", "Vigan<EFBFBD>"},
|
||||
{"Frashud", "Farshid"},
|
||||
{"Dannahauer","Dannahauer"},
|
||||
{"Sando","Sandro"}
|
||||
{"Viganò", "Vigan<EFBFBD>"}
|
||||
};
|
||||
|
||||
|
||||
@@ -514,16 +495,6 @@ struct NameCorrection
|
||||
|
||||
NameCorrection nameCorrections[] =
|
||||
{
|
||||
{"LaurensVoerman","Meta_Shape",
|
||||
"Laurens", "Voerman"},
|
||||
{"LaurensVoerman","OpenCascade",
|
||||
"Laurens", "Voerman"},
|
||||
{"LaurensVoerman","Fri",
|
||||
"Laurens", "Voerman"},
|
||||
{"LaurensVoerman","",
|
||||
"Laurens", "Voerman"},
|
||||
{"Laurens","Loerman",
|
||||
"Laurens", "Voerman"},
|
||||
{"FrancoisTigeot","",
|
||||
"Francois", "Tigeot"},
|
||||
{"Juan","Manuel",
|
||||
@@ -691,15 +662,7 @@ NameCorrection nameCorrections[] =
|
||||
{"Bradley", "Baker",
|
||||
"Bradley", "Baker Searles"},
|
||||
{"PawelKsiezopolski", "",
|
||||
"Pawel", "Ksiezopolski"},
|
||||
{"Albert", "Luaces",
|
||||
"Alberto","Luaces"},
|
||||
{"KOS", "",
|
||||
"Konstantin","Matveyev"},
|
||||
{"WeSee", "",
|
||||
"Alois", "Wismer"},
|
||||
{"We", "See",
|
||||
"Alois", "Wismer"}
|
||||
"Pawel", "Ksiezopolski"}
|
||||
};
|
||||
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
// The majority of the application is dedicated to building the
|
||||
// current contributors list by parsing the ChangeLog, it just takes
|
||||
// current contribitors list by parsing the ChangeLog, it just takes
|
||||
// one line in the main itself to report the version number.
|
||||
|
||||
#include <set>
|
||||
|
||||
@@ -14,7 +14,6 @@
|
||||
#include <osg/CoordinateSystemNode>
|
||||
|
||||
#include <osg/Switch>
|
||||
#include <osg/Types>
|
||||
#include <osgText/Text>
|
||||
|
||||
#include <osgViewer/Viewer>
|
||||
@@ -32,7 +31,113 @@
|
||||
#include <osgGA/Device>
|
||||
|
||||
#include <iostream>
|
||||
#include <stdint.h>
|
||||
|
||||
#include <osg/GLExtensions>
|
||||
|
||||
#ifndef GL_ARB_sync
|
||||
#define GL_MAX_SERVER_WAIT_TIMEOUT 0x9111
|
||||
#define GL_OBJECT_TYPE 0x9112
|
||||
#define GL_SYNC_CONDITION 0x9113
|
||||
#define GL_SYNC_STATUS 0x9114
|
||||
#define GL_SYNC_FLAGS 0x9115
|
||||
#define GL_SYNC_FENCE 0x9116
|
||||
#define GL_SYNC_GPU_COMMANDS_COMPLETE 0x9117
|
||||
#define GL_UNSIGNALED 0x9118
|
||||
#define GL_SIGNALED 0x9119
|
||||
#define GL_ALREADY_SIGNALED 0x911A
|
||||
#define GL_TIMEOUT_EXPIRED 0x911B
|
||||
#define GL_CONDITION_SATISFIED 0x911C
|
||||
#define GL_WAIT_FAILED 0x911D
|
||||
#define GL_SYNC_FLUSH_COMMANDS_BIT 0x00000001
|
||||
#define GL_TIMEOUT_IGNORED 0xFFFFFFFFFFFFFFFFull
|
||||
#endif
|
||||
|
||||
class MySwapBuffersCallback : public osg::GraphicsContext::SwapCallback
|
||||
{
|
||||
public:
|
||||
MySwapBuffersCallback():
|
||||
_extensionInitialized(false),
|
||||
_glFenceSync(0),
|
||||
_glIsSync(0),
|
||||
_glDeleteSync(0),
|
||||
_glClientWaitSync(0),
|
||||
_glWaitSync(0),
|
||||
_glGetInteger64v(0),
|
||||
_glGetSynciv(0),
|
||||
_previousSync(0)
|
||||
{
|
||||
OSG_NOTICE<<"Created Swap callback."<<std::endl;
|
||||
}
|
||||
|
||||
void setUpExtensions()
|
||||
{
|
||||
_extensionInitialized = true;
|
||||
osg::setGLExtensionFuncPtr(_glFenceSync, "glFenceSync");
|
||||
osg::setGLExtensionFuncPtr(_glIsSync, "glIsSync");
|
||||
osg::setGLExtensionFuncPtr(_glDeleteSync, "glDeleteSync");
|
||||
osg::setGLExtensionFuncPtr(_glClientWaitSync, "glClientWaitSync");
|
||||
osg::setGLExtensionFuncPtr(_glWaitSync, "glWaitSync");
|
||||
osg::setGLExtensionFuncPtr(_glGetInteger64v, "glGetInteger64v");
|
||||
osg::setGLExtensionFuncPtr(_glGetSynciv, "glGetSynciv");
|
||||
}
|
||||
|
||||
virtual void swapBuffersImplementation(osg::GraphicsContext* gc)
|
||||
{
|
||||
// OSG_NOTICE<<"Before swap - place to do swap ready sync"<<std::endl;
|
||||
gc->swapBuffersImplementation();
|
||||
//glFinish();
|
||||
|
||||
if (!_extensionInitialized) setUpExtensions();
|
||||
|
||||
if (_glClientWaitSync)
|
||||
{
|
||||
if (_previousSync)
|
||||
{
|
||||
unsigned int num_seconds = 1;
|
||||
GLuint64 timeout = num_seconds * ((GLuint64)1000 * 1000 * 1000);
|
||||
_glClientWaitSync(_previousSync, 0, timeout);
|
||||
|
||||
_glDeleteSync(_previousSync);
|
||||
}
|
||||
|
||||
_previousSync = _glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||
}
|
||||
//gc->getState()->checkGLErrors("after glWaitSync");
|
||||
|
||||
//OSG_NOTICE<<"After swap"<<std::endl;
|
||||
}
|
||||
|
||||
#ifdef _WIN32
|
||||
typedef __int64 GLint64;
|
||||
typedef unsigned __int64 GLuint64;
|
||||
#else
|
||||
typedef int64_t GLint64;
|
||||
typedef uint64_t GLuint64;
|
||||
#endif
|
||||
|
||||
typedef struct __GLsync *GLsync;
|
||||
|
||||
typedef GLsync (GL_APIENTRY * PFNGLFENCESYNCPROC) (GLenum condition, GLbitfield flags);
|
||||
typedef GLboolean (GL_APIENTRY * PFNGLISSYNCPROC) (GLsync sync);
|
||||
typedef void (GL_APIENTRY * PFNGLDELETESYNCPROC) (GLsync sync);
|
||||
typedef GLenum (GL_APIENTRY * PFNGLCLIENTWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
|
||||
typedef void (GL_APIENTRY * PFNGLWAITSYNCPROC) (GLsync sync, GLbitfield flags, GLuint64 timeout);
|
||||
typedef void (GL_APIENTRY * PFNGLGETINTEGER64VPROC) (GLenum pname, GLint64 *params);
|
||||
typedef void (GL_APIENTRY * PFNGLGETSYNCIVPROC) (GLsync sync, GLenum pname, GLsizei bufSize, GLsizei *length, GLint *values);
|
||||
|
||||
bool _extensionInitialized;
|
||||
|
||||
PFNGLFENCESYNCPROC _glFenceSync;
|
||||
PFNGLISSYNCPROC _glIsSync;
|
||||
PFNGLDELETESYNCPROC _glDeleteSync;
|
||||
PFNGLCLIENTWAITSYNCPROC _glClientWaitSync;
|
||||
PFNGLWAITSYNCPROC _glWaitSync;
|
||||
PFNGLGETINTEGER64VPROC _glGetInteger64v;
|
||||
PFNGLGETSYNCIVPROC _glGetSynciv;
|
||||
|
||||
GLsync _previousSync;
|
||||
};
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
@@ -87,10 +192,10 @@ int main(int argc, char** argv)
|
||||
std::string device;
|
||||
while(arguments.read("--device", device))
|
||||
{
|
||||
osg::ref_ptr<osgGA::Device> dev = osgDB::readRefFile<osgGA::Device>(device);
|
||||
osg::ref_ptr<osgGA::Device> dev = osgDB::readFile<osgGA::Device>(device);
|
||||
if (dev.valid())
|
||||
{
|
||||
viewer.addDevice(dev);
|
||||
viewer.addDevice(dev.get());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -127,6 +232,8 @@ int main(int argc, char** argv)
|
||||
viewer.setCameraManipulator( keyswitchManipulator.get() );
|
||||
}
|
||||
|
||||
bool doArbSync = arguments.read("--sync");
|
||||
|
||||
// add the state manipulator
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
|
||||
@@ -152,7 +259,7 @@ int main(int argc, char** argv)
|
||||
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
|
||||
|
||||
// load the data
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
@@ -172,12 +279,24 @@ int main(int argc, char** argv)
|
||||
|
||||
// optimize the scene graph, remove redundant nodes and state etc.
|
||||
osgUtil::Optimizer optimizer;
|
||||
optimizer.optimize(loadedModel);
|
||||
optimizer.optimize(loadedModel.get());
|
||||
|
||||
viewer.setSceneData(loadedModel);
|
||||
viewer.setSceneData( loadedModel.get() );
|
||||
|
||||
viewer.realize();
|
||||
|
||||
if (doArbSync)
|
||||
{
|
||||
osgViewer::ViewerBase::Contexts contexts;
|
||||
viewer.getContexts(contexts);
|
||||
for(osgViewer::ViewerBase::Contexts::iterator itr = contexts.begin();
|
||||
itr != contexts.end();
|
||||
++itr)
|
||||
{
|
||||
(*itr)->setSwapCallback(new MySwapBuffersCallback);
|
||||
}
|
||||
}
|
||||
|
||||
return viewer.run();
|
||||
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ IF (NOT DYNAMIC_OPENSCENEGRAPH)
|
||||
osgdb_openflight
|
||||
osgdb_obj
|
||||
)
|
||||
|
||||
|
||||
SET(TARGET_ADDED_LIBRARIES ${TARGET_ADDED_LIBRARIES}
|
||||
osgdb_deprecated_osg osgdb_deprecated_osgparticle osgdb_deprecated_osganimation
|
||||
osgdb_deprecated_osgfx osgdb_deprecated_osgsim osgdb_deprecated_osgtext
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
#if defined(__linux)
|
||||
#include <unistd.h>
|
||||
#include <linux/sockios.h>
|
||||
#elif defined(__FreeBSD__) || defined(__DragonFly__) || defined(__FreeBSD_kernel__)
|
||||
#elif defined(__FreeBSD__) || defined(__DragonFly__)
|
||||
#include <unistd.h>
|
||||
#include <sys/sockio.h>
|
||||
#elif defined(__sgi)
|
||||
@@ -41,8 +41,6 @@
|
||||
#include <net/soioctl.h>
|
||||
#elif defined(__CYGWIN__)
|
||||
#include <unistd.h>
|
||||
#elif defined (__GNU__)
|
||||
#include <unistd.h>
|
||||
#elif defined(__sun)
|
||||
#include <unistd.h>
|
||||
#include <sys/sockio.h>
|
||||
@@ -204,8 +202,7 @@ void DataConverter::write(CameraPacket& cameraPacket)
|
||||
itr != cameraPacket._events.end();
|
||||
++itr)
|
||||
{
|
||||
osgGA::GUIEventAdapter* event = (*itr)->asGUIEventAdapter();
|
||||
if (event) write(*(event));
|
||||
write(*(*itr));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -252,7 +249,7 @@ void CameraPacket::writeEventQueue(osgViewer::Viewer& viewer)
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// Receiver
|
||||
// Reciever
|
||||
//
|
||||
Receiver::Receiver( void )
|
||||
{
|
||||
@@ -340,7 +337,7 @@ void Receiver::sync( void )
|
||||
}
|
||||
|
||||
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || \
|
||||
defined(__DragonFly__) || defined(__FreeBSD_kernel__) || defined(__GNU__)
|
||||
defined(__DragonFly__)
|
||||
socklen_t
|
||||
#else
|
||||
int
|
||||
|
||||
@@ -33,21 +33,21 @@ class Receiver
|
||||
{
|
||||
public :
|
||||
|
||||
Receiver();
|
||||
~Receiver();
|
||||
Receiver();
|
||||
~Receiver();
|
||||
|
||||
// setBuffer defines the buffer into which the broadcasted
|
||||
// message will be received.
|
||||
void setBuffer( void *buffer, const unsigned int size );
|
||||
// setBuffer defines the buffer into which the broadcasted
|
||||
// message will be received.
|
||||
void setBuffer( void *buffer, const unsigned int size );
|
||||
|
||||
// Define what port to listen and bind to
|
||||
void setPort( const short port );
|
||||
// Define what port to listen and bind to
|
||||
void setPort( const short port );
|
||||
|
||||
// Sync does a blocking wait to recieve next message
|
||||
void sync( void );
|
||||
// Sync does a blocking wait to recieve next message
|
||||
void sync( void );
|
||||
|
||||
private :
|
||||
bool init( void );
|
||||
bool init( void );
|
||||
|
||||
private :
|
||||
#if defined (WIN32) && !defined(__CYGWIN__)
|
||||
@@ -72,25 +72,25 @@ class Broadcaster
|
||||
{
|
||||
public :
|
||||
|
||||
Broadcaster( void );
|
||||
~Broadcaster( void );
|
||||
Broadcaster( void );
|
||||
~Broadcaster( void );
|
||||
|
||||
// Set the broadcast port
|
||||
void setPort( const short port );
|
||||
// Set the broadcast port
|
||||
void setPort( const short port );
|
||||
|
||||
// Set the buffer to be broadcast
|
||||
void setBuffer( void *buffer, const unsigned int buffer_size );
|
||||
// Set the buffer to be broadcast
|
||||
void setBuffer( void *buffer, const unsigned int buffer_size );
|
||||
|
||||
// Set a recipient host. If this is used, the Broadcaster
|
||||
// no longer broadcasts, but rather directs UDP packets at
|
||||
// host.
|
||||
void setHost( const char *hostname );
|
||||
// Set a recipient host. If this is used, the Broadcaster
|
||||
// no longer broadcasts, but rather directs UDP packets at
|
||||
// host.
|
||||
void setHost( const char *hostname );
|
||||
|
||||
// Sync broadcasts the buffer
|
||||
void sync( void );
|
||||
// Sync broadcasts the buffer
|
||||
void sync( void );
|
||||
|
||||
private :
|
||||
bool init( void );
|
||||
bool init( void );
|
||||
|
||||
private :
|
||||
#if defined(WIN32) && !defined(__CYGWIN__)
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -46,16 +46,16 @@ public:
|
||||
|
||||
void setSnapImageOnNextFrame(bool flag) { _snapImageOnNextFrame = flag; }
|
||||
bool getSnapImageOnNextFrame() const { return _snapImageOnNextFrame; }
|
||||
|
||||
|
||||
virtual void operator () (const osg::Camera& camera) const
|
||||
{
|
||||
if (!_snapImageOnNextFrame) return;
|
||||
|
||||
|
||||
int x = static_cast<int>(camera.getViewport()->x());
|
||||
int y = static_cast<int>(camera.getViewport()->y());
|
||||
unsigned int width = static_cast<unsigned int>(camera.getViewport()->width());
|
||||
unsigned int height = static_cast<unsigned int>(camera.getViewport()->height());
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Image> image = new osg::Image;
|
||||
image->readPixels(x,y,width,height,
|
||||
GL_RGB,GL_UNSIGNED_BYTE);
|
||||
@@ -64,16 +64,16 @@ public:
|
||||
{
|
||||
osg::notify(osg::NOTICE) << "Saved screen image to `"<<_filename<<"`"<< std::endl;
|
||||
}
|
||||
|
||||
|
||||
_snapImageOnNextFrame = false;
|
||||
}
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
std::string _filename;
|
||||
mutable bool _snapImageOnNextFrame;
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
std::string ExportHTML::createFileName(const std::string& basename, unsigned int page, const std::string& ext)
|
||||
@@ -102,7 +102,7 @@ bool ExportHTML::write(osgPresentation::SlideEventHandler* seh, osgViewer::Viewe
|
||||
image_basename = osgDB::getNameLessExtension(filename);
|
||||
image_ext = ".jpg";
|
||||
}
|
||||
|
||||
|
||||
std::cout<<"Writing slides to "<<image_basename<<"_[slidenumber]"<<image_ext<<std::endl;
|
||||
|
||||
osg::ref_ptr<SnapImageDrawCallback> sidc = new SnapImageDrawCallback;
|
||||
@@ -169,7 +169,7 @@ bool ExportHTML::write(osgPresentation::SlideEventHandler* seh, osgViewer::Viewe
|
||||
}
|
||||
fout<<"</tr>"<<std::endl;
|
||||
fout<<"</table>"<<std::endl;
|
||||
fout<<"<img src=\""<<osgDB::getSimpleFileName(os.str())<<"\">"<<std::endl;
|
||||
fout<<"<img src=\""<<osgDB::getSimpleFileName(os.str())<<"\">"<<std::endl;
|
||||
fout<<"</html>"<<std::endl;
|
||||
}
|
||||
else
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -54,6 +54,11 @@ bool PointsEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActio
|
||||
return false;
|
||||
}
|
||||
|
||||
void PointsEventHandler::accept(osgGA::GUIEventHandlerVisitor& v)
|
||||
{
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
void PointsEventHandler::getUsage(osg::ApplicationUsage& usage) const
|
||||
{
|
||||
usage.addKeyboardMouseBinding("+","Increase point size");
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -22,23 +22,25 @@ class PointsEventHandler : public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
PointsEventHandler();
|
||||
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&);
|
||||
|
||||
|
||||
virtual void accept(osgGA::GUIEventHandlerVisitor& v);
|
||||
|
||||
void getUsage(osg::ApplicationUsage& usage) const;
|
||||
|
||||
|
||||
void setStateSet(osg::StateSet* stateset) { _stateset=stateset; }
|
||||
|
||||
|
||||
osg::StateSet* getStateSet() { return _stateset.get(); }
|
||||
|
||||
|
||||
const osg::StateSet* getStateSet() const { return _stateset.get(); }
|
||||
|
||||
|
||||
void setPointSize(float psize);
|
||||
|
||||
float getPointSize() const;
|
||||
|
||||
|
||||
void changePointSize(float delta);
|
||||
|
||||
|
||||
void changePointAttenuation(float scale);
|
||||
|
||||
osg::ref_ptr<osg::StateSet> _stateset;
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -35,7 +35,7 @@ class AddVolumeEditingCallbackVisitor : public osg::NodeVisitor
|
||||
public:
|
||||
AddVolumeEditingCallbackVisitor():
|
||||
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}
|
||||
|
||||
|
||||
void apply(osg::Group& group)
|
||||
{
|
||||
osgVolume::VolumeTile* volumeTile = dynamic_cast<osgVolume::VolumeTile*>(&group);
|
||||
@@ -51,7 +51,7 @@ public:
|
||||
traverse(group);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
};
|
||||
|
||||
bool p3d::getFileNames(osg::ArgumentParser& arguments, FileNameList& xmlFiles, FileNameList& normalFiles)
|
||||
@@ -62,7 +62,7 @@ bool p3d::getFileNames(osg::ArgumentParser& arguments, FileNameList& xmlFiles, F
|
||||
if (!arguments.isOption(pos))
|
||||
{
|
||||
std::string ext = osgDB::getFileExtension(arguments[pos]);
|
||||
if (osgDB::equalCaseInsensitive(ext,"xml") || osgDB::equalCaseInsensitive(ext,"p3d"))
|
||||
if (osgDB::equalCaseInsensitive(ext,"xml") || osgDB::equalCaseInsensitive(ext,"p3d"))
|
||||
{
|
||||
xmlFiles.push_back(arguments[pos]);
|
||||
}
|
||||
@@ -73,7 +73,7 @@ bool p3d::getFileNames(osg::ArgumentParser& arguments, FileNameList& xmlFiles, F
|
||||
}
|
||||
}
|
||||
return (!xmlFiles.empty() || !normalFiles.empty());
|
||||
}
|
||||
}
|
||||
|
||||
bool p3d::readEnvVars(osg::ArgumentParser& arguments)
|
||||
{
|
||||
@@ -94,23 +94,23 @@ bool p3d::readEnvVars(osg::ArgumentParser& arguments)
|
||||
{
|
||||
osgDB::getDataFilePathList().push_front(path);
|
||||
}
|
||||
|
||||
|
||||
if (p3d::readEnvVars(file)) readVars = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return readVars;
|
||||
}
|
||||
|
||||
bool p3d::readEnvVars(const std::string& fileName)
|
||||
{
|
||||
std::string ext = osgDB::getFileExtension(fileName);
|
||||
if (!osgDB::equalCaseInsensitive(ext,"xml") &&
|
||||
if (!osgDB::equalCaseInsensitive(ext,"xml") &&
|
||||
!osgDB::equalCaseInsensitive(ext,"p3d")) return false;
|
||||
|
||||
|
||||
|
||||
|
||||
osg::ref_ptr<osgDB::XmlNode> doc = new osgDB::XmlNode;
|
||||
osgDB::XmlNode* root = 0;
|
||||
|
||||
@@ -146,7 +146,7 @@ bool p3d::readEnvVars(const std::string& fileName)
|
||||
}
|
||||
|
||||
bool readVars = false;
|
||||
|
||||
|
||||
for(osgDB::XmlNode::Children::iterator itr = root->children.begin();
|
||||
itr != root->children.end();
|
||||
++itr)
|
||||
@@ -182,7 +182,7 @@ osgDB::Options* createOptions(const osgDB::ReaderWriter::Options* options)
|
||||
osg::ref_ptr<osg::Node> p3d::readHoldingSlide(const std::string& filename)
|
||||
{
|
||||
std::string ext = osgDB::getFileExtension(filename);
|
||||
if (!osgDB::equalCaseInsensitive(ext,"xml") &&
|
||||
if (!osgDB::equalCaseInsensitive(ext,"xml") &&
|
||||
!osgDB::equalCaseInsensitive(ext,"p3d")) return 0;
|
||||
|
||||
osg::ref_ptr<osgDB::ReaderWriter::Options> options = createOptions(0);
|
||||
@@ -215,24 +215,24 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
std::string filename;
|
||||
while (arguments.read("--image",filename))
|
||||
{
|
||||
osg::ref_ptr<osg::Image> image = readRefImageFile(filename.c_str(), local_options.get());
|
||||
if (image.valid()) nodeList.push_back(osg::createGeodeForImage(image));
|
||||
osg::ref_ptr<osg::Image> image = readImageFile(filename.c_str(), local_options.get());
|
||||
if (image.valid()) nodeList.push_back(osg::createGeodeForImage(image.get()));
|
||||
}
|
||||
|
||||
while (arguments.read("--movie",filename))
|
||||
{
|
||||
osg::ref_ptr<osg::Image> image = readRefImageFile(filename.c_str(), local_options.get());
|
||||
osg::ref_ptr<osg::Image> image = readImageFile(filename.c_str(), local_options.get());
|
||||
osg::ref_ptr<osg::ImageStream> imageStream = dynamic_cast<osg::ImageStream*>(image.get());
|
||||
if (image.valid())
|
||||
{
|
||||
imageStream->play();
|
||||
nodeList.push_back(osg::createGeodeForImage(imageStream));
|
||||
nodeList.push_back(osg::createGeodeForImage(imageStream.get()));
|
||||
}
|
||||
}
|
||||
|
||||
while (arguments.read("--dem",filename))
|
||||
{
|
||||
osg::ref_ptr<osg::HeightField> hf = readRefHeightFieldFile(filename.c_str(), local_options.get());
|
||||
osg::HeightField* hf = readHeightFieldFile(filename.c_str(), local_options.get());
|
||||
if (hf)
|
||||
{
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
@@ -247,7 +247,7 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
if (!arguments.isOption(pos))
|
||||
{
|
||||
// not an option so assume string is a filename.
|
||||
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFile( arguments[pos], local_options.get());
|
||||
osg::Node *node = osgDB::readNodeFile( arguments[pos], local_options.get());
|
||||
|
||||
if(node)
|
||||
{
|
||||
@@ -260,12 +260,12 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (nodeList.empty())
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Node> root;
|
||||
|
||||
if (nodeList.size()==1)
|
||||
@@ -274,7 +274,7 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
}
|
||||
else // size >1
|
||||
{
|
||||
|
||||
|
||||
osg::Switch* sw = new osg::Switch;
|
||||
for(NodeList::iterator itr=nodeList.begin();
|
||||
itr!=nodeList.end();
|
||||
@@ -283,7 +283,7 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
sw->addChild((*itr).get());
|
||||
}
|
||||
sw->setSingleChildOn(0);
|
||||
|
||||
|
||||
sw->setEventCallback(new p3d::ShowEventHandler());
|
||||
|
||||
root = sw;
|
||||
@@ -292,7 +292,7 @@ osg::ref_ptr<osg::Node> p3d::readShowFiles(osg::ArgumentParser& arguments,const
|
||||
if (root.valid())
|
||||
{
|
||||
osg::notify(osg::INFO)<<"Got node now adding callback"<<std::endl;
|
||||
|
||||
|
||||
AddVolumeEditingCallbackVisitor avecv;
|
||||
root->accept(avecv);
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -28,13 +28,13 @@ bool ShowEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
case(osgGA::GUIEventAdapter::KEYUP):
|
||||
{
|
||||
osg::notify(osg::INFO)<<"ShowEventHandler KEYUP "<<(int)ea.getKey()<<std::endl;
|
||||
if (ea.getKey()>=osgGA::GUIEventAdapter::KEY_F1 &&
|
||||
if (ea.getKey()>=osgGA::GUIEventAdapter::KEY_F1 &&
|
||||
ea.getKey()<=osgGA::GUIEventAdapter::KEY_F8)
|
||||
{
|
||||
unsigned int child = ea.getKey()-osgGA::GUIEventAdapter::KEY_F1;
|
||||
osg::notify(osg::INFO)<<" Select "<<child<<std::endl;
|
||||
osg::Switch* showSwitch = dynamic_cast<osg::Switch*>(object);
|
||||
if (showSwitch)
|
||||
if (showSwitch)
|
||||
{
|
||||
if (child<showSwitch->getNumChildren())
|
||||
{
|
||||
@@ -52,6 +52,12 @@ bool ShowEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
void ShowEventHandler::accept(osgGA::GUIEventHandlerVisitor& v)
|
||||
{
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
void ShowEventHandler::getUsage(osg::ApplicationUsage& /*usage*/) const
|
||||
{
|
||||
}
|
||||
|
||||
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -28,9 +28,11 @@ class ShowEventHandler : public osgGA::GUIEventHandler
|
||||
ShowEventHandler();
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv);
|
||||
|
||||
|
||||
virtual void accept(osgGA::GUIEventHandlerVisitor& v);
|
||||
|
||||
virtual void getUsage(osg::ApplicationUsage& usage) const;
|
||||
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
*/
|
||||
|
||||
#include <osg/Geometry>
|
||||
#include <osg/CameraNode>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/AutoTransform>
|
||||
#include <osg/Notify>
|
||||
@@ -36,10 +37,9 @@
|
||||
#include <osgGA/TerrainManipulator>
|
||||
#include <osgGA/AnimationPathManipulator>
|
||||
#include <osgGA/StateSetManipulator>
|
||||
#include <osgGA/MultiTouchTrackballManipulator>
|
||||
|
||||
#include <osgPresentation/SlideEventHandler>
|
||||
#include <osgPresentation/Cursor>
|
||||
#include <osgPresentation/SlideShowConstructor>
|
||||
|
||||
#include "ReadShowFile.h"
|
||||
#include "PointsEventHandler.h"
|
||||
@@ -51,7 +51,6 @@
|
||||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#ifdef USE_SDL
|
||||
@@ -130,103 +129,148 @@ void setViewer(osgViewer::Viewer& viewer, float width, float height, float dista
|
||||
|
||||
viewer.getCamera()->setProjectionMatrixAsPerspective( vfov, width/height, 0.1, 1000.0);
|
||||
|
||||
OSG_INFO<<"setProjectionMatrixAsPerspective( "<<vfov<<", "<<width/height<<", "<<0.1<<", "<<1000.0<<");"<<std::endl;
|
||||
OSG_NOTICE<<"setProjectionMatrixAsPerspective( "<<vfov<<", "<<width/height<<", "<<0.1<<", "<<1000.0<<");"<<std::endl;
|
||||
}
|
||||
|
||||
class ForwardToDeviceEventHandler : public osgGA::GUIEventHandler {
|
||||
public:
|
||||
ForwardToDeviceEventHandler(osgGA::Device* device, bool format_mouse_events) : osgGA::GUIEventHandler(), _device(device), _forwardMouseEvents(format_mouse_events) {}
|
||||
ForwardToDeviceEventHandler(osgGA::Device* device) : osgGA::GUIEventHandler(), _device(device) {}
|
||||
|
||||
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *)
|
||||
{
|
||||
switch (ea.getEventType())
|
||||
{
|
||||
case osgGA::GUIEventAdapter::PUSH:
|
||||
case osgGA::GUIEventAdapter::RELEASE:
|
||||
case osgGA::GUIEventAdapter::MOVE:
|
||||
case osgGA::GUIEventAdapter::DRAG:
|
||||
case osgGA::GUIEventAdapter::SCROLL:
|
||||
if (_forwardMouseEvents)
|
||||
_device->sendEvent(ea);
|
||||
break;
|
||||
|
||||
default:
|
||||
_device->sendEvent(ea);
|
||||
break;
|
||||
}
|
||||
OSG_INFO<<"ForwardToDeviceEventHandler::setEvent("<<ea.getKey()<<")"<<std::endl;
|
||||
_device->sendEvent(ea);
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool handle(osgGA::Event* event, osg::Object* object, osg::NodeVisitor* nv)
|
||||
{
|
||||
if (event->asGUIEventAdapter())
|
||||
return osgGA::GUIEventHandler::handle(event, object, nv);
|
||||
else
|
||||
{
|
||||
_device->sendEvent(*event);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
osg::ref_ptr<osgGA::Device> _device;
|
||||
bool _forwardMouseEvents;
|
||||
};
|
||||
|
||||
|
||||
class DumpEventHandler : public osgGA::GUIEventHandler {
|
||||
public:
|
||||
DumpEventHandler() : osgGA::GUIEventHandler() {}
|
||||
class FollowMouseCallback: public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
|
||||
virtual bool handle (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa, osg::Object *, osg::NodeVisitor *)
|
||||
{
|
||||
switch (ea.getEventType())
|
||||
FollowMouseCallback():
|
||||
_mousePostition(0.5,0.5) {}
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv)
|
||||
{
|
||||
case osgGA::GUIEventAdapter::FRAME:
|
||||
return false;
|
||||
break;
|
||||
case osgGA::GUIEventAdapter::PUSH:
|
||||
std::cout << "PUSH: ";
|
||||
break;
|
||||
case osgGA::GUIEventAdapter::RELEASE:
|
||||
std::cout << "RELEASE: ";
|
||||
break;
|
||||
case osgGA::GUIEventAdapter::MOVE:
|
||||
std::cout << "MOVE: ";
|
||||
break;
|
||||
case osgGA::GUIEventAdapter::DRAG:
|
||||
std::cout << "DRAG: ";
|
||||
break;
|
||||
case osgGA::GUIEventAdapter::SCROLL:
|
||||
std::cout << "SCROLL: ";
|
||||
break;
|
||||
break;
|
||||
osg::AutoTransform* transform = dynamic_cast<osg::AutoTransform*>(object);
|
||||
if (!transform) return false;
|
||||
|
||||
default:
|
||||
std::cout << ea.getEventType() << " ";
|
||||
break;
|
||||
}
|
||||
std::cout << ea.getX() << "/" << ea.getY() << " " << ea.isMultiTouchEvent() << std::endl;
|
||||
return false;
|
||||
}
|
||||
osg::NotifySeverity level = osg::INFO;
|
||||
|
||||
switch(ea.getEventType())
|
||||
{
|
||||
case(osgGA::GUIEventAdapter::PUSH):
|
||||
case(osgGA::GUIEventAdapter::RELEASE):
|
||||
case(osgGA::GUIEventAdapter::MOVE):
|
||||
case(osgGA::GUIEventAdapter::DRAG):
|
||||
|
||||
osg::notify(level)<<std::endl<<"ea.getGraphicsContext()="<<ea.getGraphicsContext()<<std::endl;
|
||||
osg::notify(level)<<"ea.getWindowWidth()="<<ea.getWindowWidth()<<std::endl;
|
||||
osg::notify(level)<<"ea.getWindowHeight()="<<ea.getWindowHeight()<<std::endl;
|
||||
osg::notify(level)<<"ea.getX()="<<ea.getX()<<std::endl;
|
||||
osg::notify(level)<<"ea.getXin()="<<ea.getXmin()<<std::endl;
|
||||
osg::notify(level)<<"ea.getXmax()="<<ea.getXmax()<<std::endl;
|
||||
osg::notify(level)<<"ea.getY()="<<ea.getY()<<std::endl;
|
||||
osg::notify(level)<<"ea.getYin()="<<ea.getYmin()<<std::endl;
|
||||
osg::notify(level)<<"ea.getYmax()="<<ea.getYmax()<<std::endl;
|
||||
|
||||
_mousePostition.set(ea.getXnormalized(), ea.getYnormalized());
|
||||
break;
|
||||
|
||||
case(osgGA::GUIEventAdapter::FRAME):
|
||||
{
|
||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa);
|
||||
|
||||
|
||||
bool handle(osgGA::Event* event, osg::Object* object, osg::NodeVisitor* nv)
|
||||
{
|
||||
if (event->asGUIEventAdapter())
|
||||
return osgGA::GUIEventHandler::handle(event, object, nv);
|
||||
else
|
||||
{
|
||||
osg::Camera* camera = view->getCamera();
|
||||
osg::Matrix VP = camera->getViewMatrix() * camera->getProjectionMatrix();
|
||||
|
||||
osg::Matrix inverse_VP;
|
||||
inverse_VP.invert(VP);
|
||||
|
||||
osg::Vec3d start_eye(_mousePostition.x(), _mousePostition.y(), 0.0);
|
||||
osg::Vec3d end_eye(_mousePostition.x(), _mousePostition.y(), 1.0);
|
||||
|
||||
osg::Vec3d start_world = start_eye * inverse_VP;
|
||||
osg::Vec3d end_world = start_eye * inverse_VP;
|
||||
|
||||
osg::notify(level)<<"start_world="<<start_world<<std::endl;
|
||||
osg::notify(level)<<"end_world="<<end_world<<std::endl;
|
||||
|
||||
if (end_world.valid()) transform->setPosition(end_world);
|
||||
else
|
||||
{
|
||||
OSG_NOTICE<<"Ignoring invalid end_world position"<<std::endl;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case(osgGA::GUIEventAdapter::KEYDOWN):
|
||||
{
|
||||
if (ea.getKey()=='c')
|
||||
{
|
||||
for(unsigned int i=0; i< transform->getNumChildren(); ++i)
|
||||
{
|
||||
osg::Node* node = transform->getChild(i);
|
||||
node->setNodeMask(
|
||||
node->getNodeMask()!=0 ?
|
||||
0 :
|
||||
0xffffff);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
virtual void accept(osgGA::GUIEventHandlerVisitor& v)
|
||||
{
|
||||
v.visit(*this);
|
||||
}
|
||||
|
||||
private:
|
||||
osg::Vec2d _mousePostition;
|
||||
};
|
||||
|
||||
osg::Node* createCursorSubgraph(const std::string& filename, float size)
|
||||
{
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
|
||||
size = 20.0f;
|
||||
|
||||
osg::Geometry* geom = osg::createTexturedQuadGeometry(osg::Vec3(-size*0.5f,-size*0.5f,0.0f),osg::Vec3(size,0.0f,0.0f),osg::Vec3(0.0f,size,0.0f));
|
||||
geom->getOrCreateStateSet()->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
osg::Image* image = osgDB::readImageFile(osgDB::findDataFile(filename));
|
||||
if (image)
|
||||
{
|
||||
osg::StateSet* stateset = geom->getOrCreateStateSet();
|
||||
stateset->setTextureAttributeAndModes(0, new osg::Texture2D(image),osg::StateAttribute::ON|osg::StateAttribute::PROTECTED);
|
||||
stateset->setMode(GL_BLEND,osg::StateAttribute::ON|osg::StateAttribute::PROTECTED);
|
||||
// stateset->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
|
||||
stateset->setRenderBinDetails(1000, "DepthSortedBin");
|
||||
}
|
||||
|
||||
geode->addDrawable(geom);
|
||||
|
||||
osg::AutoTransform* transform = new osg::AutoTransform;
|
||||
transform->setAutoRotateMode(osg::AutoTransform::ROTATE_TO_CAMERA);
|
||||
transform->setAutoScaleToScreen(true);
|
||||
|
||||
transform->addChild(geode);
|
||||
|
||||
transform->setEventCallback(new FollowMouseCallback());
|
||||
|
||||
return transform;
|
||||
|
||||
}
|
||||
|
||||
|
||||
enum P3DApplicationType
|
||||
@@ -248,7 +292,7 @@ void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_opti
|
||||
loadedModel->getOrCreateStateSet()->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);
|
||||
#endif
|
||||
|
||||
// optimize the scene graph, remove redundant nodes and state etc.
|
||||
// optimize the scene graph, remove rendundent nodes and state etc.
|
||||
osgUtil::Optimizer optimizer;
|
||||
optimizer.optimize(loadedModel.get(), optimizer_options);
|
||||
|
||||
@@ -256,24 +300,21 @@ void processLoadedModel(osg::ref_ptr<osg::Node>& loadedModel, int optimizer_opti
|
||||
{
|
||||
osg::ref_ptr<osg::Group> group = new osg::Group;
|
||||
group->addChild(loadedModel.get());
|
||||
|
||||
OSG_NOTICE<<"Creating Cursor"<<std::endl;
|
||||
group->addChild(new osgPresentation::Cursor(cursorFileName, 20.0f));
|
||||
|
||||
group->addChild(createCursorSubgraph(cursorFileName, 0.05f));
|
||||
loadedModel = group;
|
||||
}
|
||||
}
|
||||
|
||||
void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name, bool forward_mouse_events)
|
||||
void addDeviceTo(osgViewer::Viewer& viewer, const std::string& device_name)
|
||||
{
|
||||
osg::ref_ptr<osgGA::Device> dev = osgDB::readRefFile<osgGA::Device>(device_name);
|
||||
osg::ref_ptr<osgGA::Device> dev = osgDB::readFile<osgGA::Device>(device_name);
|
||||
if (dev.valid())
|
||||
{
|
||||
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(), forward_mouse_events));
|
||||
if (dev->getCapabilities() & osgGA::Device::SEND_EVENTS)
|
||||
viewer.getEventHandlers().push_front(new ForwardToDeviceEventHandler(dev.get()));
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -307,8 +348,6 @@ int main( int argc, char **argv )
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--html <filename>","Print out slides to a series of html & image files.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--loop","Switch on looping of presentation.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--devices","Print the Video input capability via QuickTime and exit.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--forwardMouseEvents","forward also mouse/touch-events to the devices");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--suppressEnvTags", "suppresses all found ENV-tags in the presentation");
|
||||
|
||||
// add alias from xml to p3d to provide backwards compatibility for old p3d files.
|
||||
osgDB::Registry::instance()->addFileExtensionAlias("xml","p3d");
|
||||
@@ -317,17 +356,14 @@ int main( int argc, char **argv )
|
||||
if (arguments.read("-devices") || arguments.read("--devices"))
|
||||
{
|
||||
// Force load QuickTime plugin, probe video capability, exit
|
||||
osgDB::readRefImageFile("devices.live");
|
||||
osgDB::readImageFile("devices.live");
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool suppress_env_tags = false;
|
||||
if (arguments.read("--suppressEnvTags"))
|
||||
suppress_env_tags = true;
|
||||
|
||||
// read any env vars from presentations before we create viewer to make sure the viewer
|
||||
// utilises these env vars
|
||||
if (!suppress_env_tags && p3d::readEnvVars(arguments))
|
||||
if (p3d::readEnvVars(arguments))
|
||||
{
|
||||
osg::DisplaySettings::instance()->readEnvironmentalVariables();
|
||||
}
|
||||
@@ -415,10 +451,6 @@ int main( int argc, char **argv )
|
||||
doSetViewer = false;
|
||||
}
|
||||
|
||||
bool forwardMouseEvents = false;
|
||||
if (arguments.read("--forwardMouseEvents"))
|
||||
forwardMouseEvents = true;
|
||||
|
||||
const char* p3dDevice = getenv("P3D_DEVICE");
|
||||
if (p3dDevice)
|
||||
{
|
||||
@@ -426,7 +458,7 @@ int main( int argc, char **argv )
|
||||
osgDB::split(p3dDevice, devices);
|
||||
for(osgDB::StringList::iterator i = devices.begin(); i != devices.end(); ++i)
|
||||
{
|
||||
addDeviceTo(viewer, *i, forwardMouseEvents);
|
||||
addDeviceTo(viewer, *i);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -434,7 +466,7 @@ int main( int argc, char **argv )
|
||||
std::string device;
|
||||
while (arguments.read("--device", device))
|
||||
{
|
||||
addDeviceTo(viewer, device, forwardMouseEvents);
|
||||
addDeviceTo(viewer, device);
|
||||
|
||||
}
|
||||
|
||||
@@ -451,7 +483,7 @@ int main( int argc, char **argv )
|
||||
|
||||
osg::ref_ptr<osgDB::Options> device_options = new osgDB::Options("documentRegisteredHandlers");
|
||||
|
||||
osg::ref_ptr<osgGA::Device> rest_http_device = osgDB::readRefFile<osgGA::Device>(server_address+":"+server_port+"/"+document_root+".resthttp", device_options.get());
|
||||
osg::ref_ptr<osgGA::Device> rest_http_device = osgDB::readFile<osgGA::Device>(server_address+":"+server_port+"/"+document_root+".resthttp", device_options.get());
|
||||
if (rest_http_device.valid())
|
||||
{
|
||||
viewer.addDevice(rest_http_device.get());
|
||||
@@ -477,7 +509,7 @@ int main( int argc, char **argv )
|
||||
{
|
||||
osg::ref_ptr<osgGA::KeySwitchMatrixManipulator> keyswitchManipulator = new osgGA::KeySwitchMatrixManipulator;
|
||||
|
||||
keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::MultiTouchTrackballManipulator() );
|
||||
keyswitchManipulator->addMatrixManipulator( '1', "Trackball", new osgGA::TrackballManipulator() );
|
||||
keyswitchManipulator->addMatrixManipulator( '2', "Flight", new osgGA::FlightManipulator() );
|
||||
keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
|
||||
keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );
|
||||
@@ -499,8 +531,6 @@ int main( int argc, char **argv )
|
||||
viewer.setCameraManipulator( keyswitchManipulator.get() );
|
||||
}
|
||||
|
||||
//viewer.getEventHandlers().push_front(new DumpEventHandler());
|
||||
|
||||
// add the state manipulator
|
||||
osg::ref_ptr<osgGA::StateSetManipulator> ssManipulator = new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet());
|
||||
ssManipulator->setKeyEventToggleTexturing('e');
|
||||
@@ -599,13 +629,13 @@ int main( int argc, char **argv )
|
||||
|
||||
// set up optimizer options
|
||||
unsigned int optimizer_options = osgUtil::Optimizer::DEFAULT_OPTIMIZATIONS;
|
||||
bool release_and_compile = false;
|
||||
bool relase_and_compile = false;
|
||||
while (arguments.read("--release-and-compile"))
|
||||
{
|
||||
release_and_compile = true;
|
||||
relase_and_compile = true;
|
||||
}
|
||||
seh->setReleaseAndCompileOnEachNewSlide(release_and_compile);
|
||||
if (release_and_compile)
|
||||
seh->setReleaseAndCompileOnEachNewSlide(relase_and_compile);
|
||||
if (relase_and_compile)
|
||||
{
|
||||
// make sure that imagery stays around after being applied to textures.
|
||||
viewer.getDatabasePager()->setUnrefImageDataAfterApplyPolicy(true,false);
|
||||
@@ -652,10 +682,9 @@ int main( int argc, char **argv )
|
||||
viewer.getUsage(*arguments.getApplicationUsage());
|
||||
|
||||
// if user request help write it out to cout.
|
||||
unsigned int helpType = 0;
|
||||
if ((helpType = arguments.readHelpType()))
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
arguments.getApplicationUsage()->write(std::cout, helpType);
|
||||
arguments.getApplicationUsage()->write(osg::notify(osg::NOTICE));
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -750,9 +779,6 @@ int main( int argc, char **argv )
|
||||
|
||||
|
||||
osg::ref_ptr<osgDB::ReaderWriter::Options> cacheAllOption = new osgDB::ReaderWriter::Options;
|
||||
if(suppress_env_tags)
|
||||
cacheAllOption->setPluginStringData("suppressEnvTags", "true");
|
||||
|
||||
cacheAllOption->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_ALL);
|
||||
osgDB::Registry::instance()->setOptions(cacheAllOption.get());
|
||||
|
||||
@@ -930,7 +956,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
}
|
||||
|
||||
// update the scene by traversing it with the update visitor which will
|
||||
// update the scene by traversing it with the the update visitor which will
|
||||
// call all node update callbacks and animations.
|
||||
viewer.eventTraversal();
|
||||
|
||||
@@ -959,7 +985,7 @@ int main( int argc, char **argv )
|
||||
|
||||
}
|
||||
|
||||
// update the scene by traversing it with the update visitor which will
|
||||
// update the scene by traversing it with the the update visitor which will
|
||||
// call all node update callbacks and animations.
|
||||
viewer.updateTraversal();
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_SUBDIRECTORY(osgautocapture)
|
||||
ADD_SUBDIRECTORY(osgautotransform)
|
||||
ADD_SUBDIRECTORY(osgbillboard)
|
||||
ADD_SUBDIRECTORY(osgblenddrawbuffers)
|
||||
ADD_SUBDIRECTORY(osgblendequation)
|
||||
ADD_SUBDIRECTORY(osgcallback)
|
||||
ADD_SUBDIRECTORY(osgcamera)
|
||||
@@ -47,6 +46,7 @@ IF(DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_SUBDIRECTORY(osgfont)
|
||||
ADD_SUBDIRECTORY(osgforest)
|
||||
ADD_SUBDIRECTORY(osgfxbrowser)
|
||||
ADD_SUBDIRECTORY(osgframerenderer)
|
||||
ADD_SUBDIRECTORY(osgoutline)
|
||||
ADD_SUBDIRECTORY(osggameoflife)
|
||||
ADD_SUBDIRECTORY(osggeometry)
|
||||
@@ -65,7 +65,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_SUBDIRECTORY(osglightpoint)
|
||||
ADD_SUBDIRECTORY(osglogicop)
|
||||
ADD_SUBDIRECTORY(osglogo)
|
||||
ADD_SUBDIRECTORY(osggpucull)
|
||||
ADD_SUBDIRECTORY(osggpx)
|
||||
ADD_SUBDIRECTORY(osggraphicscost)
|
||||
ADD_SUBDIRECTORY(osgmanipulator)
|
||||
@@ -96,7 +95,6 @@ IF(DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_SUBDIRECTORY(osgprerendercubemap)
|
||||
ADD_SUBDIRECTORY(osgreflect)
|
||||
ADD_SUBDIRECTORY(osgrobot)
|
||||
ADD_SUBDIRECTORY(osgSSBO)
|
||||
ADD_SUBDIRECTORY(osgscalarbar)
|
||||
ADD_SUBDIRECTORY(osgscribe)
|
||||
ADD_SUBDIRECTORY(osgsequence)
|
||||
@@ -120,17 +118,14 @@ IF(DYNAMIC_OPENSCENEGRAPH)
|
||||
ADD_SUBDIRECTORY(osgstereomatch)
|
||||
ADD_SUBDIRECTORY(osgterrain)
|
||||
ADD_SUBDIRECTORY(osgthreadedterrain)
|
||||
ADD_SUBDIRECTORY(osgtransferfunction)
|
||||
ADD_SUBDIRECTORY(osgtext)
|
||||
ADD_SUBDIRECTORY(osgtext3D)
|
||||
ADD_SUBDIRECTORY(osgtexture1D)
|
||||
ADD_SUBDIRECTORY(osgtexture2D)
|
||||
ADD_SUBDIRECTORY(osgtexture2DArray)
|
||||
ADD_SUBDIRECTORY(osgtexture3D)
|
||||
ADD_SUBDIRECTORY(osgtexturerectangle)
|
||||
ADD_SUBDIRECTORY(osgtexturecompression)
|
||||
ADD_SUBDIRECTORY(osgthirdpersonview)
|
||||
ADD_SUBDIRECTORY(osgtransformfeedback)
|
||||
ADD_SUBDIRECTORY(osguniformbuffer)
|
||||
ADD_SUBDIRECTORY(osguserstats)
|
||||
ADD_SUBDIRECTORY(osgvertexprogram)
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
// Search in str for all occurrences of spat and replace them with rpat.
|
||||
// Search in str for all occurences of spat and replace them with rpat.
|
||||
void searchAndReplace(std::string& str, const std::string& spat, const std::string& rpat)
|
||||
{
|
||||
std::string::size_type pos = 0;
|
||||
@@ -30,13 +30,13 @@ void writeShader(osg::Shader* shader, const std::string& cppFileName, const std:
|
||||
searchAndReplace(shaderSource, "\r\n", "\n");
|
||||
searchAndReplace(shaderSource, "\r", "\n");
|
||||
searchAndReplace(shaderSource, "\"", "\\\"");
|
||||
|
||||
|
||||
std::string variableString = std::string("char ")+variableName+std::string("[] = ");
|
||||
|
||||
|
||||
std::string::size_type startOfLine = 0;
|
||||
std::string::size_type endOfLine = shaderSource.find_first_of('\n', startOfLine);
|
||||
|
||||
if (endOfLine==std::string::npos)
|
||||
|
||||
if (endOfLine==std::string::npos)
|
||||
{
|
||||
fout<<variableString<<shaderSource<<"\\n\";"<<std::endl;
|
||||
}
|
||||
@@ -63,29 +63,25 @@ 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 a utility for converting glsl shader files into char arrays that can be compiled into applications.");
|
||||
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--shader <filename>","Shader file to create a .cpp file for.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("--write-to-source-file-directory","Use the path to the source filename as the directory to write to.");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display command line parameters");
|
||||
|
||||
// if user request help write it out to cout.
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
{
|
||||
arguments.getApplicationUsage()->write(std::cout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool useSamePathAsSourceFile = false;
|
||||
if (arguments.read("--write-to-source-file-directory")) useSamePathAsSourceFile = true;
|
||||
|
||||
|
||||
std::string filename;
|
||||
if (arguments.read("--shader",filename))
|
||||
{
|
||||
osg::ref_ptr<osg::Shader> shader = osgDB::readRefShaderFile(filename);
|
||||
osg::ref_ptr<osg::Shader> shader = osgDB::readShaderFile(filename);
|
||||
if (shader.valid())
|
||||
{
|
||||
std::string name = osgDB::getStrippedName(filename);
|
||||
@@ -98,11 +94,9 @@ int main( int argc, char **argv )
|
||||
name[pos] = '_';
|
||||
pos = name.find_first_of(invalidCharacters);
|
||||
}
|
||||
|
||||
|
||||
std::string ext = osgDB::getFileExtension(filename);
|
||||
std::string cppFileName = name + "_" + ext + ".cpp";
|
||||
if (useSamePathAsSourceFile) cppFileName = osgDB::concatPaths(path, cppFileName);
|
||||
|
||||
std::string cppFileName = osgDB::concatPaths(path, name + "_" + ext + ".cpp");
|
||||
std::string variableName = name + "_" + ext;
|
||||
writeShader(shader.get(), cppFileName, variableName);
|
||||
|
||||
@@ -113,7 +107,7 @@ int main( int argc, char **argv )
|
||||
std::cout<<"Error: could not find file '"<<filename<<"'"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
std::cout<<"No appropriate command line options used."<<std::endl;
|
||||
|
||||
@@ -59,10 +59,10 @@ class ViewerFrameThread : public OpenThreads::Thread
|
||||
|
||||
~ViewerFrameThread()
|
||||
{
|
||||
if (isRunning())
|
||||
cancel();
|
||||
while(isRunning())
|
||||
{
|
||||
cancel();
|
||||
join();
|
||||
OpenThreads::Thread::YieldCurrentThread();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -107,25 +107,25 @@ protected:
|
||||
};
|
||||
|
||||
|
||||
//We would need to document the following somewhere in order to guide people on
|
||||
//We would need to document the following somewhere in order to guide people on
|
||||
//what they need to use...
|
||||
//
|
||||
//----------------------------------------------
|
||||
//There are two angles to consider.
|
||||
//
|
||||
//1. If someone wants a widget in their Qt app to be an OSG-rendered scene, they
|
||||
//need GraphicsWindowQt (in the osgViewerQtContext example) or QOSGWidget (in the
|
||||
//osgViewerQt example). These two allow both OSG and Qt to manage their threads
|
||||
//in a way which is optimal to them. We've used QOSGWidget in the past and had
|
||||
//trouble when Qt tried to overlay other widgets over the QOSGWidget (since OSG
|
||||
//did its rendering independently of Qt, it would overwrite what Qt had drawn). I
|
||||
//haven't tried GraphicsWindowQt yet, but I expect since it uses QGLWidget, it
|
||||
//will result in Qt knowing when OSG has drawn and be able to do overlays at the
|
||||
//1. If someone wants a widget in their Qt app to be an OSG-rendered scene, they
|
||||
//need GraphicsWindowQt (in the osgViewerQtContext example) or QOSGWidget (in the
|
||||
//osgViewerQt example). These two allow both OSG and Qt to manage their threads
|
||||
//in a way which is optimal to them. We've used QOSGWidget in the past and had
|
||||
//trouble when Qt tried to overlay other widgets over the QOSGWidget (since OSG
|
||||
//did its rendering independently of Qt, it would overwrite what Qt had drawn). I
|
||||
//haven't tried GraphicsWindowQt yet, but I expect since it uses QGLWidget, it
|
||||
//will result in Qt knowing when OSG has drawn and be able to do overlays at the
|
||||
//right time. Eventually GraphicsWindowQt can be brought into osgViewer I imagine...
|
||||
//
|
||||
//2. If someone wants to bring Qt widgets inside their OSG scene (to do HUDs or
|
||||
//an interface on a computer screen which is inside the 3D scene, or even
|
||||
//floating Qt widgets, for example). That's where QGraphicsViewAdapter +
|
||||
//2. If someone wants to bring Qt widgets inside their OSG scene (to do HUDs or
|
||||
//an interface on a computer screen which is inside the 3D scene, or even
|
||||
//floating Qt widgets, for example). That's where QGraphicsViewAdapter +
|
||||
//QWidgetImage will be useful.
|
||||
//----------------------------------------------
|
||||
|
||||
@@ -160,7 +160,7 @@ int main(int argc, char **argv)
|
||||
bool useLabel = false;
|
||||
if (arguments.read("--useLabel")) useLabel = true;
|
||||
|
||||
// true = make a Qt window with the same content to compare to
|
||||
// true = make a Qt window with the same content to compare to
|
||||
// QWebViewImage/QWidgetImage
|
||||
// false = use QWebViewImage/QWidgetImage (depending on useWidgetImage)
|
||||
bool sanityCheck = false;
|
||||
@@ -183,9 +183,9 @@ int main(int argc, char **argv)
|
||||
//-------------------------------------------------------------------
|
||||
// QWebViewImage test
|
||||
//-------------------------------------------------------------------
|
||||
// Note: When the last few issues with QWidgetImage are fixed,
|
||||
// QWebViewImage and this if() {} section can be removed since
|
||||
// QWidgetImage can display a QWebView just like QWebViewImage. Use
|
||||
// Note: When the last few issues with QWidgetImage are fixed,
|
||||
// QWebViewImage and this if() {} section can be removed since
|
||||
// QWidgetImage can display a QWebView just like QWebViewImage. Use
|
||||
// --useWidgetImage --useBrowser to see that in action.
|
||||
|
||||
if (!sanityCheck)
|
||||
@@ -193,7 +193,7 @@ int main(int argc, char **argv)
|
||||
osg::ref_ptr<osgQt::QWebViewImage> image = new osgQt::QWebViewImage;
|
||||
|
||||
if (arguments.argc()>1) image->navigateTo((arguments[1]));
|
||||
else image->navigateTo("http://www.openscenegraph.org/");
|
||||
else image->navigateTo("http://www.youtube.com/");
|
||||
|
||||
osgWidget::GeometryHints hints(osg::Vec3(0.0f,0.0f,0.0f),
|
||||
osg::Vec3(1.0f,0.0f,0.0f),
|
||||
@@ -208,7 +208,7 @@ int main(int argc, char **argv)
|
||||
}
|
||||
else
|
||||
{
|
||||
// Sanity check, do the same thing as QGraphicsViewAdapter but in
|
||||
// Sanity check, do the same thing as QGraphicsViewAdapter but in
|
||||
// a separate Qt window.
|
||||
QWebPage* webPage = new QWebPage;
|
||||
webPage->settings()->setAttribute(QWebSettings::JavascriptEnabled, true);
|
||||
@@ -218,7 +218,7 @@ int main(int argc, char **argv)
|
||||
webView->setPage(webPage);
|
||||
|
||||
if (arguments.argc()>1) webView->load(QUrl(arguments[1]));
|
||||
else webView->load(QUrl("http://www.openscenegraph.org/"));
|
||||
else webView->load(QUrl("http://www.youtube.com/"));
|
||||
|
||||
QGraphicsScene* graphicsScene = new QGraphicsScene;
|
||||
graphicsScene->addWidget(webView);
|
||||
@@ -240,16 +240,14 @@ int main(int argc, char **argv)
|
||||
// QWidgetImage test
|
||||
//-------------------------------------------------------------------
|
||||
// QWidgetImage still has some issues, some examples are:
|
||||
//
|
||||
// 1. Editing in the QTextEdit doesn't work. Also when started with
|
||||
// --useBrowser, editing in the search field on YouTube doesn't
|
||||
// work. But that same search field when using QWebViewImage
|
||||
// works... And editing in the text field in the pop-up getInteger
|
||||
// dialog works too. All these cases use QGraphicsViewAdapter
|
||||
//
|
||||
// 1. Editing in the QTextEdit doesn't work. Also when started with
|
||||
// --useBrowser, editing in the search field on YouTube doesn't
|
||||
// work. But that same search field when using QWebViewImage
|
||||
// works... And editing in the text field in the pop-up getInteger
|
||||
// dialog works too. All these cases use QGraphicsViewAdapter
|
||||
// under the hood, so why do some work and others don't?
|
||||
//
|
||||
// <<< FIXED, need TextEditorInteraction >>>
|
||||
//
|
||||
// a) osgQtBrowser --useWidgetImage [--fullscreen] (optional)
|
||||
// b) Try to click in the QTextEdit and type, or to select text
|
||||
// and drag-and-drop it somewhere else in the QTextEdit. These
|
||||
@@ -261,11 +259,11 @@ int main(int argc, char **argv)
|
||||
// g) osgQtBrowser
|
||||
// h) Try the operation in f), it works.
|
||||
//
|
||||
// 2. Operations on floating windows (--numFloatingWindows 1 or more).
|
||||
// Moving by dragging the titlebar, clicking the close button,
|
||||
// resizing them, none of these work. I wonder if it's because the
|
||||
// OS manages those functions (they're functions of the window
|
||||
// decorations) so we need to do something special for that? But
|
||||
// 2. Operations on floating windows (--numFloatingWindows 1 or more).
|
||||
// Moving by dragging the titlebar, clicking the close button,
|
||||
// resizing them, none of these work. I wonder if it's because the
|
||||
// OS manages those functions (they're functions of the window
|
||||
// decorations) so we need to do something special for that? But
|
||||
// in --sanityCheck mode they work.
|
||||
//
|
||||
// a) osgQtBrowser --useWidgetImage --numFloatingWindows 1 [--fullscreen]
|
||||
@@ -274,37 +272,35 @@ int main(int argc, char **argv)
|
||||
// c) osgQtBrowser --useWidgetImage --numFloatingWindows 1 --sanityCheck
|
||||
// d) Try the operations in b), all they work.
|
||||
// e) osgQtBrowser --useWidgetImage [--fullscreen]
|
||||
// f) Click the button so that the getInteger() dialog is
|
||||
// displayed, then try to move that dialog or close it with the
|
||||
// f) Click the button so that the getInteger() dialog is
|
||||
// displayed, then try to move that dialog or close it with the
|
||||
// close button, these don't work.
|
||||
// g) osgQtBrowser --useWidgetImage --sanityCheck
|
||||
// h) Try the operation in f), it works.
|
||||
//
|
||||
// 3. (Minor) The QGraphicsView's scrollbars don't appear when
|
||||
// using QWidgetImage or QWebViewImage. QGraphicsView is a
|
||||
// 3. (Minor) The QGraphicsView's scrollbars don't appear when
|
||||
// using QWidgetImage or QWebViewImage. QGraphicsView is a
|
||||
// QAbstractScrollArea and it should display scrollbars as soon as
|
||||
// the scene is too large to fit the view.
|
||||
//
|
||||
// <<< FIXED >>>
|
||||
//
|
||||
// a) osgQtBrowser --useWidgetImage --fullscreen
|
||||
// b) Resize the OSG window so it's smaller than the QTextEdit.
|
||||
// Scrollbars should appear but don't.
|
||||
// c) osgQtBrowser --useWidgetImage --sanityCheck
|
||||
// d) Try the operation in b), scrollbars appear. Even if you have
|
||||
// floating windows (by clicking the button or by adding
|
||||
// --numFloatingWindows 1) and move them outside the view,
|
||||
// scrollbars appear too. You can't test that case in OSG for
|
||||
// d) Try the operation in b), scrollbars appear. Even if you have
|
||||
// floating windows (by clicking the button or by adding
|
||||
// --numFloatingWindows 1) and move them outside the view,
|
||||
// scrollbars appear too. You can't test that case in OSG for
|
||||
// now because of problem 2 above, but that's pretty cool.
|
||||
//
|
||||
// 4. (Minor) In sanity check mode, the widget added to the
|
||||
// 4. (Minor) In sanity check mode, the widget added to the
|
||||
// QGraphicsView is centered. With QGraphicsViewAdapter, it is not.
|
||||
//
|
||||
// a) osgQtBrowser --useWidgetImage [--fullscreen]
|
||||
// b) The QTextEdit and button are not in the center of the image
|
||||
// generated by the QGraphicsViewAdapter.
|
||||
// c) osgQtBrowser --useWidgetImage --sanityCheck
|
||||
// d) The QTextEdit and button are in the center of the
|
||||
// d) The QTextEdit and button are in the center of the
|
||||
// QGraphicsView.
|
||||
|
||||
|
||||
@@ -350,7 +346,7 @@ int main(int argc, char **argv)
|
||||
{
|
||||
QTextEdit* textEdit = new QTextEdit(text);
|
||||
textEdit->setReadOnly(false);
|
||||
textEdit->setTextInteractionFlags(Qt::TextEditorInteraction);
|
||||
textEdit->setTextInteractionFlags(Qt::TextEditable);
|
||||
|
||||
QPalette palette = textEdit->palette();
|
||||
palette.setColor(QPalette::Highlight, Qt::darkBlue);
|
||||
@@ -392,7 +388,7 @@ int main(int argc, char **argv)
|
||||
texture->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP_TO_EDGE);
|
||||
mt->getOrCreateStateSet()->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
|
||||
|
||||
osgViewer::InteractiveImageHandler* handler;
|
||||
osgViewer::InteractiveImageHandler* handler;
|
||||
if (inScene)
|
||||
{
|
||||
mt->setMatrix(osg::Matrix::rotate(osg::Vec3(0,1,0), osg::Vec3(0,0,1)));
|
||||
@@ -402,9 +398,9 @@ int main(int argc, char **argv)
|
||||
}
|
||||
else // fullscreen
|
||||
{
|
||||
// The HUD camera's viewport needs to follow the size of the
|
||||
// The HUD camera's viewport needs to follow the size of the
|
||||
// window. MyInteractiveImageHandler will make sure of this.
|
||||
// As for the quad and the camera's projection, setting the
|
||||
// As for the quad and the camera's projection, setting the
|
||||
// projection resize policy to FIXED takes care of them, so
|
||||
// they can stay the same: (0,1,0,1) with a quad that fits.
|
||||
|
||||
@@ -433,13 +429,13 @@ int main(int argc, char **argv)
|
||||
overlay->addChild(mt);
|
||||
|
||||
root->addChild(overlay);
|
||||
|
||||
|
||||
quad->setEventCallback(handler);
|
||||
quad->setCullCallback(handler);
|
||||
}
|
||||
else
|
||||
{
|
||||
// Sanity check, do the same thing as QWidgetImage and
|
||||
// Sanity check, do the same thing as QWidgetImage and
|
||||
// QGraphicsViewAdapter but in a separate Qt window.
|
||||
|
||||
graphicsScene = new QGraphicsScene;
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
|
||||
SET(TARGET_SRC osgSSBO.cpp )
|
||||
|
||||
SETUP_EXAMPLE(osgSSBO)
|
||||
@@ -1,949 +0,0 @@
|
||||
//info : osgSSBO example,testing ShaderStorageBufferObjects ,Markus Hein, 2014, osg-3.2.1
|
||||
//required hardware and driver must support GL >= GL 4.3 or GL ES 3.1 (GL ES not tested, would be nice if someone will test it on a small device)
|
||||
|
||||
//testing osg support for Shader Storage Buffer Objects
|
||||
|
||||
//version: "first take" from last night session..
|
||||
|
||||
|
||||
|
||||
#include <osg/StateAttributeCallback>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/Geometry>
|
||||
#include <osg/Geode>
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgGA/StateSetManipulator>
|
||||
#include <osgViewer/Viewer>
|
||||
#include <osgViewer/ViewerEventHandlers>
|
||||
|
||||
#include <osg/Node>
|
||||
#include <osg/PositionAttitudeTransform>
|
||||
#include <osg/Geometry>
|
||||
#include <osg/Notify>
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/TextureRectangle>
|
||||
#include <osg/Stencil>
|
||||
#include <osg/Depth>
|
||||
#include <osg/Billboard>
|
||||
#include <osg/Material>
|
||||
#include <osg/AnimationPath>
|
||||
|
||||
#include <osgGA/TrackballManipulator>
|
||||
#include <osgGA/FlightManipulator>
|
||||
#include <osgGA/DriveManipulator>
|
||||
|
||||
#include <osgUtil/SmoothingVisitor>
|
||||
|
||||
#include <osgDB/Registry>
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgDB/WriteFile>
|
||||
|
||||
#include <osgViewer/Viewer>
|
||||
#include <osgViewer/ViewerEventHandlers>
|
||||
#include <osgViewer/Renderer>
|
||||
|
||||
|
||||
#include <osg/Array>
|
||||
#include <osg/BoundingSphere>
|
||||
#include <osg/BufferIndexBinding>
|
||||
#include <osg/BufferObject>
|
||||
#include <osg/Group>
|
||||
#include <osg/Math>
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/Program>
|
||||
#include <osg/Shader>
|
||||
#include <osg/Drawable>
|
||||
#include <osg/CopyOp>
|
||||
#include <osg/State>
|
||||
#include <osg/Matrix>
|
||||
#include <osg/ShapeDrawable>
|
||||
#include <osg/GL>
|
||||
#include <osg/StateSet>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/BlendFunc>
|
||||
#include <osg/TexEnv>
|
||||
#include <osg/Material>
|
||||
#include <osg/PointSprite>
|
||||
#include <osg/Program>
|
||||
#include <osg/Notify>
|
||||
#include <osg/Point>
|
||||
#include <osg/io_utils>
|
||||
#include <osg/VertexProgram>
|
||||
|
||||
#include <osgText/Font>
|
||||
#include <osgText/Text>
|
||||
|
||||
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgDB/WriteFile>
|
||||
#include <osgDB/FileNameUtils>
|
||||
#include <osgUtil/Optimizer>
|
||||
#include <iostream>
|
||||
#include <typeinfo>
|
||||
|
||||
|
||||
using namespace osg;
|
||||
|
||||
|
||||
//todo .. #define COMPUTATION_IN_SEPARATE_THREAD
|
||||
|
||||
#define WORK_GROUP_SIZE 16
|
||||
|
||||
|
||||
#define PRERENDER_ANTIALIASINGMULTISAMPLES 16
|
||||
#define PRERENDER_HIGH_QUALITY_ANTIALIASING
|
||||
#define PRERENDER_WIDTH 1920
|
||||
#define PRERENDER_HEIGHT 1080
|
||||
|
||||
|
||||
#define SUB_PLACEMENT_OFFSET_HORIZONTAL 0.5
|
||||
#define SUB_PLACEMENT_OFFSET_VERTICAL 0.5
|
||||
|
||||
enum BufferOffset
|
||||
{
|
||||
POSITION_NOW_OFFSET,
|
||||
POSITION_OLD_OFFSET,
|
||||
POSITION_INIT_OFFSET,
|
||||
|
||||
VELOCITY_NOW_OFFSET,
|
||||
VELOCITY_OLD_OFFSET,
|
||||
VELOCITY_INIT_OFFSET,
|
||||
|
||||
ACCELERATION_OFFSET,
|
||||
PROPERTIES_OFFSET,
|
||||
|
||||
OFFSET_END
|
||||
};
|
||||
|
||||
|
||||
const int __numDataValuesPerChannel = OFFSET_END;
|
||||
const int __numChannels = 4;
|
||||
|
||||
//512x512x4x7 = 7.340.032 floats in SSBO on GPU
|
||||
const int NUM_ELEMENTS_X = 512;
|
||||
const int NUM_ELEMENTS_Y = 512;
|
||||
|
||||
float random(float min, float max) { return min + (max - min)*(float)rand() / (float)RAND_MAX; }
|
||||
|
||||
|
||||
enum Channel
|
||||
{
|
||||
RED_CHANNEL,
|
||||
GREEN_CHANNEL,
|
||||
BLUE_CHANNEL,
|
||||
ALPHA_CHANNEL,
|
||||
RGB_CHANNEL,
|
||||
RGBA_CHANNEL
|
||||
};
|
||||
|
||||
|
||||
|
||||
class ShaderStorageBufferCallback : public osg::StateAttributeCallback
|
||||
{
|
||||
public:
|
||||
void operator() (osg::StateAttribute* attr, osg::NodeVisitor* nv)
|
||||
{
|
||||
//if you need to process the data in your app-code , better leaving it on GPU and processing there, uploading per frame will make it slow
|
||||
#if 0
|
||||
osg::ShaderStorageBufferBinding* ssbb = static_cast<osg::ShaderStorageBufferBinding*>(attr);
|
||||
osg::ShaderStorageBufferObject* ssbo
|
||||
= static_cast<osg::ShaderStorageBufferObject*>(ssbb->getBufferObject());
|
||||
|
||||
osg::FloatArray* array = static_cast<osg::FloatArray*>(ssbo->getBufferData(0));
|
||||
|
||||
float someValue = array->at(0);
|
||||
//std::cout << "someValue now: " << someValue << std::endl;
|
||||
//data transfer performance test
|
||||
// array->dirty();
|
||||
#endif
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
//do not forget to set OSG_FILE_PATH to default OSG-Data and make sure the new shaders are copied there under"shaders"
|
||||
class ComputeNode : public osg::PositionAttitudeTransform
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
osg::ref_ptr<osg::Program> _computeProgram;
|
||||
osg::ref_ptr<osg::Shader> _computeShader; //compute and write position data in SSBO
|
||||
|
||||
osg::ref_ptr<osg::Shader> _vertexShader; //reading position data from SSBO (OBS!: make sure glMemoryBuffer() is syncing this)
|
||||
osg::ref_ptr<osg::Shader> _geometryShader; //building a quad looking to the camera
|
||||
osg::ref_ptr<osg::Shader> _fragmentShader; //use false-colors etc. for making your data visible
|
||||
|
||||
osg::ref_ptr<osg::Node> _helperNode; // coordinate system node
|
||||
|
||||
ref_ptr<osg::ShaderStorageBufferObject> _ssbo;
|
||||
ref_ptr<osg::ShaderStorageBufferBinding> _ssbb;
|
||||
|
||||
GLfloat* _data; // some data we upload to GPU, initialised with random values
|
||||
osg::ref_ptr<FloatArray> _dataArray; //
|
||||
|
||||
osg::ref_ptr<osg::Group> _computationResultsRenderGroup;
|
||||
osg::ref_ptr<osg::Program> _computationResultsRenderProgram;
|
||||
osg::ref_ptr<osg::StateSet> _computationResultsRenderStateSet;
|
||||
|
||||
|
||||
std::string _computeShaderSourcePath;
|
||||
std::string _vertexShaderSourcePath;
|
||||
std::string _geometryShaderSourcePath;
|
||||
std::string _fragmentShaderSourcePath;
|
||||
|
||||
|
||||
void addHelperGeometry();
|
||||
void addDataMonitor(osg::Vec3 placement, osg::Vec3 relativePlacement, float scale, Channel channel, BufferOffset shaderBufferOffset, std::string labelcaption, float minDataRange, float maxDataRange);
|
||||
void addComputationResultsRenderTree();
|
||||
void initComputingSetup();
|
||||
|
||||
ComputeNode()
|
||||
{
|
||||
const char* envOsgFilePath = getenv("OSG_FILE_PATH");
|
||||
std::stringstream computeshaderpath; computeshaderpath << envOsgFilePath << "/shaders/osgssboComputeShader.cs";
|
||||
_computeShaderSourcePath = computeshaderpath.str();
|
||||
std::stringstream vertexshaderpath; vertexshaderpath << envOsgFilePath << "/shaders/osgssboVertexShader.vs";
|
||||
_vertexShaderSourcePath = vertexshaderpath.str();
|
||||
std::stringstream geometryshaderpath; geometryshaderpath << envOsgFilePath << "/shaders/osgssboGeometryShader.gs";
|
||||
_geometryShaderSourcePath = geometryshaderpath.str();
|
||||
std::stringstream fragmentshaderpath; fragmentshaderpath << envOsgFilePath << "/shaders/osgssboFragmentShader.fs";
|
||||
_fragmentShaderSourcePath = fragmentshaderpath.str();
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
|
||||
class ComputeNodeUpdateCallback : public osg::NodeCallback
|
||||
{
|
||||
public:
|
||||
|
||||
ComputeNode* _computeNode;
|
||||
osg::Timer_t _prevShaderUpdateTime;
|
||||
osg::Timer _timer;
|
||||
|
||||
ComputeNodeUpdateCallback(){}
|
||||
|
||||
ComputeNodeUpdateCallback(ComputeNode* computeNode)
|
||||
{
|
||||
_computeNode = computeNode;
|
||||
_prevShaderUpdateTime = 0;
|
||||
}
|
||||
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
osg::Timer_t currTime = _timer.tick();
|
||||
|
||||
if (_timer.delta_s(_prevShaderUpdateTime, currTime) > 1.0) //one second interval for shader-changed-do-reload check
|
||||
{
|
||||
osg::ref_ptr<osg::Shader> reloadedshader;
|
||||
std::string runningSource;
|
||||
std::string reloadedstring;
|
||||
|
||||
if (_computeNode->_computeShader.valid())
|
||||
{
|
||||
runningSource = _computeNode->_computeShader->getShaderSource();
|
||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeNode->_computeShaderSourcePath);
|
||||
|
||||
reloadedstring = reloadedshader->getShaderSource();
|
||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||
{
|
||||
_computeNode->_computeProgram->removeShader(_computeNode->_computeShader.get());
|
||||
_computeNode->_computeShader = reloadedshader.get();
|
||||
_computeNode->_computeProgram->addShader(_computeNode->_computeShader.get());
|
||||
}
|
||||
}
|
||||
|
||||
if (_computeNode->_vertexShader.valid())
|
||||
{
|
||||
|
||||
runningSource = _computeNode->_vertexShader->getShaderSource();
|
||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _computeNode->_vertexShaderSourcePath);
|
||||
|
||||
reloadedstring = reloadedshader->getShaderSource();
|
||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||
{
|
||||
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_vertexShader.get());
|
||||
_computeNode->_vertexShader = reloadedshader.get();
|
||||
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_vertexShader.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (_computeNode->_geometryShader.valid())
|
||||
{
|
||||
runningSource = _computeNode->_geometryShader->getShaderSource();
|
||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _computeNode->_geometryShaderSourcePath);
|
||||
|
||||
reloadedstring = reloadedshader->getShaderSource();
|
||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||
{
|
||||
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_geometryShader.get());
|
||||
_computeNode->_geometryShader = reloadedshader.get();
|
||||
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_geometryShader.get());
|
||||
}
|
||||
}
|
||||
|
||||
if (_computeNode->_fragmentShader.valid())
|
||||
{
|
||||
runningSource = _computeNode->_fragmentShader->getShaderSource();
|
||||
reloadedshader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _computeNode->_fragmentShaderSourcePath);
|
||||
|
||||
reloadedstring = reloadedshader->getShaderSource();
|
||||
if (!osgDB::equalCaseInsensitive(runningSource.c_str(), reloadedstring.c_str()))
|
||||
{
|
||||
_computeNode->_computationResultsRenderProgram->removeShader(_computeNode->_fragmentShader.get());
|
||||
_computeNode->_fragmentShader = reloadedshader.get();
|
||||
_computeNode->_computationResultsRenderProgram->addShader(_computeNode->_fragmentShader.get());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
_prevShaderUpdateTime = _timer.tick();
|
||||
}
|
||||
|
||||
traverse(node, nv);
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
//set OSG_FILE_PATH for loading axes.osgt
|
||||
void ComputeNode::addHelperGeometry()
|
||||
{
|
||||
_helperNode = osgDB::readRefNodeFile("axes.osgt");
|
||||
|
||||
if (_helperNode.valid())
|
||||
{
|
||||
addChild(_helperNode.get());
|
||||
}
|
||||
|
||||
//osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform;
|
||||
//pat->setPosition(osg::Vec3(0.5, 0, 0.5));
|
||||
//osg::Geode *sphereGeode = new osg::Geode;
|
||||
//float radius = 0.5f;
|
||||
//osg::TessellationHints* hints = new osg::TessellationHints;
|
||||
//hints->setDetailRatio(0.9f);
|
||||
//osg::ShapeDrawable* sphere = new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0f, 0.0f, 0.0f), radius), hints);
|
||||
//sphereGeode->addDrawable(sphere);
|
||||
//sphere->setColor(osg::Vec4(0, 1, 0, 0.1));
|
||||
//osg::StateSet* stateset = sphereGeode->getOrCreateStateSet();
|
||||
//osg::BlendFunc *blend = new osg::BlendFunc;
|
||||
//blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
|
||||
//stateset->setAttributeAndModes(blend, osg::StateAttribute::ON);
|
||||
//pat->addChild(sphereGeode);
|
||||
//addChild(pat);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void ComputeNode::addDataMonitor(osg::Vec3 placement, osg::Vec3 relativePlacement, float scale, Channel colorchannel, BufferOffset shaderStorageBufferOffset, std::string labelCaption, float minDataRange, float maxDataRange)
|
||||
{
|
||||
osg::PositionAttitudeTransform* pat = new osg::PositionAttitudeTransform;
|
||||
pat->setPosition(relativePlacement);
|
||||
addChild(pat);
|
||||
osg::Geometry* geom;
|
||||
|
||||
if (NUM_ELEMENTS_X >= NUM_ELEMENTS_Y)
|
||||
{
|
||||
float ratio = (float)((float)NUM_ELEMENTS_Y / (float)NUM_ELEMENTS_X);
|
||||
geom = osg::createTexturedQuadGeometry(placement, osg::Vec3(1.0f*scale, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, ratio*1.0f*scale));
|
||||
}
|
||||
else
|
||||
{
|
||||
float ratio = (float)((float)NUM_ELEMENTS_X / (float)NUM_ELEMENTS_Y);
|
||||
geom = osg::createTexturedQuadGeometry(placement, osg::Vec3(ratio*1.0f*scale, 0.0f, 0.0f), osg::Vec3(0.0f, 0.0f, 1.0f*scale));
|
||||
|
||||
}
|
||||
|
||||
geom->setVertexAttribArray(1, geom->getTexCoordArray(0), osg::Array::BIND_PER_VERTEX);
|
||||
|
||||
osg::ref_ptr<osg::Geode> quad = new osg::Geode;
|
||||
quad->addDrawable(geom);
|
||||
quad->setStateSet(getOrCreateStateSet());
|
||||
pat->addChild(quad.get());
|
||||
|
||||
static const char* vertexShaderSrcChannelMonitor = {
|
||||
|
||||
"#version 430 \n"
|
||||
|
||||
"uniform int numRows;\n"
|
||||
"uniform int numCols;\n"
|
||||
"uniform float osg_FrameTime;\n"
|
||||
"uniform mat4 osg_ProjectionMatrix;\n"
|
||||
"uniform mat4 osg_ModelViewMatrix;\n"
|
||||
"out vec2 texCoordFromVertexShader;\n"
|
||||
"struct particle{ float x; float y; float z; float w;};"
|
||||
"layout (location = 0) in vec3 vertexpos;\n"
|
||||
"attribute vec2 tex_coords;\n"
|
||||
"void main() {\n"
|
||||
"texCoordFromVertexShader.xy = tex_coords.xy; gl_Position = ( osg_ProjectionMatrix * osg_ModelViewMatrix * vec4(vertexpos.x,vertexpos.y,vertexpos.z,1) ); \n"
|
||||
"}\n"
|
||||
};
|
||||
|
||||
|
||||
|
||||
|
||||
std::stringstream fragmentshaderstringstreamChannelMonitor;
|
||||
fragmentshaderstringstreamChannelMonitor << "#version 430\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "uniform int numRows;\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "uniform int numCols;\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "uniform float dataRangeMin;\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "uniform float dataRangeMax;\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "in vec2 texCoordFromVertexShader;\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "struct particle{ float x; float y; float z; float w;};";
|
||||
fragmentshaderstringstreamChannelMonitor << "layout(std140, binding=0) coherent buffer particles{particle p[];}; ";
|
||||
fragmentshaderstringstreamChannelMonitor << "\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "void main(void)\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "{\n";
|
||||
fragmentshaderstringstreamChannelMonitor << "ivec2 storePos = ivec2(numRows*texCoordFromVertexShader.x, numCols*texCoordFromVertexShader.y); particle particleData = p[" << shaderStorageBufferOffset * NUM_ELEMENTS_X*NUM_ELEMENTS_Y << " + (storePos.x*numRows + storePos.y)]; ";
|
||||
|
||||
//fragmentshaderstringstreamChannelMonitor << " memoryBarrierBuffer(); \n";
|
||||
fragmentshaderstringstreamChannelMonitor << " float dataRangeMultiplier = 1.0 / abs(dataRangeMax - dataRangeMin); \n";
|
||||
|
||||
switch (colorchannel)
|
||||
{
|
||||
case RED_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y =0.0; color.z = 0.0; color.w = 1.0; gl_FragColor = color;\n";
|
||||
|
||||
break;
|
||||
}
|
||||
case GREEN_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.0; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.0; color.w = 1.0; gl_FragColor = color;\n";
|
||||
break;
|
||||
}
|
||||
case BLUE_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.0; color.y = 0.0; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 0.0 ; gl_FragColor = color;\n";
|
||||
break;
|
||||
}
|
||||
case ALPHA_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.w; color.y = 0.5+dataRangeMultiplier*particleData.w; color.z = 0.5+dataRangeMultiplier*particleData.w; color.w = 0.5+0.5*particleData.w; gl_FragColor = color;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case RGB_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 1.0; gl_FragColor = color;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
case RGBA_CHANNEL:
|
||||
{
|
||||
fragmentshaderstringstreamChannelMonitor << " vec4 color; color.x = 0.5+dataRangeMultiplier*particleData.x; color.y = 0.5+dataRangeMultiplier*particleData.y; color.z = 0.5+dataRangeMultiplier*particleData.z; color.w = 0.5+0.5*particleData.w; gl_FragColor = color;\n";
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
fragmentshaderstringstreamChannelMonitor << "}\n";
|
||||
|
||||
|
||||
|
||||
|
||||
osg::Program * program = new osg::Program;
|
||||
program->addShader(new osg::Shader(osg::Shader::VERTEX, vertexShaderSrcChannelMonitor));
|
||||
program->addShader(new osg::Shader(osg::Shader::FRAGMENT, fragmentshaderstringstreamChannelMonitor.str().c_str()));
|
||||
program->addBindAttribLocation("tex_coords", 1);
|
||||
|
||||
osg::StateSet* ss = geom->getOrCreateStateSet();
|
||||
ss->setAttributeAndModes(program, osg::StateAttribute::ON);
|
||||
ss->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_X));
|
||||
ss->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_Y));
|
||||
|
||||
ss->addUniform(new osg::Uniform("dataRangeMin", (float)minDataRange));
|
||||
ss->addUniform(new osg::Uniform("dataRangeMax", (float)maxDataRange));
|
||||
|
||||
|
||||
ss->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
//add a label
|
||||
osg::ref_ptr<osgText::Text> text = new osgText::Text;
|
||||
osg::ref_ptr<osgText::Font> font = osgText::readRefFontFile("fonts/arial.ttf");
|
||||
text->setFont(font);
|
||||
text->setColor(osg::Vec4(1, 1, 1, 1));
|
||||
text->setCharacterSize(0.1*scale);
|
||||
text->setPosition(placement + osg::Vec3(0.05, 0.05, 0));
|
||||
pat->setName(labelCaption);
|
||||
text->setText(pat->getName());
|
||||
text->setBackdropType(osgText::Text::OUTLINE);
|
||||
text->setBackdropImplementation(osgText::Text::POLYGON_OFFSET);
|
||||
text->setBackdropOffset(0.05f);
|
||||
text->setBackdropColor(osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f));
|
||||
|
||||
quad->addDrawable(text);
|
||||
|
||||
pat->addChild(quad.get());
|
||||
|
||||
}
|
||||
|
||||
//compute texture image , taken from osgspotlight
|
||||
osg::Image* createSpotLightImage(const osg::Vec4& centerColour, const osg::Vec4& backgroudColour, unsigned int size, float power)
|
||||
{
|
||||
osg::Image* image = new osg::Image;
|
||||
image->allocateImage(size, size, 1,
|
||||
GL_RGBA, GL_UNSIGNED_BYTE);
|
||||
|
||||
|
||||
float mid = (float(size) - 1)*0.5f;
|
||||
float div = 2.0f / float(size);
|
||||
for (unsigned int r = 0; r < size; ++r)
|
||||
{
|
||||
unsigned char* ptr = image->data(0, r, 0);
|
||||
for (unsigned int c = 0; c < size; ++c)
|
||||
{
|
||||
float dx = (float(c) - mid)*div;
|
||||
float dy = (float(r) - mid)*div;
|
||||
float r = powf(1.0f - sqrtf(dx*dx + dy*dy), power);
|
||||
if (r < 0.0f) r = 0.0f;
|
||||
osg::Vec4 color = centerColour*r + backgroudColour*(1.0f - r);
|
||||
*ptr++ = (unsigned char)((color[0])*255.0f);
|
||||
*ptr++ = (unsigned char)((color[1])*255.0f);
|
||||
*ptr++ = (unsigned char)((color[2])*255.0f);
|
||||
*ptr++ = (unsigned char)((color[3])*255.0f);
|
||||
}
|
||||
}
|
||||
return image;
|
||||
}
|
||||
|
||||
|
||||
void ComputeNode::addComputationResultsRenderTree()
|
||||
{
|
||||
|
||||
_computationResultsRenderProgram = new osg::Program;
|
||||
|
||||
_vertexShader = osg::Shader::readShaderFile(osg::Shader::VERTEX, _vertexShaderSourcePath);
|
||||
_computationResultsRenderProgram->addShader(_vertexShader.get());
|
||||
|
||||
_geometryShader = osg::Shader::readShaderFile(osg::Shader::GEOMETRY, _geometryShaderSourcePath);
|
||||
_computationResultsRenderProgram->addShader(_geometryShader.get());
|
||||
|
||||
_fragmentShader = osg::Shader::readShaderFile(osg::Shader::FRAGMENT, _fragmentShaderSourcePath);
|
||||
_computationResultsRenderProgram->addShader(_fragmentShader.get());
|
||||
|
||||
|
||||
_computationResultsRenderProgram->addBindAttribLocation("tex_coords", 1);
|
||||
|
||||
_computationResultsRenderGroup = new osg::Group;
|
||||
_computationResultsRenderGroup->setDataVariance(osg::Object::DYNAMIC);
|
||||
_computationResultsRenderStateSet = _computationResultsRenderGroup->getOrCreateStateSet();
|
||||
_computationResultsRenderStateSet->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||
|
||||
osg::PointSprite *sprite = new osg::PointSprite;
|
||||
int texture_unit = 0;
|
||||
_computationResultsRenderStateSet->setTextureAttributeAndModes(texture_unit, sprite, osg::StateAttribute::ON);
|
||||
_computationResultsRenderStateSet->setAttributeAndModes(_computationResultsRenderProgram.get(), osg::StateAttribute::ON);
|
||||
_computationResultsRenderStateSet->addUniform(new osg::Uniform("particleTexture", texture_unit));
|
||||
_computationResultsRenderStateSet->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_X));
|
||||
_computationResultsRenderStateSet->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_Y));
|
||||
|
||||
|
||||
_computationResultsRenderStateSet->setMode(GL_POINT_SMOOTH, osg::StateAttribute::ON);
|
||||
_computationResultsRenderStateSet->setMode(GL_VERTEX_PROGRAM_POINT_SIZE_ARB, osg::StateAttribute::ON);
|
||||
_computationResultsRenderStateSet->setMode(GL_ALPHA_TEST, osg::StateAttribute::ON);
|
||||
_computationResultsRenderStateSet->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
osg::Texture2D *tex = new osg::Texture2D();
|
||||
|
||||
osg::Image* particleImage = createSpotLightImage(osg::Vec4(1, 0, 0, 1), osg::Vec4(0.5, 0, 0, 0.0), 32, 0.7);
|
||||
if (particleImage)
|
||||
{
|
||||
tex->setImage(particleImage);
|
||||
}
|
||||
_computationResultsRenderStateSet->setTextureAttributeAndModes(texture_unit, tex, osg::StateAttribute::ON);
|
||||
|
||||
|
||||
osg::BlendFunc *blend = new osg::BlendFunc;
|
||||
if (false) //emissive particles
|
||||
{
|
||||
blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE);
|
||||
}
|
||||
else
|
||||
{
|
||||
blend->setFunction(osg::BlendFunc::SRC_ALPHA, osg::BlendFunc::ONE_MINUS_SRC_ALPHA);
|
||||
}
|
||||
|
||||
_computationResultsRenderStateSet->setAttributeAndModes(blend, osg::StateAttribute::ON);
|
||||
|
||||
|
||||
osg::Depth* depth = new osg::Depth;
|
||||
depth->setRange(0.0f, 0.0f);
|
||||
depth->setFunction(osg::Depth::ALWAYS);
|
||||
depth->setWriteMask(false);
|
||||
depth->setFunction(osg::Depth::ALWAYS);
|
||||
|
||||
_computationResultsRenderStateSet->setAttributeAndModes(depth, osg::StateAttribute::OFF);
|
||||
|
||||
|
||||
osg::Geode* particleGeode = new osg::Geode;
|
||||
unsigned int numVertices = NUM_ELEMENTS_X*NUM_ELEMENTS_Y;
|
||||
|
||||
osg::Geometry* particleGeometry = new osg::Geometry;
|
||||
particleGeometry->setUseDisplayList(false);
|
||||
particleGeometry->setUseVertexBufferObjects(true);
|
||||
|
||||
osg::Vec3Array* vertexarray = new osg::Vec3Array;
|
||||
osg::Vec2Array* tcoords = new osg::Vec2Array;
|
||||
|
||||
osg::Vec2 bottom_texcoord(0.0f, 0.0f);
|
||||
|
||||
osg::Vec2 dx_texcoord(1.0f / (float)(NUM_ELEMENTS_X), 0.0f);
|
||||
osg::Vec2 dy_texcoord(0.0f, 1.0f / (float)(NUM_ELEMENTS_Y));
|
||||
|
||||
|
||||
|
||||
for (int i = 0; i < NUM_ELEMENTS_X; i++)
|
||||
{
|
||||
osg::Vec2 texcoord = bottom_texcoord + dy_texcoord*(float)i;
|
||||
|
||||
for (int j = 0; j < NUM_ELEMENTS_Y; j++)
|
||||
{
|
||||
vertexarray->push_back(osg::Vec3(texcoord.x(), texcoord.y(), 0.0));
|
||||
tcoords->push_back(osg::Vec2(texcoord.x(), texcoord.y()));
|
||||
texcoord += dx_texcoord;
|
||||
}
|
||||
}
|
||||
|
||||
particleGeometry->setVertexArray(vertexarray);
|
||||
particleGeometry->addPrimitiveSet(new osg::DrawArrays(GL_POINTS, 0, numVertices));
|
||||
particleGeometry->setTexCoordArray(0, tcoords);
|
||||
//this glMemoryBarrier thing... not sure if we could better do instanced drawing? all the data is in Shader Storage Buffer..
|
||||
particleGeometry->setVertexAttribArray(1, particleGeometry->getTexCoordArray(0), osg::Array::BIND_PER_VERTEX);
|
||||
|
||||
_computationResultsRenderGroup->addChild(particleGeode);
|
||||
particleGeode->addDrawable(particleGeometry);
|
||||
|
||||
addChild(_computationResultsRenderGroup.get());
|
||||
|
||||
}
|
||||
|
||||
|
||||
void ComputeNode::initComputingSetup()
|
||||
{
|
||||
|
||||
_computeProgram = new osg::Program;
|
||||
_computeProgram->setComputeGroups((NUM_ELEMENTS_X / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_X / WORK_GROUP_SIZE), (NUM_ELEMENTS_Y / WORK_GROUP_SIZE) <= 1 ? 1 : (NUM_ELEMENTS_Y / WORK_GROUP_SIZE), 1);
|
||||
_computeShader = osg::Shader::readShaderFile(osg::Shader::COMPUTE, _computeShaderSourcePath);
|
||||
_computeProgram->addShader(_computeShader.get());
|
||||
|
||||
setDataVariance(osg::Object::DYNAMIC);
|
||||
osg::StateSet* statesetComputation = getOrCreateStateSet();
|
||||
statesetComputation->setAttributeAndModes(_computeProgram.get());
|
||||
statesetComputation->addUniform(new osg::Uniform("numCols", (int)NUM_ELEMENTS_X));
|
||||
statesetComputation->addUniform(new osg::Uniform("numRows", (int)NUM_ELEMENTS_Y));
|
||||
statesetComputation->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
//blocksize
|
||||
int numParticles = NUM_ELEMENTS_X * NUM_ELEMENTS_Y;
|
||||
const unsigned blockSize = numParticles * __numChannels * __numDataValuesPerChannel* sizeof(GLfloat);
|
||||
|
||||
//init all the particle data array
|
||||
int idx = 0;
|
||||
_data = new GLfloat[NUM_ELEMENTS_X * NUM_ELEMENTS_Y * __numChannels * __numDataValuesPerChannel];
|
||||
_dataArray = new FloatArray;
|
||||
|
||||
//init the data array somehow, this way all is stored in one BufferObject. maybe better using multiple buffers instead? not sure what is faster and better for threading
|
||||
for (int d = 0; d < __numDataValuesPerChannel; ++d)
|
||||
{
|
||||
for (int i = 0; i < NUM_ELEMENTS_X; ++i)
|
||||
{
|
||||
|
||||
for (int j = 0; j < NUM_ELEMENTS_Y; ++j)
|
||||
{
|
||||
|
||||
for (int k = 0; k < __numChannels; ++k)
|
||||
{
|
||||
switch (k)
|
||||
{
|
||||
|
||||
case (RED_CHANNEL) :
|
||||
{
|
||||
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
|
||||
{
|
||||
*_data = random(0.25, 0.75);
|
||||
}
|
||||
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
|
||||
{
|
||||
*_data = random(-2.4, 2.4);
|
||||
}
|
||||
if (d == ACCELERATION_OFFSET) //acceleration
|
||||
{
|
||||
*_data = random(-3.0, 3.0);
|
||||
}
|
||||
|
||||
if (d == PROPERTIES_OFFSET) //property particle mass (compute shader is computing sphere mass from radius instead)
|
||||
{
|
||||
*_data = random(0.2, 15.0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case (GREEN_CHANNEL) :
|
||||
{
|
||||
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
|
||||
{
|
||||
*_data = random(0.25, 0.75);
|
||||
}
|
||||
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
|
||||
{
|
||||
*_data = random(-2.4, 2.4);
|
||||
}
|
||||
|
||||
if (d == ACCELERATION_OFFSET)//acceleration
|
||||
{
|
||||
*_data = random(-3.0, 3.0);
|
||||
}
|
||||
if (d == PROPERTIES_OFFSET) //property particle radius
|
||||
{
|
||||
*_data = random(0.07, 0.219);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case (BLUE_CHANNEL) :
|
||||
{
|
||||
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
|
||||
{
|
||||
*_data = random(0.25, 0.75);
|
||||
}
|
||||
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
|
||||
{
|
||||
*_data = random(-2.4, 2.4);
|
||||
}
|
||||
|
||||
if (d == ACCELERATION_OFFSET)//acceleration
|
||||
{
|
||||
*_data = random(-3.0, 3.0);
|
||||
}
|
||||
|
||||
|
||||
if (d == PROPERTIES_OFFSET) //place for some other property
|
||||
{
|
||||
*_data = random(0.0, 0.0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
case (ALPHA_CHANNEL) :
|
||||
{
|
||||
if ((d == POSITION_NOW_OFFSET) || (d == POSITION_OLD_OFFSET) || (d == POSITION_INIT_OFFSET))//position
|
||||
{
|
||||
*_data = random(1.0, 1.0);
|
||||
}
|
||||
if ((d == VELOCITY_NOW_OFFSET) || (d == VELOCITY_OLD_OFFSET) || (d == VELOCITY_INIT_OFFSET))//velocity
|
||||
{
|
||||
*_data = random(-2.4, 2.4);
|
||||
}
|
||||
|
||||
if (d == ACCELERATION_OFFSET) //acceleration
|
||||
{
|
||||
//*_data = random(1.0, 1.0);
|
||||
*_data = random(0.0, 0.0);
|
||||
}
|
||||
|
||||
if (d == PROPERTIES_OFFSET) //place for some other property
|
||||
{
|
||||
*_data = random(0.3, 0.3);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
_dataArray->push_back(*_data);
|
||||
_data++;
|
||||
idx++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
_ssbo = new osg::ShaderStorageBufferObject;
|
||||
_dataArray->setBufferObject(_ssbo.get());
|
||||
|
||||
|
||||
_ssbb = new osg::ShaderStorageBufferBinding(0, _ssbo.get(), 0, blockSize);
|
||||
statesetComputation->setAttributeAndModes(_ssbb.get(), osg::StateAttribute::ON);
|
||||
|
||||
|
||||
//option, do something useful with data or test the transfer speed
|
||||
//_ssbb->setUpdateCallback(new ShaderStorageBufferCallback);
|
||||
|
||||
//adding a quad , visualizing data in buffer
|
||||
addDataMonitor(osg::Vec3(0, -1, 0), osg::Vec3(SUB_PLACEMENT_OFFSET_HORIZONTAL * 0, -SUB_PLACEMENT_OFFSET_VERTICAL * -2.0, SUB_PLACEMENT_OFFSET_HORIZONTAL * 0), 1.0, RGB_CHANNEL, POSITION_NOW_OFFSET, "X,Y,Z - PositionNow", -1.0, 1.0);
|
||||
|
||||
//the coord from default dataset
|
||||
addHelperGeometry();
|
||||
|
||||
|
||||
addComputationResultsRenderTree();
|
||||
|
||||
}
|
||||
|
||||
|
||||
//taken from osgdistorsion example for getting it nice on screen with antialiasing
|
||||
osg::Node* createPrerenderSubgraph(osg::Node* subgraph, const osg::Vec4& clearColour)
|
||||
{
|
||||
osg::Group* prerenderNode = new osg::Group;
|
||||
|
||||
unsigned int tex_width = PRERENDER_WIDTH;
|
||||
unsigned int tex_height = PRERENDER_HEIGHT;
|
||||
|
||||
osg::Texture2D* texture = new osg::Texture2D;
|
||||
texture->setTextureSize(tex_width, tex_height);
|
||||
texture->setInternalFormat(GL_RGBA);
|
||||
texture->setFilter(osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR);
|
||||
texture->setFilter(osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR);
|
||||
|
||||
{
|
||||
osg::Camera* prerenderCamera = new osg::Camera;
|
||||
prerenderCamera->setClearColor(clearColour);
|
||||
prerenderCamera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||
prerenderCamera->setReferenceFrame(osg::Transform::RELATIVE_RF);
|
||||
prerenderCamera->setProjectionMatrix(osg::Matrixd::identity());
|
||||
prerenderCamera->setViewMatrix(osg::Matrixd::identity());
|
||||
prerenderCamera->setViewport(0, 0, tex_width, tex_height);
|
||||
prerenderCamera->setRenderOrder(osg::Camera::PRE_RENDER);
|
||||
prerenderCamera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
|
||||
prerenderCamera->attach(osg::Camera::COLOR_BUFFER0, texture, 0, 0, false, PRERENDER_ANTIALIASINGMULTISAMPLES, PRERENDER_ANTIALIASINGMULTISAMPLES);
|
||||
prerenderCamera->addChild(subgraph);
|
||||
prerenderNode->addChild(prerenderCamera);
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
osg::Geometry* polyGeom = new osg::Geometry();
|
||||
|
||||
polyGeom->setSupportsDisplayList(false);
|
||||
|
||||
osg::Vec3 origin(0.0f, 0.0f, 0.0f);
|
||||
osg::Vec3 xAxis(1.0f, 0.0f, 0.0f);
|
||||
osg::Vec3 yAxis(0.0f, 1.0f, 0.0f);
|
||||
|
||||
float height = 1024.0f;
|
||||
float width = 1280.0f;
|
||||
int noSteps = 3;
|
||||
|
||||
osg::Vec3Array* vertices = new osg::Vec3Array;
|
||||
osg::Vec2Array* texcoords = new osg::Vec2Array;
|
||||
osg::Vec4Array* colors = new osg::Vec4Array;
|
||||
|
||||
osg::Vec3 bottom = origin;
|
||||
osg::Vec3 dx = xAxis*(width / ((float)(noSteps - 1)));
|
||||
osg::Vec3 dy = yAxis*(height / ((float)(noSteps - 1)));
|
||||
|
||||
osg::Vec2 bottom_texcoord(0.0f, 0.0f);
|
||||
osg::Vec2 dx_texcoord(1.0f / (float)(noSteps - 1), 0.0f);
|
||||
osg::Vec2 dy_texcoord(0.0f, 1.0f / (float)(noSteps - 1));
|
||||
|
||||
int i, j;
|
||||
for (i = 0; i < noSteps; ++i)
|
||||
{
|
||||
osg::Vec3 cursor = bottom + dy*(float)i;
|
||||
osg::Vec2 texcoord = bottom_texcoord + dy_texcoord*(float)i;
|
||||
for (j = 0; j < noSteps; ++j)
|
||||
{
|
||||
vertices->push_back(cursor);
|
||||
texcoords->push_back(osg::Vec2((sin(texcoord.x()*osg::PI - osg::PI*0.5) + 1.0f)*0.5f, (sin(texcoord.y()*osg::PI - osg::PI*0.5) + 1.0f)*0.5f));
|
||||
colors->push_back(osg::Vec4(1.0f, 1.0f, 1.0f, 1.0f));
|
||||
cursor += dx;
|
||||
texcoord += dx_texcoord;
|
||||
}
|
||||
}
|
||||
|
||||
polyGeom->setVertexArray(vertices);
|
||||
polyGeom->setColorArray(colors, osg::Array::BIND_PER_VERTEX);
|
||||
polyGeom->setTexCoordArray(0, texcoords);
|
||||
|
||||
for (i = 0; i < noSteps - 1; ++i)
|
||||
{
|
||||
osg::DrawElementsUShort* elements = new osg::DrawElementsUShort(osg::PrimitiveSet::QUAD_STRIP);
|
||||
for (j = 0; j < noSteps; ++j)
|
||||
{
|
||||
elements->push_back(j + (i + 1)*noSteps);
|
||||
elements->push_back(j + (i)*noSteps);
|
||||
}
|
||||
polyGeom->addPrimitiveSet(elements);
|
||||
}
|
||||
|
||||
osg::StateSet* stateset = polyGeom->getOrCreateStateSet();
|
||||
stateset->setTextureAttributeAndModes(0, texture, osg::StateAttribute::ON);
|
||||
stateset->setMode(GL_LIGHTING, osg::StateAttribute::OFF);
|
||||
|
||||
osg::Geode* geode = new osg::Geode();
|
||||
geode->addDrawable(polyGeom);
|
||||
|
||||
osg::Camera* nestedRenderCamera = new osg::Camera;
|
||||
nestedRenderCamera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
|
||||
nestedRenderCamera->setViewMatrix(osg::Matrix::identity());
|
||||
nestedRenderCamera->setProjectionMatrixAsOrtho2D(0, 1280, 0, 1024);
|
||||
nestedRenderCamera->setRenderOrder(osg::Camera::NESTED_RENDER);
|
||||
nestedRenderCamera->addChild(geode);
|
||||
|
||||
prerenderNode->addChild(nestedRenderCamera);
|
||||
}
|
||||
|
||||
return prerenderNode;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
int main(int argc, char** argv)
|
||||
{
|
||||
osg::ArgumentParser arguments(&argc, argv);
|
||||
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
osg::ref_ptr<osg::Group> scene = new osg::Group;
|
||||
|
||||
|
||||
viewer.addEventHandler(new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()));
|
||||
viewer.addEventHandler(new osgViewer::StatsHandler);
|
||||
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
|
||||
viewer.addEventHandler(new osgViewer::ThreadingHandler);
|
||||
viewer.getCamera()->setProjectionMatrixAsPerspective(60.0f, 1.33333, 0.01, 100.0);
|
||||
viewer.setCameraManipulator(new osgGA::TrackballManipulator());
|
||||
|
||||
viewer.setUpViewInWindow(11, 11, 800 + 11, 600 + 11);
|
||||
//viewer.setUpViewOnSingleScreen(0); // !!
|
||||
|
||||
viewer.getCamera()->setClearColor(osg::Vec4(0.3, 0.3, 0.3, 1.0));
|
||||
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);// we can play with threading models later
|
||||
|
||||
osg::ref_ptr<ComputeNode> computeNode = new ComputeNode();
|
||||
computeNode->setPosition(osg::Vec3(0, 0, 0));
|
||||
computeNode->setUpdateCallback(new ComputeNodeUpdateCallback(computeNode.get())); // on-the-fly reloading the shaders if shader source on disk is changed
|
||||
computeNode->initComputingSetup();
|
||||
|
||||
|
||||
|
||||
scene->addChild(computeNode.get());
|
||||
scene->addChild(computeNode->_computationResultsRenderGroup.get());
|
||||
|
||||
|
||||
#ifdef PRERENDER_HIGH_QUALITY_ANTIALIASING
|
||||
viewer.setSceneData(createPrerenderSubgraph(scene.get(), osg::Vec4(0.3, 0.4, 0.6, 1)));
|
||||
#else
|
||||
viewer.setSceneData(scene.get());
|
||||
#endif
|
||||
|
||||
viewer.realize();
|
||||
|
||||
viewer.getCamera()->getGraphicsContext()->getState()->setUseModelViewAndProjectionUniforms(true);
|
||||
|
||||
viewer.run();
|
||||
|
||||
return 1;
|
||||
}
|
||||
@@ -56,7 +56,18 @@ public:
|
||||
traverse(node);
|
||||
}
|
||||
|
||||
void apply(osg::Drawable& drawable)
|
||||
void apply(osg::Geode& node)
|
||||
{
|
||||
if (!_useStateSets && node.getStateSet()) node.setStateSet(0);
|
||||
for(unsigned int i = 0; i<node.getNumDrawables(); ++i)
|
||||
{
|
||||
process(*node.getDrawable(i));
|
||||
}
|
||||
|
||||
traverse(node);
|
||||
}
|
||||
|
||||
void process(osg::Drawable& drawable)
|
||||
{
|
||||
if (!_useStateSets && drawable.getStateSet())
|
||||
{
|
||||
@@ -504,7 +515,7 @@ protected:
|
||||
optimizeVertexOrder = false;
|
||||
|
||||
reallocateMemory = false;
|
||||
|
||||
|
||||
modifyTextureSettings = false;
|
||||
buildImageMipmaps = false;
|
||||
compressImages = false;
|
||||
@@ -524,23 +535,22 @@ protected:
|
||||
bool optimizeVertexOrder;
|
||||
|
||||
bool reallocateMemory;
|
||||
|
||||
|
||||
bool modifyTextureSettings;
|
||||
bool buildImageMipmaps;
|
||||
bool compressImages;
|
||||
bool disableMipmaps;
|
||||
|
||||
};
|
||||
//
|
||||
//
|
||||
class DatabasePagingOperation : public osg::Operation, public osgUtil::IncrementalCompileOperation::CompileCompletedCallback
|
||||
{
|
||||
public:
|
||||
|
||||
DatabasePagingOperation(const std::string& filename,
|
||||
const std::string& outputFilename,
|
||||
SceneGraphProcessor* sceneGraphProcessor,
|
||||
SceneGraphProcessor* sceneGraphProcessor,
|
||||
osgUtil::IncrementalCompileOperation* ico):
|
||||
osg::Referenced(true),
|
||||
Operation("DatabasePaging Operation", false),
|
||||
_filename(filename),
|
||||
_outputFilename(outputFilename),
|
||||
@@ -555,7 +565,7 @@ public:
|
||||
osg::notify(osg::NOTICE)<<"LoadAndCompileOperation "<<_filename<<std::endl;
|
||||
|
||||
_modelReadyToMerge = false;
|
||||
_loadedModel = osgDB::readRefNodeFile(_filename);
|
||||
_loadedModel = osgDB::readNodeFile(_filename);
|
||||
|
||||
if (_loadedModel.valid())
|
||||
{
|
||||
@@ -570,7 +580,7 @@ public:
|
||||
if (!_outputFilename.empty())
|
||||
{
|
||||
OSG_NOTICE<<"Writing out file "<<_outputFilename<<std::endl;
|
||||
|
||||
|
||||
osgDB::writeNodeFile(*_loadedModel, _outputFilename);
|
||||
}
|
||||
|
||||
@@ -664,7 +674,7 @@ int main(int argc, char** argv)
|
||||
{
|
||||
apm->setTimeScale(animationSpeed);
|
||||
apm->setAnimationCompletedCallback(new ReportStatsAnimationCompletedCallback());
|
||||
|
||||
|
||||
unsigned int num = keyswitchManipulator->getNumMatrixManipulators();
|
||||
keyswitchManipulator->addMatrixManipulator( keyForAnimationPath, "Path", apm );
|
||||
keyswitchManipulator->selectMatrixManipulator(num);
|
||||
@@ -675,7 +685,7 @@ int main(int argc, char** argv)
|
||||
viewer.setCameraManipulator( keyswitchManipulator.get() );
|
||||
}
|
||||
|
||||
// set up event handlers
|
||||
// set up event handlers
|
||||
{
|
||||
viewer.addEventHandler( new osgViewer::StatsHandler());
|
||||
viewer.addEventHandler( new osgViewer::WindowSizeHandler() );
|
||||
@@ -797,7 +807,7 @@ int main(int argc, char** argv)
|
||||
if (databasePagingOperation.get() && databasePagingOperation->_modelReadyToMerge)
|
||||
{
|
||||
OSG_NOTICE<<"Merging subgraph"<<std::endl;
|
||||
|
||||
|
||||
timeOfLastMerge = currentTime;
|
||||
|
||||
group->removeChildren(0,group->getNumChildren());
|
||||
|
||||
@@ -136,9 +136,9 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
|
||||
|
||||
osg::AnimationPath* animationPath = createAnimationPath(center,radius,animationLength);
|
||||
|
||||
osg::ref_ptr<osg::Group> model = new osg::Group;
|
||||
osg::Group* model = new osg::Group;
|
||||
|
||||
osg::ref_ptr<osg::Node> glider = osgDB::readRefNodeFile("glider.osgt");
|
||||
osg::Node* glider = osgDB::readNodeFile("glider.osgt");
|
||||
if (glider)
|
||||
{
|
||||
const osg::BoundingSphere& bs = glider->getBound();
|
||||
@@ -159,7 +159,7 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
|
||||
model->addChild(xform);
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Node> cessna = osgDB::readRefNodeFile("cessna.osgt");
|
||||
osg::Node* cessna = osgDB::readNodeFile("cessna.osgt");
|
||||
if (cessna)
|
||||
{
|
||||
const osg::BoundingSphere& bs = cessna->getBound();
|
||||
@@ -173,26 +173,26 @@ osg::Node* createMovingModel(const osg::Vec3& center, float radius)
|
||||
|
||||
positioned->addChild(cessna);
|
||||
|
||||
osg::ref_ptr<osg::MatrixTransform> xform = new osg::MatrixTransform;
|
||||
osg::MatrixTransform* xform = new osg::MatrixTransform;
|
||||
xform->setUpdateCallback(new osg::AnimationPathCallback(animationPath,0.0f,2.0));
|
||||
xform->addChild(positioned);
|
||||
|
||||
model->addChild(xform);
|
||||
}
|
||||
|
||||
return model.release();
|
||||
return model;
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Group> createModel(bool overlay, osgSim::OverlayNode::OverlayTechnique technique)
|
||||
osg::Node* createModel(bool overlay, osgSim::OverlayNode::OverlayTechnique technique)
|
||||
{
|
||||
osg::Vec3 center(0.0f,0.0f,0.0f);
|
||||
float radius = 100.0f;
|
||||
|
||||
osg::ref_ptr<osg::Group> root = new osg::Group;
|
||||
osg::Group* root = new osg::Group;
|
||||
|
||||
float baseHeight = center.z()-radius*0.5;
|
||||
osg::ref_ptr<osg::Node> baseModel = createBase(osg::Vec3(center.x(), center.y(), baseHeight),radius);
|
||||
osg::ref_ptr<osg::Node> movingModel = createMovingModel(center,radius*0.8f);
|
||||
osg::Node* baseModel = createBase(osg::Vec3(center.x(), center.y(), baseHeight),radius);
|
||||
osg::Node* movingModel = createMovingModel(center,radius*0.8f);
|
||||
|
||||
if (overlay)
|
||||
{
|
||||
@@ -232,14 +232,14 @@ int main( int argc, char **argv )
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Group> model = createModel(overlay, technique);
|
||||
osg::Node* model = createModel(overlay, technique);
|
||||
if (!model)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
// tilt the scene so the default eye position is looking down on the model.
|
||||
osg::ref_ptr<osg::MatrixTransform> rootnode = new osg::MatrixTransform;
|
||||
osg::MatrixTransform* rootnode = new osg::MatrixTransform;
|
||||
rootnode->setMatrix(osg::Matrix::rotate(osg::inDegrees(30.0f),1.0f,0.0f,0.0f));
|
||||
rootnode->addChild(model);
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/* -*-c++-*-
|
||||
/* -*-c++-*-
|
||||
* Copyright (C) 2009 Cedric Pinson <cedric.pinson@plopbyte.net>
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*/
|
||||
|
||||
@@ -110,7 +110,7 @@ struct MyRigTransformHardware : public osgAnimation::RigTransformHardware
|
||||
|
||||
osg::notify(osg::INFO) << "set vertex attrib " << ss.str() << std::endl;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (int i = 0; i < nbAttribs; i++)
|
||||
{
|
||||
std::stringstream ss;
|
||||
@@ -134,7 +134,7 @@ struct SetupRigGeometry : public osg::NodeVisitor
|
||||
{
|
||||
bool _hardware;
|
||||
SetupRigGeometry( bool hardware = true) : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN), _hardware(hardware) {}
|
||||
|
||||
|
||||
void apply(osg::Geode& geode)
|
||||
{
|
||||
for (unsigned int i = 0; i < geode.getNumDrawables(); i++)
|
||||
@@ -173,7 +173,7 @@ osg::Group* createCharacterInstance(osg::Group* character, bool hardware)
|
||||
anim->playAnimation(list[v].get());
|
||||
v = (v + 1)%list.size();
|
||||
}
|
||||
|
||||
|
||||
anim->playAnimation(list[v].get());
|
||||
|
||||
SetupRigGeometry switcher(hardware);
|
||||
@@ -196,9 +196,9 @@ int main (int argc, char* argv[])
|
||||
while (psr.read("--software")) { hardware = false; }
|
||||
while (psr.read("--number", maxChar)) {}
|
||||
|
||||
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFiles(psr);
|
||||
osg::ref_ptr<osg::Group> root = dynamic_cast<osg::Group*>(node.get());
|
||||
if (!root)
|
||||
|
||||
osg::ref_ptr<osg::Group> root = dynamic_cast<osg::Group*>(osgDB::readNodeFiles(psr));
|
||||
if (!root)
|
||||
{
|
||||
std::cout << psr.getApplicationName() <<": No data loaded" << std::endl;
|
||||
return 1;
|
||||
@@ -206,7 +206,7 @@ int main (int argc, char* argv[])
|
||||
|
||||
{
|
||||
osgAnimation::AnimationManagerBase* animationManager = dynamic_cast<osgAnimation::AnimationManagerBase*>(root->getUpdateCallback());
|
||||
if(!animationManager)
|
||||
if(!animationManager)
|
||||
{
|
||||
osg::notify(osg::FATAL) << "no AnimationManagerBase found, updateCallback need to animate elements" << std::endl;
|
||||
return 1;
|
||||
@@ -218,13 +218,13 @@ int main (int argc, char* argv[])
|
||||
|
||||
// add the state manipulator
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
|
||||
|
||||
// add the thread model handler
|
||||
viewer.addEventHandler(new osgViewer::ThreadingHandler);
|
||||
|
||||
// add the window size toggle handler
|
||||
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
|
||||
|
||||
|
||||
// add the stats handler
|
||||
viewer.addEventHandler(new osgViewer::StatsHandler);
|
||||
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/* -*-c++-*-
|
||||
/* -*-c++-*-
|
||||
* Copyright (C) 2008 Cedric Pinson <mornifle@plopbyte.net>
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*/
|
||||
|
||||
@@ -33,11 +33,11 @@ struct GeometryFinder : public osg::NodeVisitor
|
||||
{
|
||||
osg::ref_ptr<osg::Geometry> _geom;
|
||||
GeometryFinder() : osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN) {}
|
||||
void apply(osg::Geode& geode)
|
||||
void apply(osg::Geode& geode)
|
||||
{
|
||||
if (_geom.valid())
|
||||
return;
|
||||
for (unsigned int i = 0; i < geode.getNumDrawables(); i++)
|
||||
for (unsigned int i = 0; i < geode.getNumDrawables(); i++)
|
||||
{
|
||||
osg::Geometry* geom = dynamic_cast<osg::Geometry*>(geode.getDrawable(i));
|
||||
if (geom) {
|
||||
@@ -50,7 +50,7 @@ struct GeometryFinder : public osg::NodeVisitor
|
||||
|
||||
osg::ref_ptr<osg::Geometry> getShape(const std::string& name)
|
||||
{
|
||||
osg::ref_ptr<osg::Node> shape0 = osgDB::readRefNodeFile(name);
|
||||
osg::ref_ptr<osg::Node> shape0 = osgDB::readNodeFile(name);
|
||||
if (shape0)
|
||||
{
|
||||
GeometryFinder finder;
|
||||
@@ -104,7 +104,7 @@ int main (int argc, char* argv[])
|
||||
|
||||
osg::Group* scene = new osg::Group;
|
||||
scene->addUpdateCallback(bam);
|
||||
|
||||
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
geode->addDrawable(morph);
|
||||
geode->addUpdateCallback(new osgAnimation::UpdateMorph("MorphNodeCallback"));
|
||||
|
||||
@@ -71,7 +71,7 @@ int main (int argc, char* argv[])
|
||||
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
|
||||
geode->addDrawable(new osg::ShapeDrawable(new osg::Box(osg::Vec3(0.0f,0.0f,0.0f),0.5)));
|
||||
|
||||
//Transformation to be manipulated by the animation
|
||||
//Tranformation to be manipulated by the animation
|
||||
osg::ref_ptr<osg::MatrixTransform> trans = new osg::MatrixTransform();
|
||||
trans->setName("AnimatedNode");
|
||||
//Dynamic object, has to be updated during update traversal
|
||||
@@ -84,7 +84,7 @@ int main (int argc, char* argv[])
|
||||
//The second element modifies the rotation around x-axis
|
||||
updatecb->getStackedTransforms().push_back(new osgAnimation::StackedTranslateElement("position"));
|
||||
updatecb->getStackedTransforms().push_back(new osgAnimation::StackedRotateAxisElement("euler",osg::Vec3(1,0,0),0));
|
||||
//connect the UpdateMatrixTransform callback to the MatrixTransform
|
||||
//connect the UpdateMatrixTransform callback to the MatrixTRanform
|
||||
trans->setUpdateCallback(updatecb);
|
||||
//initialize MatrixTranform
|
||||
trans->setMatrix(osg::Matrix::identity());
|
||||
@@ -102,7 +102,7 @@ int main (int argc, char* argv[])
|
||||
//add the rest of the scene to the grp node
|
||||
grp->addChild(root);
|
||||
|
||||
// And we finally define our channel for linear Vector interpolation
|
||||
// And we finaly define our channel for linear Vector interpolation
|
||||
osgAnimation::Vec3LinearChannel* channelAnimation1 = new osgAnimation::Vec3LinearChannel;
|
||||
//name of the AnimationUpdateCallback
|
||||
channelAnimation1->setTargetName("AnimatedCallback");
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
/* -*-c++-*-
|
||||
/* -*-c++-*-
|
||||
* Copyright (C) 2008 Cedric Pinson <cedric.pinson@plopbyte.net>
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*/
|
||||
|
||||
@@ -84,7 +84,7 @@ struct ExampleTimelineUsage : public osgGA::GUIEventHandler
|
||||
_scratchNose->setLoop(1); // one time
|
||||
|
||||
// add the main loop at priority 0 at time 0.
|
||||
|
||||
|
||||
osgAnimation::Timeline* tml = _manager->getTimeline();
|
||||
tml->play();
|
||||
tml->addActionAt(0.0, _mainLoop.get(), 0);
|
||||
@@ -98,9 +98,9 @@ struct ExampleTimelineUsage : public osgGA::GUIEventHandler
|
||||
{
|
||||
// we add a scratch head priority 1 each 10 second
|
||||
// note:
|
||||
// it's possible to add the same instance more than once on the timeline
|
||||
// it's possible to add the same instance more then once on the timeline
|
||||
// the only things you need to take care is if you remove it. It will remove
|
||||
// all instance that exist on the timeline. If you need to differentiate
|
||||
// all instance that exist on the timeline. If you need to differtiate
|
||||
// it's better to create a new instance
|
||||
tml->addActionAt(5.0 + 10.0 * i, _scratchHead.get(), 1);
|
||||
}
|
||||
@@ -139,12 +139,21 @@ struct ExampleTimelineUsage : public osgGA::GUIEventHandler
|
||||
}
|
||||
_releaseKey = false;
|
||||
}
|
||||
traverse(node, nv);
|
||||
}
|
||||
else
|
||||
{
|
||||
osgGA::GUIEventHandler::operator()(node, nv);
|
||||
}
|
||||
osgGA::EventVisitor* ev = dynamic_cast<osgGA::EventVisitor*>(nv);
|
||||
if (ev && ev->getActionAdapter() && !ev->getEvents().empty())
|
||||
{
|
||||
for(osgGA::EventQueue::Events::iterator itr = ev->getEvents().begin();
|
||||
itr != ev->getEvents().end();
|
||||
++itr)
|
||||
{
|
||||
handleWithCheckAgainstIgnoreHandledEventsMask(*(*itr), *(ev->getActionAdapter()), node, nv);
|
||||
}
|
||||
}
|
||||
}
|
||||
traverse(node, nv);
|
||||
}
|
||||
|
||||
};
|
||||
@@ -159,18 +168,17 @@ int main (int argc, char* argv[])
|
||||
osgViewer::Viewer viewer(psr);
|
||||
|
||||
std::string file = "nathan.osg";
|
||||
if(argc >= 2)
|
||||
if(argc >= 2)
|
||||
file = psr[1];
|
||||
|
||||
// replace the manager
|
||||
osg::ref_ptr<osg::Node> loadedmodel = osgDB::readRefNodeFile(file);
|
||||
osg::Group* root = dynamic_cast<osg::Group*>(loadedmodel.get());
|
||||
osg::Group* root = dynamic_cast<osg::Group*>(osgDB::readNodeFile(file));
|
||||
if (!root) {
|
||||
osg::notify(osg::FATAL) << "can't read file " << file << std::endl;
|
||||
return 1;
|
||||
}
|
||||
osgAnimation::AnimationManagerBase* animationManager = dynamic_cast<osgAnimation::AnimationManagerBase*>(root->getUpdateCallback());
|
||||
if(!animationManager)
|
||||
if(!animationManager)
|
||||
{
|
||||
osg::notify(osg::FATAL) << "Did not find AnimationManagerBase updateCallback needed to animate elements" << std::endl;
|
||||
return 1;
|
||||
@@ -178,22 +186,22 @@ int main (int argc, char* argv[])
|
||||
|
||||
osg::ref_ptr<osgAnimation::TimelineAnimationManager> tl = new osgAnimation::TimelineAnimationManager(*animationManager);
|
||||
root->setUpdateCallback(tl.get());
|
||||
|
||||
|
||||
ExampleTimelineUsage* callback = new ExampleTimelineUsage(tl.get());
|
||||
root->setEventCallback(callback);
|
||||
root->getUpdateCallback()->addNestedCallback(callback);
|
||||
|
||||
|
||||
|
||||
|
||||
// add the state manipulator
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
|
||||
|
||||
// add the thread model handler
|
||||
viewer.addEventHandler(new osgViewer::ThreadingHandler);
|
||||
|
||||
// add the window size toggle handler
|
||||
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
|
||||
|
||||
|
||||
// add the stats handler
|
||||
viewer.addEventHandler(new osgViewer::StatsHandler);
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include <osg/Geometry>
|
||||
#include <osg/MatrixTransform>
|
||||
#include <osg/Geode>
|
||||
#include <osgDB/FileNameUtils>
|
||||
#include <osgViewer/Viewer>
|
||||
#include <osgViewer/ViewerEventHandlers>
|
||||
#include <osgWidget/ViewerEventHandlers>
|
||||
@@ -127,8 +126,7 @@ int main(int argc, char** argv)
|
||||
osgViewer::Viewer viewer(arguments);
|
||||
osg::ref_ptr<osg::Group> group = new osg::Group();
|
||||
|
||||
osg::ref_ptr<osg::Node> loadedmodel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Group* node = dynamic_cast<osg::Group*>(loadedmodel.get());
|
||||
osg::Group* node = dynamic_cast<osg::Group*>(osgDB::readNodeFiles(arguments)); //dynamic_cast<osgAnimation::AnimationManager*>(osgDB::readNodeFile(psr[1]));
|
||||
if(!node)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
@@ -138,30 +136,10 @@ int main(int argc, char** argv)
|
||||
// Set our Singleton's model.
|
||||
AnimationManagerFinder finder;
|
||||
node->accept(finder);
|
||||
if (finder._am.valid())
|
||||
{
|
||||
|
||||
std::string playModeOpt;
|
||||
if (arguments.read("--play-mode", playModeOpt))
|
||||
{
|
||||
osgAnimation::Animation::PlayMode playMode = osgAnimation::Animation::LOOP;
|
||||
if (osgDB::equalCaseInsensitive(playModeOpt, "ONCE")) playMode = osgAnimation::Animation::ONCE;
|
||||
else if (osgDB::equalCaseInsensitive(playModeOpt, "STAY")) playMode = osgAnimation::Animation::STAY;
|
||||
else if (osgDB::equalCaseInsensitive(playModeOpt, "LOOP")) playMode = osgAnimation::Animation::LOOP;
|
||||
else if (osgDB::equalCaseInsensitive(playModeOpt, "PPONG")) playMode = osgAnimation::Animation::PPONG;
|
||||
|
||||
for (osgAnimation::AnimationList::const_iterator animIter = finder._am->getAnimationList().begin();
|
||||
animIter != finder._am->getAnimationList().end(); ++animIter)
|
||||
{
|
||||
(*animIter)->setPlayMode(playMode);
|
||||
}
|
||||
}
|
||||
|
||||
if (finder._am.valid()) {
|
||||
node->setUpdateCallback(finder._am.get());
|
||||
AnimtkViewerModelController::setModel(finder._am.get());
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
osg::notify(osg::WARN) << "no osgAnimation::AnimationManagerBase found in the subgraph, no animations available" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ int main(int argc, char** argv)
|
||||
viewer.addEventHandler(new osgViewer::ScreenCaptureHandler);
|
||||
|
||||
// load the data
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
if (!loadedModel)
|
||||
{
|
||||
osg::Geometry * quad = osg::createTexturedQuadGeometry(osg::Vec3f(-2.0f, 0.0f, -2.0f),
|
||||
|
||||
@@ -28,7 +28,7 @@
|
||||
#include <osgViewer/Viewer>
|
||||
#include <osgViewer/ViewerEventHandlers>
|
||||
#include <osgViewer/Renderer>
|
||||
|
||||
|
||||
#include <iostream>
|
||||
#include <sstream>
|
||||
|
||||
@@ -41,7 +41,7 @@ public:
|
||||
osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN),
|
||||
_foundNode(0)
|
||||
{}
|
||||
|
||||
|
||||
void apply(osg::Node& node)
|
||||
{
|
||||
T* result = dynamic_cast<T*>(&node);
|
||||
@@ -50,7 +50,7 @@ public:
|
||||
else
|
||||
traverse(node);
|
||||
}
|
||||
|
||||
|
||||
T* _foundNode;
|
||||
};
|
||||
|
||||
@@ -62,21 +62,21 @@ T* findTopMostNodeOfType(osg::Node* node)
|
||||
|
||||
FindTopMostNodeOfTypeVisitor<T> fnotv;
|
||||
node->accept(fnotv);
|
||||
|
||||
|
||||
return fnotv._foundNode;
|
||||
}
|
||||
|
||||
/** Capture the frame buffer and write image to disk*/
|
||||
class WindowCaptureCallback : public osg::Camera::DrawCallback
|
||||
{
|
||||
public:
|
||||
public:
|
||||
WindowCaptureCallback(GLenum readBuffer, const std::string& name):
|
||||
_readBuffer(readBuffer),
|
||||
_fileName(name)
|
||||
{
|
||||
_image = new osg::Image;
|
||||
}
|
||||
|
||||
|
||||
virtual void operator () (osg::RenderInfo& renderInfo) const
|
||||
{
|
||||
#if !defined(OSG_GLES1_AVAILABLE) && !defined(OSG_GLES2_AVAILABLE)
|
||||
@@ -93,9 +93,9 @@ public:
|
||||
|
||||
if (gc->getTraits()->alpha)
|
||||
pixelFormat = GL_RGBA;
|
||||
else
|
||||
else
|
||||
pixelFormat = GL_RGB;
|
||||
|
||||
|
||||
#if defined(OSG_GLES1_AVAILABLE) || defined(OSG_GLES2_AVAILABLE)
|
||||
if (pixelFormat == GL_RGB)
|
||||
{
|
||||
@@ -118,7 +118,7 @@ public:
|
||||
|
||||
_image->readPixels(0, 0, width, height, pixelFormat, GL_UNSIGNED_BYTE);
|
||||
}
|
||||
|
||||
|
||||
if (!_fileName.empty())
|
||||
{
|
||||
std::cout << "Writing to: " << _fileName << std::endl;
|
||||
@@ -126,7 +126,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
protected:
|
||||
protected:
|
||||
GLenum _readBuffer;
|
||||
std::string _fileName;
|
||||
osg::ref_ptr<osg::Image> _image;
|
||||
@@ -138,7 +138,7 @@ protected:
|
||||
class CustomRenderer : public osgViewer::Renderer
|
||||
{
|
||||
public:
|
||||
CustomRenderer(osg::Camera* camera)
|
||||
CustomRenderer(osg::Camera* camera)
|
||||
: osgViewer::Renderer(camera),
|
||||
_cullOnly(true)
|
||||
{
|
||||
@@ -162,19 +162,19 @@ public:
|
||||
{
|
||||
osgUtil::SceneView* sceneView = _sceneView[0].get();
|
||||
if (!sceneView || _done ) return;
|
||||
|
||||
|
||||
updateSceneView(sceneView);
|
||||
|
||||
|
||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(_camera->getView());
|
||||
if (view) sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue());
|
||||
|
||||
sceneView->inheritCullSettings(*(sceneView->getCamera()));
|
||||
sceneView->cull();
|
||||
}
|
||||
|
||||
|
||||
bool _cullOnly;
|
||||
};
|
||||
|
||||
|
||||
|
||||
//===============================================================
|
||||
// MAIN
|
||||
@@ -287,8 +287,8 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
// load the data
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
if (!loadedModel)
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
return 1;
|
||||
@@ -309,7 +309,7 @@ int main( int argc, char **argv )
|
||||
{
|
||||
osg::CoordinateSystemNode* csn = findTopMostNodeOfType<osg::CoordinateSystemNode>(loadedModel.get());
|
||||
if(!csn) return 1;
|
||||
|
||||
|
||||
// Compute eye point in world coordiantes
|
||||
osg::Vec3d eye;
|
||||
csn->getEllipsoidModel()->convertLatLongHeightToXYZ(lat, lon, alt, eye.x(), eye.y(), eye.z());
|
||||
@@ -331,11 +331,11 @@ int main( int argc, char **argv )
|
||||
osg::Vec3d up_cross_tangent = up ^ tangent;
|
||||
osg::Matrixd incline_matrix = osg::Matrixd::rotate(incline, up_cross_tangent);
|
||||
osg::Vec3d target = incline_matrix.preMult(tangent);
|
||||
|
||||
|
||||
// Roll by rotating the up vector around the target vector ...
|
||||
osg::Matrixd roll_matrix = incline_matrix * osg::Matrixd::rotate(roll, target);
|
||||
up = roll_matrix.preMult(up);
|
||||
|
||||
|
||||
viewer.getCamera()->setViewMatrixAsLookAt(eye, eye+target, up);
|
||||
}
|
||||
else
|
||||
@@ -349,10 +349,10 @@ int main( int argc, char **argv )
|
||||
keyswitchManipulator->addMatrixManipulator( '3', "Drive", new osgGA::DriveManipulator() );
|
||||
keyswitchManipulator->addMatrixManipulator( '4', "Terrain", new osgGA::TerrainManipulator() );
|
||||
|
||||
viewer.setCameraManipulator( keyswitchManipulator.get() );
|
||||
viewer.setCameraManipulator( keyswitchManipulator.get() );
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Optimize DatabasePager for auto-capture
|
||||
osgDB::DatabasePager* pager = viewer.getDatabasePager();
|
||||
pager->setDoPreCompile(false);
|
||||
@@ -374,9 +374,9 @@ int main( int argc, char **argv )
|
||||
|
||||
// Initiate the first PagedLOD request
|
||||
viewer.frame();
|
||||
|
||||
|
||||
osg::Timer_t beforeLoadTick = osg::Timer::instance()->tick();
|
||||
|
||||
|
||||
// Keep updating and culling until full level of detail is reached
|
||||
while(!viewer.done() && pager->getRequestsInProgress())
|
||||
{
|
||||
@@ -385,14 +385,14 @@ int main( int argc, char **argv )
|
||||
viewer.renderingTraversals();
|
||||
}
|
||||
// std::cout<<std::endl;
|
||||
|
||||
|
||||
osg::Timer_t afterLoadTick = osg::Timer::instance()->tick();
|
||||
std::cout<<"Load and Compile time = "<<osg::Timer::instance()->delta_s(beforeLoadTick, afterLoadTick)<<" seconds"<<std::endl;
|
||||
|
||||
// Do cull and draw to render the scene correctly
|
||||
customRenderer->setCullOnly(false);
|
||||
|
||||
|
||||
|
||||
|
||||
//--- Capture the image!!! ---
|
||||
if (!activeMode)
|
||||
{
|
||||
@@ -406,7 +406,7 @@ int main( int argc, char **argv )
|
||||
viewer.renderingTraversals();
|
||||
|
||||
osg::Timer_t afterRenderTick = osg::Timer::instance()->tick();
|
||||
std::cout<<"Rendering time = "<<osg::Timer::instance()->delta_s(beforeRenderTick, afterRenderTick) <<" seconds"<<std::endl;
|
||||
std::cout<<"Rendring time = "<<osg::Timer::instance()->delta_s(beforeRenderTick, afterRenderTick) <<" seconds"<<std::endl;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -42,10 +42,10 @@
|
||||
typedef std::vector< osg::ref_ptr<osg::Image> > ImageList;
|
||||
|
||||
/** create quad at specified position. */
|
||||
osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const osg::Vec3& height, osg::ref_ptr<osg::Image> image)
|
||||
osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const osg::Vec3& height, osg::Image* image=NULL)
|
||||
{
|
||||
// set up the Geometry.
|
||||
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
|
||||
osg::Geometry* geom = new osg::Geometry;
|
||||
|
||||
osg::Vec3Array* coords = new osg::Vec3Array(4);
|
||||
(*coords)[0] = corner;
|
||||
@@ -80,13 +80,13 @@ osg::Drawable* createSquare(const osg::Vec3& corner,const osg::Vec3& width,const
|
||||
geom->setStateSet(stateset);
|
||||
}
|
||||
|
||||
return geom.release();
|
||||
return geom;
|
||||
}
|
||||
|
||||
osg::Drawable* createAxis(const osg::Vec3& corner,const osg::Vec3& xdir,const osg::Vec3& ydir,const osg::Vec3& zdir)
|
||||
{
|
||||
// set up the Geometry.
|
||||
osg::ref_ptr<osg::Geometry> geom = new osg::Geometry;
|
||||
osg::Geometry* geom = new osg::Geometry;
|
||||
|
||||
osg::Vec3Array* coords = new osg::Vec3Array(6);
|
||||
(*coords)[0] = corner;
|
||||
@@ -121,20 +121,20 @@ osg::Drawable* createAxis(const osg::Vec3& corner,const osg::Vec3& xdir,const os
|
||||
stateset->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
|
||||
geom->setStateSet(stateset);
|
||||
|
||||
return geom.release();
|
||||
return geom;
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Node> createModel()
|
||||
osg::Node* createModel()
|
||||
{
|
||||
|
||||
// create the root node which will hold the model.
|
||||
osg::ref_ptr<osg::Group> root = new osg::Group();
|
||||
osg::Group* root = new osg::Group();
|
||||
|
||||
// add the drawable into a single geode to be shared...
|
||||
// add the drawable into a single goede to be shared...
|
||||
osg::Billboard* center = new osg::Billboard();
|
||||
center->setMode(osg::Billboard::POINT_ROT_EYE);
|
||||
center->addDrawable(
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Images/reflect.rgb")),
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Images/reflect.rgb")),
|
||||
osg::Vec3(0.0f,0.0f,0.0f));
|
||||
|
||||
osg::Billboard* x_arrow = new osg::Billboard();
|
||||
@@ -142,7 +142,7 @@ osg::ref_ptr<osg::Node> createModel()
|
||||
x_arrow->setAxis(osg::Vec3(1.0f,0.0f,0.0f));
|
||||
x_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f));
|
||||
x_arrow->addDrawable(
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posx.png")),
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posx.png")),
|
||||
osg::Vec3(5.0f,0.0f,0.0f));
|
||||
|
||||
osg::Billboard* y_arrow = new osg::Billboard();
|
||||
@@ -150,7 +150,7 @@ osg::ref_ptr<osg::Node> createModel()
|
||||
y_arrow->setAxis(osg::Vec3(0.0f,1.0f,0.0f));
|
||||
y_arrow->setNormal(osg::Vec3(1.0f,0.0f,0.0f));
|
||||
y_arrow->addDrawable(
|
||||
createSquare(osg::Vec3(0.0f,-0.5f,-0.5f),osg::Vec3(0.0f,1.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posy.png")),
|
||||
createSquare(osg::Vec3(0.0f,-0.5f,-0.5f),osg::Vec3(0.0f,1.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posy.png")),
|
||||
osg::Vec3(0.0f,5.0f,0.0f));
|
||||
|
||||
osg::Billboard* z_arrow = new osg::Billboard();
|
||||
@@ -158,7 +158,7 @@ osg::ref_ptr<osg::Node> createModel()
|
||||
z_arrow->setAxis(osg::Vec3(0.0f,0.0f,1.0f));
|
||||
z_arrow->setNormal(osg::Vec3(0.0f,-1.0f,0.0f));
|
||||
z_arrow->addDrawable(
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readRefImageFile("Cubemap_axis/posz.png")),
|
||||
createSquare(osg::Vec3(-0.5f,0.0f,-0.5f),osg::Vec3(1.0f,0.0f,0.0f),osg::Vec3(0.0f,0.0f,1.0f),osgDB::readImageFile("Cubemap_axis/posz.png")),
|
||||
osg::Vec3(0.0f,0.0f,5.0f));
|
||||
|
||||
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
#this file is automatically generated
|
||||
|
||||
|
||||
SET(TARGET_SRC osgblenddrawbuffers.cpp )
|
||||
SET(TARGET_ADDED_LIBRARIES osgGA )
|
||||
#### end var setup ###
|
||||
SETUP_EXAMPLE(osgblenddrawbuffers)
|
||||
@@ -1,155 +0,0 @@
|
||||
/* OpenSceneGraph example, osgblenddrawbuffers.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
* of this software and associated documentation files (the "Software"), to deal
|
||||
* in the Software without restriction, including without limitation the rights
|
||||
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
* copies of the Software, and to permit persons to whom the Software is
|
||||
* furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
* THE SOFTWARE.
|
||||
*/
|
||||
|
||||
#include <osg/Geometry>
|
||||
#include <osg/Geode>
|
||||
#include <osg/Camera>
|
||||
#include <osg/Texture2D>
|
||||
#include <osg/BlendFunci>
|
||||
#include <osg/ColorMaski>
|
||||
#include <osg/Capability>
|
||||
#include <osgDB/ReadFile>
|
||||
#include <osgViewer/Viewer>
|
||||
#include <iostream>
|
||||
|
||||
osg::Camera* createMRTCamera( std::vector<osg::Texture*>& attachedTextures )
|
||||
{
|
||||
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
|
||||
camera->setClearColor( osg::Vec4(0.0f, 0.0f, 0.0f, 1.0f) );
|
||||
camera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
|
||||
camera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT );
|
||||
camera->setRenderOrder( osg::Camera::PRE_RENDER );
|
||||
|
||||
for ( int i=0; i<4; ++i )
|
||||
{
|
||||
osg::Texture2D* tex = new osg::Texture2D;
|
||||
tex->setTextureSize( 1024, 1024 );
|
||||
tex->setInternalFormat( GL_RGBA );
|
||||
tex->setFilter( osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR );
|
||||
tex->setFilter( osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR );
|
||||
attachedTextures.push_back( tex );
|
||||
|
||||
camera->setViewport( 0, 0, tex->getTextureWidth(), tex->getTextureHeight() );
|
||||
camera->attach( osg::Camera::BufferComponent(osg::Camera::COLOR_BUFFER0+i), tex );
|
||||
}
|
||||
return camera.release();
|
||||
}
|
||||
|
||||
osg::Camera* createHUDCamera( double left, double right, double bottom, double top )
|
||||
{
|
||||
osg::ref_ptr<osg::Camera> camera = new osg::Camera;
|
||||
camera->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
|
||||
camera->setClearMask( GL_DEPTH_BUFFER_BIT );
|
||||
camera->setRenderOrder( osg::Camera::POST_RENDER );
|
||||
camera->setAllowEventFocus( false );
|
||||
camera->setProjectionMatrix( osg::Matrix::ortho2D(left, right, bottom, top) );
|
||||
camera->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
|
||||
return camera.release();
|
||||
}
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
osg::ArgumentParser arguments(&argc, argv);
|
||||
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName() + " is the example which demonstrates how to enable/disable blending on specified draw buffers in multi-rendering-target cases.");
|
||||
|
||||
std::vector<osg::Texture*> textures;
|
||||
bool useGlobalBlending = false;
|
||||
if ( arguments.read("--no-draw-buffers") ) useGlobalBlending = true;
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Node> cessna = osgDB::readRefNodeFile("cessna.osgt");
|
||||
if (!cessna)
|
||||
{
|
||||
OSG_NOTICE<<"Cannot not find model 'cessna.osg' to render"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Create a camera to output multi-rendering-targets (MRT)
|
||||
osg::ref_ptr<osg::Camera> mrtCam = createMRTCamera( textures );
|
||||
mrtCam->addChild( cessna );
|
||||
|
||||
// Create shader program to be used
|
||||
const char* mrtFragmentCode = {
|
||||
"void main() {\n"
|
||||
" gl_FragData[0] = gl_Color * vec4(1.0, 1.0, 1.0, 0.7);\n"
|
||||
" gl_FragData[1] = vec4(0.0, 1.0, 1.0, 0.0);\n"
|
||||
" gl_FragData[2] = vec4(1.0, 0.0, 1.0, 0.3);\n"
|
||||
" gl_FragData[3] = vec4(1.0, 1.0, 0.0, 1.0);\n"
|
||||
"}\n"
|
||||
};
|
||||
osg::ref_ptr<osg::Program> program = new osg::Program;
|
||||
program->addShader( new osg::Shader(osg::Shader::FRAGMENT, mrtFragmentCode) );
|
||||
|
||||
osg::ref_ptr<osg::StateSet> ss = mrtCam->getOrCreateStateSet();
|
||||
ss->setAttributeAndModes( program );
|
||||
|
||||
// Apply blending to the original scene in MRT
|
||||
if ( !useGlobalBlending )
|
||||
{
|
||||
// Only enable blending on the first draw buffer so other three outputs are
|
||||
// totally opaque, which is important for MRT cases
|
||||
ss->setAttribute( new osg::Enablei(GL_BLEND, 0) );
|
||||
ss->setAttribute( new osg::Disablei(GL_BLEND, 1) );
|
||||
ss->setAttribute( new osg::Disablei(GL_BLEND, 2) );
|
||||
ss->setAttribute( new osg::Disablei(GL_BLEND, 3) );
|
||||
|
||||
// Accept different blend/colormask attributes on multiple render targets
|
||||
osg::ref_ptr<osg::BlendFunci> blend0 = new osg::BlendFunci(0, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
osg::ref_ptr<osg::ColorMaski> colormask3 = new osg::ColorMaski(3, false, true, false, true);
|
||||
ss->setAttribute( blend0 );
|
||||
ss->setAttributeAndModes( colormask3 );
|
||||
}
|
||||
else
|
||||
{
|
||||
// When separated blending is disabled, all rendering targets will be affected
|
||||
// by its alpha channel and you will see each output blended with the background.
|
||||
//
|
||||
// This causes a big program in situations like deferred shading because we may
|
||||
// have to save different scene data to MRT 'GBuffer', in which alpha channels are
|
||||
// used to store certain attributes rather than opacity. These attributes can be
|
||||
// reused in following post-processing steps.
|
||||
//
|
||||
// For such targets, alpha blending must be disabled; otherwise it will mess the
|
||||
// output. That is why this example exists!
|
||||
osg::ref_ptr<osg::BlendFunc> blend = new osg::BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
ss->setAttributeAndModes( blend.get() );
|
||||
}
|
||||
|
||||
// Create some quads to be shown on screen to contain the MRT result
|
||||
osg::ref_ptr<osg::Geode> quad = new osg::Geode;
|
||||
for ( unsigned int i=0; i<textures.size(); ++i )
|
||||
{
|
||||
osg::Geometry* geom = osg::createTexturedQuadGeometry(
|
||||
osg::Vec3((float)i/(float)textures.size(), 0.0f, 0.0f),
|
||||
osg::Vec3(1.0f/(float)textures.size()-0.01f,0.0f,0.0f), osg::Vec3(0.0f,1.0f,0.0f) );
|
||||
geom->getOrCreateStateSet()->setTextureAttributeAndModes( 0, textures[i] );
|
||||
quad->addDrawable( geom );
|
||||
}
|
||||
|
||||
osg::Camera* hudCam = createHUDCamera( 0.0, 1.0, 0.0, 1.0 );
|
||||
hudCam->addChild( quad.get() );
|
||||
|
||||
// Construct scene graph and viewer
|
||||
osg::ref_ptr<osg::Group> root = new osg::Group;
|
||||
root->addChild( mrtCam );
|
||||
root->addChild( hudCam );
|
||||
|
||||
osgViewer::Viewer viewer;
|
||||
viewer.setSceneData( root.get() );
|
||||
return viewer.run();
|
||||
}
|
||||
@@ -82,7 +82,7 @@ protected:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
bool TechniqueEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&)
|
||||
{
|
||||
switch(ea.getEventType())
|
||||
@@ -104,7 +104,7 @@ bool TechniqueEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIAc
|
||||
_eq_index--;
|
||||
if (_eq_index<0) _eq_index=_eq_nb-1;
|
||||
_blendEq->setEquation(_equations[_eq_index]);
|
||||
std::cout<<"Equation name = "<<_equations_name[_eq_index]<<std::endl;
|
||||
std::cout<<"Operation name = "<<_equations_name[_eq_index]<<std::endl;
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
@@ -134,36 +134,36 @@ int main( int argc, char **argv )
|
||||
arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+" is the example which demonstrates how to use glBlendEquation for mixing rendered scene and the frame-buffer.");
|
||||
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] filename ...");
|
||||
arguments.getApplicationUsage()->addCommandLineOption("-h or --help","Display this information");
|
||||
|
||||
|
||||
// construct the viewer.
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cessnafire.osgt");
|
||||
|
||||
if (!loadedModel) loadedModel = osgDB::readNodeFile("cessnafire.osgt");
|
||||
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Group> root = new osg::Group;
|
||||
osg::Group* root = new osg::Group;
|
||||
root->addChild(loadedModel);
|
||||
|
||||
|
||||
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet;
|
||||
|
||||
|
||||
osg::StateSet* stateset = new osg::StateSet;
|
||||
stateset->setDataVariance(osg::Object::DYNAMIC);
|
||||
|
||||
|
||||
osg::BlendEquation* blendEquation = new osg::BlendEquation(osg::BlendEquation::FUNC_ADD);
|
||||
blendEquation->setDataVariance(osg::Object::DYNAMIC);
|
||||
|
||||
|
||||
stateset->setAttributeAndModes(blendEquation,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
|
||||
|
||||
|
||||
//tell to sort the mesh before displaying it
|
||||
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||
|
||||
loadedModel->setStateSet(stateset);
|
||||
|
||||
@@ -171,6 +171,6 @@ int main( int argc, char **argv )
|
||||
|
||||
// add a viewport to the viewer and attach the scene graph.
|
||||
viewer.setSceneData( root );
|
||||
|
||||
|
||||
return viewer.run();
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@
|
||||
class UpdateCallback : public osg::NodeCallback
|
||||
{
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
{
|
||||
std::cout<<"update callback - pre traverse"<<node<<std::endl;
|
||||
traverse(node,nv);
|
||||
std::cout<<"update callback - post traverse"<<node<<std::endl;
|
||||
@@ -48,7 +48,7 @@ class UpdateCallback : public osg::NodeCallback
|
||||
class CullCallback : public osg::NodeCallback
|
||||
{
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
{
|
||||
std::cout<<"cull callback - pre traverse"<<node<<std::endl;
|
||||
traverse(node,nv);
|
||||
std::cout<<"cull callback - post traverse"<<node<<std::endl;
|
||||
@@ -87,11 +87,11 @@ class InsertCallbacksVisitor : public osg::NodeVisitor
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
|
||||
InsertCallbacksVisitor():osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
virtual void apply(osg::Node& node)
|
||||
{
|
||||
node.setUpdateCallback(new UpdateCallback());
|
||||
@@ -102,7 +102,7 @@ class InsertCallbacksVisitor : public osg::NodeVisitor
|
||||
virtual void apply(osg::Geode& geode)
|
||||
{
|
||||
geode.setUpdateCallback(new UpdateCallback());
|
||||
|
||||
|
||||
//note, it makes no sense to attach a cull callback to the node
|
||||
//at there are no nodes to traverse below the geode, only
|
||||
//drawables, and as such the Cull node callbacks is ignored.
|
||||
@@ -116,7 +116,7 @@ class InsertCallbacksVisitor : public osg::NodeVisitor
|
||||
geode.getDrawable(i)->setDrawCallback(new DrawableDrawCallback());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
virtual void apply(osg::Transform& node)
|
||||
{
|
||||
apply((osg::Node&)node);
|
||||
@@ -140,7 +140,7 @@ public:
|
||||
class CameraUpdateCallback : public osg::NodeCallback
|
||||
{
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
{
|
||||
std::cout<<"Camera update callback - pre traverse"<<node<<std::endl;
|
||||
traverse(node,nv);
|
||||
std::cout<<"Camera update callback - post traverse"<<node<<std::endl;
|
||||
@@ -150,131 +150,50 @@ class CameraUpdateCallback : public osg::NodeCallback
|
||||
class CameraEventCallback : public osg::NodeCallback
|
||||
{
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
|
||||
{
|
||||
{
|
||||
std::cout<<"Camera event callback - pre traverse"<<node<<std::endl;
|
||||
traverse(node,nv);
|
||||
std::cout<<"Camera event callback - post traverse"<<node<<std::endl;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
struct TestDrawableUpdateCallback : public osg::Drawable::UpdateCallback
|
||||
{
|
||||
TestDrawableUpdateCallback(const std::string &message): _message(message) {}
|
||||
|
||||
virtual void update(osg::NodeVisitor*, osg::Drawable* drw) {
|
||||
printf("%s\n", _message.c_str());
|
||||
}
|
||||
std::string _message;
|
||||
};
|
||||
|
||||
struct TestNodeUpdateCallback : public osg::NodeCallback
|
||||
{
|
||||
TestNodeUpdateCallback(const std::string &message): _message(message) {}
|
||||
|
||||
virtual void operator()(osg::Node* node, osg::NodeVisitor* nv) {
|
||||
printf("%s\n", _message.c_str());
|
||||
}
|
||||
std::string _message;
|
||||
};
|
||||
|
||||
|
||||
int main( int argc, char **argv )
|
||||
{
|
||||
// use an ArgumentParser object to manage the program arguments.
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
|
||||
// set the osgDB::Registy read file callback to catch all requests for reading files.
|
||||
osgDB::Registry::instance()->setReadFileCallback(new MyReadFileCallback());
|
||||
|
||||
|
||||
// initialize the viewer.
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> rootnode;
|
||||
osg::Node* rootnode = osgDB::readNodeFiles(arguments);
|
||||
|
||||
if (arguments.read("--test"))
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!rootnode) rootnode = osgDB::readNodeFile("cow.osgt");
|
||||
|
||||
if (!rootnode)
|
||||
{
|
||||
osg::ref_ptr<osg::Group> root = new osg::Group();
|
||||
rootnode = root;
|
||||
|
||||
osg::Node *test1 = new osg::Node();
|
||||
test1->setUpdateCallback(new TestNodeUpdateCallback("test1"));
|
||||
root->addChild(test1);
|
||||
|
||||
osg::Drawable *test2 = new osg::Drawable();
|
||||
test2->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test2"));
|
||||
root->addChild(test2);
|
||||
|
||||
osg::Drawable *test3 = new osg::Drawable();
|
||||
test3->setUpdateCallback(new TestDrawableUpdateCallback("test3"));
|
||||
root->addChild(test3);
|
||||
|
||||
osg::Geode *test4 = new osg::Geode();
|
||||
osg::Drawable *drawable1 = new osg::Drawable();
|
||||
drawable1->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test4"));
|
||||
test4->addDrawable(drawable1);
|
||||
root->addChild(test4);
|
||||
|
||||
osg::Geode *test5 = new osg::Geode();
|
||||
osg::Drawable *drawable2 = new osg::Drawable();
|
||||
drawable2->setUpdateCallback(new TestDrawableUpdateCallback("test5"));
|
||||
test5->addDrawable(drawable2);
|
||||
root->addChild(test5);
|
||||
|
||||
osg::Geode *test6 = new osg::Geode();
|
||||
osg::Drawable *drawable3 = new osg::Drawable();
|
||||
drawable3->setUpdateCallback(new TestDrawableUpdateCallback("test6"));
|
||||
test6->addChild(drawable3);
|
||||
root->addChild(test6);
|
||||
|
||||
osg::Geode *test7 = new osg::Geode();
|
||||
osg::Drawable *drawable4 = new osg::Drawable();
|
||||
drawable4->osg::Node::setUpdateCallback(new TestNodeUpdateCallback("test7"));
|
||||
test7->addChild(drawable4);
|
||||
root->addChild(test7);
|
||||
|
||||
printf("Numchildren with updates %u\n", rootnode->getNumChildrenRequiringUpdateTraversal());
|
||||
osg::notify(osg::NOTICE)<<"Please specify a file on the command line"<<std::endl;
|
||||
|
||||
return 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
rootnode = osgDB::readRefNodeFiles(arguments);
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!rootnode) rootnode = osgDB::readRefNodeFile("cow.osgt");
|
||||
|
||||
if (!rootnode)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Please specify a file on the command line"<<std::endl;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// run optimization over the scene graph
|
||||
osgUtil::Optimizer optimzer;
|
||||
optimzer.optimize(rootnode.get());
|
||||
|
||||
// insert all the callbacks
|
||||
InsertCallbacksVisitor icv;
|
||||
rootnode->accept(icv);
|
||||
}
|
||||
|
||||
// run optimization over the scene graph
|
||||
osgUtil::Optimizer optimzer;
|
||||
optimzer.optimize(rootnode);
|
||||
|
||||
// insert all the callbacks
|
||||
InsertCallbacksVisitor icv;
|
||||
rootnode->accept(icv);
|
||||
|
||||
viewer.getCamera()->setUpdateCallback(new CameraUpdateCallback());
|
||||
viewer.getCamera()->setEventCallback(new CameraEventCallback());
|
||||
|
||||
// set the scene to render
|
||||
viewer.setSceneData(rootnode.get());
|
||||
viewer.setSceneData(rootnode);
|
||||
|
||||
viewer.setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
|
||||
viewer.realize();
|
||||
|
||||
while(!viewer.done())
|
||||
{
|
||||
OSG_NOTICE<<std::endl<<"New Frame"<<std::endl;
|
||||
viewer.frame();
|
||||
}
|
||||
|
||||
return 0;
|
||||
return viewer.run();
|
||||
}
|
||||
|
||||
@@ -25,50 +25,50 @@
|
||||
#include <osgGA/AnimationPathManipulator>
|
||||
#include <iostream>
|
||||
|
||||
class ModelHandler : public osgGA::GUIEventHandler
|
||||
class ModelHandler : public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
public:
|
||||
|
||||
ModelHandler():
|
||||
_position(0) {}
|
||||
|
||||
|
||||
typedef std::vector<std::string> Filenames;
|
||||
Filenames _filenames;
|
||||
unsigned int _position;
|
||||
|
||||
|
||||
void add(const std::string& filename) { _filenames.push_back(filename); }
|
||||
|
||||
|
||||
bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa)
|
||||
{
|
||||
osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
|
||||
if (!viewer) return false;
|
||||
|
||||
|
||||
if (_filenames.empty()) return false;
|
||||
|
||||
|
||||
switch(ea.getEventType())
|
||||
{
|
||||
case(osgGA::GUIEventAdapter::KEYUP):
|
||||
{
|
||||
if (ea.getKey()=='l')
|
||||
{
|
||||
osg::ref_ptr<osg::Node> model = osgDB::readRefNodeFile( _filenames[_position] );
|
||||
{
|
||||
osg::ref_ptr<osg::Node> model = osgDB::readNodeFile( _filenames[_position] );
|
||||
++_position;
|
||||
if (_position>=_filenames.size()) _position = 0;
|
||||
|
||||
|
||||
if (model.valid())
|
||||
{
|
||||
viewer->setSceneData(model.get());
|
||||
}
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
default: break;
|
||||
}
|
||||
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
bool _done;
|
||||
};
|
||||
|
||||
@@ -76,12 +76,12 @@ public:
|
||||
void singleWindowMultipleCameras(osgViewer::Viewer& viewer)
|
||||
{
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
if (!wsi)
|
||||
if (!wsi)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
unsigned int width, height;
|
||||
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
|
||||
|
||||
@@ -127,12 +127,12 @@ void singleWindowMultipleCameras(osgViewer::Viewer& viewer)
|
||||
void multipleWindowMultipleCameras(osgViewer::Viewer& viewer, bool multipleScreens)
|
||||
{
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
if (!wsi)
|
||||
if (!wsi)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
unsigned int width, height;
|
||||
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
|
||||
|
||||
@@ -198,7 +198,7 @@ int main( int argc, char **argv )
|
||||
// use an ArgumentParser object to manage the program arguments.
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
if (argc<2)
|
||||
if (argc<2)
|
||||
{
|
||||
std::cout << argv[0] <<": requires filename argument." << std::endl;
|
||||
return 1;
|
||||
@@ -214,7 +214,7 @@ int main( int argc, char **argv )
|
||||
osg::ref_ptr<osg::Node> model;
|
||||
if (sharedModel)
|
||||
{
|
||||
model = osgDB::readRefNodeFiles(arguments);
|
||||
model = osgDB::readNodeFiles(arguments);
|
||||
if (!model) return 0;
|
||||
|
||||
if (enableVBO)
|
||||
@@ -242,7 +242,7 @@ int main( int argc, char **argv )
|
||||
if (sharedModel) viewer.setSceneData(model.get());
|
||||
else
|
||||
{
|
||||
osg::ref_ptr<osg::Node> node = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> node = osgDB::readNodeFiles(arguments);
|
||||
if (!node) return 0;
|
||||
|
||||
if (enableVBO)
|
||||
@@ -268,19 +268,19 @@ int main( int argc, char **argv )
|
||||
while (arguments.read("-p",pathfile))
|
||||
{
|
||||
apm = new osgGA::AnimationPathManipulator(pathfile);
|
||||
if (!apm.valid() || !(apm->valid()) )
|
||||
if (!apm.valid() || !(apm->valid()) )
|
||||
{
|
||||
apm = 0;
|
||||
}
|
||||
}
|
||||
|
||||
osgViewer::Viewer viewer(arguments);
|
||||
|
||||
|
||||
while (arguments.read("-s")) { viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded); }
|
||||
while (arguments.read("-g")) { viewer.setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext); }
|
||||
while (arguments.read("-d")) { viewer.setThreadingModel(osgViewer::Viewer::DrawThreadPerContext); }
|
||||
while (arguments.read("-c")) { viewer.setThreadingModel(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext); }
|
||||
|
||||
|
||||
bool limitNumberOfFrames = false;
|
||||
unsigned int maxFrames = 10;
|
||||
while (arguments.read("--run-till-frame-number",maxFrames)) { limitNumberOfFrames = true; }
|
||||
@@ -292,7 +292,7 @@ int main( int argc, char **argv )
|
||||
|
||||
if (apm.valid()) viewer.setCameraManipulator(apm.get());
|
||||
else viewer.setCameraManipulator( new osgGA::TrackballManipulator() );
|
||||
|
||||
|
||||
viewer.addEventHandler(new osgViewer::StatsHandler);
|
||||
viewer.addEventHandler(new osgViewer::ThreadingHandler);
|
||||
|
||||
@@ -300,11 +300,11 @@ int main( int argc, char **argv )
|
||||
while (arguments.read("--config", configfile))
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Trying to read config file "<<configfile<<std::endl;
|
||||
osg::ref_ptr<osg::Object> object = osgDB::readRefObjectFile(configfile);
|
||||
osg::ref_ptr<osg::Object> object = osgDB::readObjectFile(configfile);
|
||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(object.get());
|
||||
if (view)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Read config file successfully"<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<"Read config file succesfully"<<std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -329,19 +329,19 @@ int main( int argc, char **argv )
|
||||
else
|
||||
{
|
||||
// load the scene.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
|
||||
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt");
|
||||
if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
|
||||
|
||||
if (!loadedModel)
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << argv[0] <<": No data loaded." << std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
viewer.setSceneData(loadedModel);
|
||||
viewer.setSceneData(loadedModel.get());
|
||||
}
|
||||
|
||||
|
||||
viewer.realize();
|
||||
|
||||
unsigned int numFrames = 0;
|
||||
|
||||
@@ -55,11 +55,11 @@ class Character : public osg::Referenced
|
||||
{
|
||||
public:
|
||||
Character();
|
||||
|
||||
|
||||
void setCharacter(const std::string& filename, const std::string& name, const osg::Vec3& orgin, const osg::Vec3& width, const osg::Vec3& catchPos, float positionRatio);
|
||||
|
||||
|
||||
void setLives(const std::string& filename, const osg::Vec3& orgin, const osg::Vec3& delta, unsigned int numLives);
|
||||
|
||||
|
||||
void setCatches(const std::string& filename, const osg::Vec3& orgin, const osg::Vec3& delta, unsigned int numLives);
|
||||
|
||||
void moveLeft();
|
||||
@@ -71,7 +71,7 @@ public:
|
||||
void resetCatches();
|
||||
|
||||
bool addCatch();
|
||||
|
||||
|
||||
bool looseLife();
|
||||
|
||||
osg::Vec3 getCurrentCenterOfBasket() const { return _character->getPosition()+_centerBasket; }
|
||||
@@ -91,12 +91,12 @@ public:
|
||||
|
||||
unsigned int _numCatches;
|
||||
osg::ref_ptr<osg::Switch> _catchSwitch;
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Group> _objectsGroup;
|
||||
|
||||
|
||||
osg::Vec3 _centerBasket;
|
||||
float _radiusBasket;
|
||||
|
||||
|
||||
};
|
||||
|
||||
Character::Character():
|
||||
@@ -117,7 +117,7 @@ void Character::setCharacter(const std::string& filename, const std::string& nam
|
||||
|
||||
float _characterSize = _width.length()*0.2f;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename);
|
||||
osg::Image* image = osgDB::readImageFile(filename);
|
||||
if (image)
|
||||
{
|
||||
osg::Vec3 pos(-0.5f*_characterSize,0.0f,0.0f);
|
||||
@@ -136,14 +136,14 @@ void Character::setCharacter(const std::string& filename, const std::string& nam
|
||||
_character = new osg::PositionAttitudeTransform;
|
||||
_character->setName(name);
|
||||
_character->addChild(geode);
|
||||
|
||||
|
||||
moveTo(positionRatio);
|
||||
|
||||
_centerBasket = width*catchPos.x() + height*catchPos.y() + pos;
|
||||
_radiusBasket = width.length()*catchPos.z();
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
void Character::setLives(const std::string& filename, const osg::Vec3& origin, const osg::Vec3& delta, unsigned int numLives)
|
||||
@@ -153,7 +153,7 @@ void Character::setLives(const std::string& filename, const osg::Vec3& origin, c
|
||||
_numLives = numLives;
|
||||
_livesSwitch = new osg::Switch;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename);
|
||||
osg::Image* image = osgDB::readImageFile(filename);
|
||||
if (image)
|
||||
{
|
||||
osg::StateSet* stateset = _livesSwitch->getOrCreateStateSet();
|
||||
@@ -186,7 +186,7 @@ void Character::setCatches(const std::string& filename, const osg::Vec3& origin,
|
||||
_numCatches = 0;
|
||||
_catchSwitch = new osg::Switch;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename);
|
||||
osg::Image* image = osgDB::readImageFile(filename);
|
||||
if (image)
|
||||
{
|
||||
osg::StateSet* stateset = _catchSwitch->getOrCreateStateSet();
|
||||
@@ -249,20 +249,20 @@ void Character::resetCatches()
|
||||
bool Character::addCatch()
|
||||
{
|
||||
if (!_catchSwitch || _numCatches>=_catchSwitch->getNumChildren()) return false;
|
||||
|
||||
|
||||
_catchSwitch->setValue(_numCatches,true);
|
||||
++_numCatches;
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
bool Character::looseLife()
|
||||
{
|
||||
if (!_livesSwitch || _numLives==0) return false;
|
||||
|
||||
|
||||
--_numLives;
|
||||
_livesSwitch->setValue(_numLives,false);
|
||||
|
||||
|
||||
return (_numLives!=0);
|
||||
}
|
||||
|
||||
@@ -279,21 +279,21 @@ class CatchableObject : public osg::Referenced
|
||||
bool anyInside(const osg::Vec3& lower_left, const osg::Vec3& top_right);
|
||||
|
||||
bool centerInside(const osg::Vec3& center, float radius);
|
||||
|
||||
|
||||
void explode();
|
||||
|
||||
|
||||
bool dangerous() { return _dangerous; }
|
||||
|
||||
void stop() { _stopped = true; }
|
||||
|
||||
|
||||
bool stopped() { return _stopped; }
|
||||
|
||||
|
||||
void setTimeToRemove(double time) { _timeToRemove=time; }
|
||||
|
||||
|
||||
double getTimeToRemove() { return _timeToRemove; }
|
||||
|
||||
|
||||
bool needToRemove(double time) { return _timeToRemove>=0.0 && time>_timeToRemove; }
|
||||
|
||||
|
||||
osg::ref_ptr<osg::PositionAttitudeTransform> _object;
|
||||
osg::Vec3 _velocity;
|
||||
float _mass;
|
||||
@@ -307,7 +307,7 @@ class CatchableObject : public osg::Referenced
|
||||
static void setUpCatchablesMap(const FileList& fileList);
|
||||
|
||||
public:
|
||||
|
||||
|
||||
// update position and velocity
|
||||
void update(double dt);
|
||||
|
||||
@@ -317,7 +317,7 @@ class CatchableObject : public osg::Referenced
|
||||
_viscosity = v;
|
||||
_viscosityCoefficient = 6 * osg::PI * _viscosity;
|
||||
}
|
||||
|
||||
|
||||
/// Get the viscosity of the fluid.
|
||||
inline float getFluidViscosity() const { return _viscosity; }
|
||||
|
||||
@@ -330,17 +330,17 @@ class CatchableObject : public osg::Referenced
|
||||
|
||||
/// Get the density of the fluid.
|
||||
inline float getFluidDensity() const { return _density; }
|
||||
|
||||
|
||||
|
||||
|
||||
/// Set the wind vector.
|
||||
inline void setWind(const osg::Vec3& wind) { _wind = wind; }
|
||||
|
||||
|
||||
/// Get the wind vector.
|
||||
inline const osg::Vec3& getWind() const { return _wind; }
|
||||
|
||||
|
||||
/// Set the acceleration vector.
|
||||
inline void setAcceleration(const osg::Vec3& v) { _acceleration = v; }
|
||||
|
||||
|
||||
/// Get the acceleration vector.
|
||||
inline const osg::Vec3& getAcceleration() const { return _acceleration; }
|
||||
|
||||
@@ -349,22 +349,22 @@ class CatchableObject : public osg::Referenced
|
||||
*/
|
||||
inline void setToGravity(float scale = 1.0f) { _acceleration.set(0, 0, -9.81f*scale); }
|
||||
|
||||
/// Set the fluid parameters as for air (20C temperature).
|
||||
/// Set the fluid parameters as for air (20<EFBFBD>C temperature).
|
||||
inline void setFluidToAir()
|
||||
{
|
||||
setToGravity(1.0f);
|
||||
setFluidDensity(1.2929f);
|
||||
setFluidViscosity(1.8e-5f);
|
||||
}
|
||||
|
||||
/// Set the fluid parameters as for pure water (20C temperature).
|
||||
|
||||
/// Set the fluid parameters as for pure water (20<EFBFBD>C temperature).
|
||||
inline void setFluidToWater()
|
||||
{
|
||||
setToGravity(1.0f);
|
||||
setFluidDensity(1.0f);
|
||||
setFluidViscosity(1.002e-3f);
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@@ -375,15 +375,15 @@ class CatchableObject : public osg::Referenced
|
||||
|
||||
float _viscosityCoefficient;
|
||||
float _densityCoefficeint;
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
CatchableObject::CatchableObject()
|
||||
{
|
||||
_stopped = false;
|
||||
_dangerous = false;
|
||||
|
||||
|
||||
_timeToRemove = -1.0; // do not remove.
|
||||
setFluidToAir();
|
||||
}
|
||||
@@ -395,14 +395,14 @@ void CatchableObject::setUpCatchablesMap(const FileList& fileList)
|
||||
++itr)
|
||||
{
|
||||
const std::string& filename = *itr;
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(filename);
|
||||
osg::Image* image = osgDB::readImageFile(filename);
|
||||
if (image)
|
||||
{
|
||||
osg::ref_ptr<osg::StateSet> stateset = new osg::StateSet();
|
||||
stateset->setTextureAttributeAndModes(0,new osg::Texture2D(image),osg::StateAttribute::ON);
|
||||
stateset->setMode(GL_BLEND,osg::StateAttribute::ON);
|
||||
stateset->setRenderingHint(osg::StateSet::TRANSPARENT_BIN);
|
||||
|
||||
|
||||
osg::Vec3 width((float)(image->s())/(float)(image->t()),0.0f,0.0);
|
||||
osg::Vec3 height(0.0f,0.0f,1.0f);
|
||||
osg::Vec3 pos = (width+height)*-0.5f;
|
||||
@@ -455,8 +455,8 @@ void CatchableObject::update(double dt)
|
||||
osg::Vec3 force = _acceleration * (_mass - _density*Volume);
|
||||
|
||||
// compute force due to friction
|
||||
osg::Vec3 relative_wind = _velocity-_wind;
|
||||
force -= relative_wind * Area * (_viscosityCoefficient + _densityCoefficeint*relative_wind.length());
|
||||
osg::Vec3 relative_wind = _velocity-_wind;
|
||||
force -= relative_wind * Area * (_viscosityCoefficient + _densityCoefficeint*relative_wind.length());
|
||||
|
||||
// divide force by mass to get acceleration.
|
||||
_velocity += force*(dt/_mass);
|
||||
@@ -466,7 +466,7 @@ void CatchableObject::update(double dt)
|
||||
bool CatchableObject::anyInside(const osg::Vec3& lower_left, const osg::Vec3& upper_right)
|
||||
{
|
||||
osg::Vec3 pos = _object->getPosition();
|
||||
|
||||
|
||||
if (pos.x()+_radius < lower_left.x()) return false;
|
||||
if (pos.x()-_radius > upper_right.x()) return false;
|
||||
if (pos.z()+_radius < lower_left.z()) return false;
|
||||
@@ -513,20 +513,20 @@ class GameEventHandler : public osgGA::GUIEventHandler
|
||||
public:
|
||||
|
||||
GameEventHandler();
|
||||
|
||||
|
||||
META_Object(osgStereImageApp,GameEventHandler);
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&);
|
||||
|
||||
|
||||
virtual void getUsage(osg::ApplicationUsage& usage) const;
|
||||
|
||||
|
||||
osg::Matrix getCameraPosition();
|
||||
|
||||
|
||||
void compileGLObjects(osg::State& state)
|
||||
{
|
||||
osgUtil::GLObjectsVisitor compile;
|
||||
compile.setState(&state);
|
||||
|
||||
|
||||
for(ObjectMap::iterator itr = s_objectMap.begin();
|
||||
itr != s_objectMap.end();
|
||||
++itr)
|
||||
@@ -534,14 +534,14 @@ public:
|
||||
itr->second->accept(compile);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
osg::Node* createScene();
|
||||
|
||||
|
||||
void setFOVY(float fovy) { _fovy = fovy; }
|
||||
float getFOVY() const { return _fovy; }
|
||||
|
||||
|
||||
void createNewCatchable();
|
||||
|
||||
|
||||
void clearCatchables()
|
||||
{
|
||||
for(CatchableObjectList::iterator itr=_catchableObjects.begin();
|
||||
@@ -562,7 +562,7 @@ public:
|
||||
|
||||
_catchableObjects.clear();
|
||||
}
|
||||
|
||||
|
||||
void resetLevel()
|
||||
{
|
||||
_level = 0;
|
||||
@@ -573,7 +573,7 @@ public:
|
||||
|
||||
_levelStartTick = osg::Timer::instance()->tick();
|
||||
}
|
||||
|
||||
|
||||
void nextLevel()
|
||||
{
|
||||
++_level;
|
||||
@@ -596,12 +596,12 @@ public:
|
||||
void resetGame()
|
||||
{
|
||||
_currentScore = 0;
|
||||
|
||||
|
||||
updateTextWithScore();
|
||||
|
||||
clearCatchables();
|
||||
resetLevel();
|
||||
|
||||
|
||||
for(unsigned int i=0;i<_numberOfPlayers;++i)
|
||||
{
|
||||
_players[i].reset();
|
||||
@@ -629,12 +629,12 @@ public:
|
||||
livesPosition = _originBaseLine+osg::Vec3(1000.0f,-0.5f,000.0f);
|
||||
catchesPosition = _originBaseLine+osg::Vec3(1100.0f,-0.5f,0.0f);
|
||||
}
|
||||
|
||||
|
||||
switch(player)
|
||||
{
|
||||
case PLAYER_GIRL:
|
||||
{
|
||||
std::string player_one = "Catch/girl.png";
|
||||
std::string player_one = "Catch/girl.png";
|
||||
osg::Vec3 catchPos(0.2, 0.57, 0.34);
|
||||
|
||||
_players[_numberOfPlayers].setCharacter(player_one,"girl", _originBaseLine + osg::Vec3(0.0f,-1.0f,0.0f), _widthBaseLine, catchPos, 0.5f);
|
||||
@@ -646,7 +646,7 @@ public:
|
||||
}
|
||||
case PLAYER_BOY:
|
||||
{
|
||||
std::string player_two = "Catch/boy.png";
|
||||
std::string player_two = "Catch/boy.png";
|
||||
osg::Vec3 catchPos(0.8, 0.57, 0.34);
|
||||
|
||||
_players[_numberOfPlayers].setCharacter(player_two,"boy", _originBaseLine + osg::Vec3(0.0f,-2.0f,0.0f), _widthBaseLine, catchPos, 0.5f);
|
||||
@@ -656,10 +656,10 @@ public:
|
||||
++_numberOfPlayers;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
typedef std::vector< osg::ref_ptr<osgText::Text> > TextList;
|
||||
|
||||
void updateScoreWithCatch()
|
||||
@@ -673,8 +673,8 @@ public:
|
||||
osg::Timer_t newTick = osg::Timer::instance()->tick();
|
||||
double timeForLevel = osg::Timer::instance()->delta_s(_levelStartTick, newTick);
|
||||
|
||||
// a ten second level gets you 10 points,
|
||||
// a twenty second levels gets you 5 points.
|
||||
// a ten second level gets you 10 points,
|
||||
// a twenty second levels gets you 5 points.
|
||||
_currentScore += static_cast<unsigned int>(10000.0f/(timeForLevel*timeForLevel));
|
||||
|
||||
updateTextWithScore();
|
||||
@@ -685,24 +685,24 @@ public:
|
||||
{
|
||||
std::ostringstream os;
|
||||
os<<"Score: "<<_currentScore;
|
||||
|
||||
|
||||
std::string textString = os.str();
|
||||
|
||||
|
||||
for(TextList::iterator itr = _scoreTextList.begin();
|
||||
itr != _scoreTextList.end();
|
||||
++itr)
|
||||
{
|
||||
(*itr)->setText(textString);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void updateLevelText()
|
||||
{
|
||||
std::ostringstream os;
|
||||
os<<"Level: "<<_level+1;
|
||||
_levelText->setText(os.str());
|
||||
}
|
||||
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
@@ -715,45 +715,45 @@ protected:
|
||||
osg::Vec3 _originBaseLine;
|
||||
osg::Vec3 _widthBaseLine;
|
||||
float _characterSize;
|
||||
|
||||
|
||||
float _fovy;
|
||||
|
||||
unsigned _level;
|
||||
|
||||
|
||||
float _chanceOfExplodingAtStart;
|
||||
float _initialNumDropsPerSecond;
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Switch> _gameSwitch;
|
||||
osg::ref_ptr<osg::Group> _gameGroup;
|
||||
osg::ref_ptr<osg::Switch> _levelSwitch;
|
||||
|
||||
|
||||
unsigned int _currentIndex;
|
||||
unsigned int _welcomeIndex;
|
||||
unsigned int _lostIndex;
|
||||
unsigned int _wonIndex;
|
||||
unsigned int _gameIndex;
|
||||
|
||||
|
||||
osg::Timer_t _levelStartTick;
|
||||
unsigned int _currentScore;
|
||||
|
||||
|
||||
osg::ref_ptr<osgText::Text> _levelText;
|
||||
TextList _scoreTextList;
|
||||
|
||||
|
||||
unsigned int _numberOfPlayers;
|
||||
Character _players[2];
|
||||
|
||||
typedef std::list< osg::ref_ptr<CatchableObject> > CatchableObjectList;
|
||||
CatchableObjectList _catchableObjects;
|
||||
|
||||
|
||||
FileList _backgroundFiles;
|
||||
FileList _benignCatachables;
|
||||
|
||||
bool _leftKeyPressed;
|
||||
bool _rightKeyPressed;
|
||||
|
||||
|
||||
osg::ref_ptr<CatchableObject> _dummyCatchable;
|
||||
|
||||
|
||||
|
||||
|
||||
};
|
||||
|
||||
|
||||
@@ -791,11 +791,11 @@ GameEventHandler::GameEventHandler()
|
||||
_benignCatachables.push_back("Catch/t.png");
|
||||
_benignCatachables.push_back("Catch/u.png");
|
||||
_benignCatachables.push_back("Catch/ball.png");
|
||||
|
||||
|
||||
CatchableObject::setUpCatchablesMap(_benignCatachables);
|
||||
|
||||
|
||||
_currentScore = 0;
|
||||
|
||||
|
||||
setFOVY(osg::DegreesToRadians(60.0));
|
||||
|
||||
}
|
||||
@@ -817,7 +817,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else if (_currentIndex==_lostIndex)
|
||||
{
|
||||
@@ -834,7 +834,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else if (_currentIndex==_wonIndex)
|
||||
{
|
||||
@@ -851,7 +851,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else if (_currentIndex==_gameIndex)
|
||||
{
|
||||
@@ -888,7 +888,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
for(unsigned int i=0;i<_numberOfPlayers;++i)
|
||||
{
|
||||
bool inBasket = ((*itr)->centerInside(_players[i].getCurrentCenterOfBasket(),_players[i].getCurrentRadiusOfBasket()));
|
||||
|
||||
|
||||
if ((*itr)->dangerous())
|
||||
{
|
||||
if ((*itr)->anyInside(_players[i].getLowerLeft(),_players[i].getUpperRight()) || inBasket)
|
||||
@@ -912,7 +912,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
{
|
||||
// player has caught a safe object.
|
||||
updateScoreWithCatch();
|
||||
|
||||
|
||||
if (!_players[i].addCatch())
|
||||
{
|
||||
_players[i].resetCatches();
|
||||
@@ -930,7 +930,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
}
|
||||
}
|
||||
|
||||
if (!(*itr)->anyInside(_origin, _origin+_width+_height) ||
|
||||
if (!(*itr)->anyInside(_origin, _origin+_width+_height) ||
|
||||
(*itr)->needToRemove(ea.getTime()) ||
|
||||
removeEntry)
|
||||
{
|
||||
@@ -968,7 +968,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
float numDropsPerSecond = _initialNumDropsPerSecond * (_level+1);
|
||||
float r = (float)rand()/(float)RAND_MAX;
|
||||
if (r < deltaTime*numDropsPerSecond)
|
||||
{
|
||||
{
|
||||
createNewCatchable();
|
||||
}
|
||||
|
||||
@@ -1015,7 +1015,7 @@ bool GameEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionA
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
return false;
|
||||
}
|
||||
|
||||
void GameEventHandler::getUsage(osg::ApplicationUsage&) const
|
||||
@@ -1026,9 +1026,9 @@ osg::Matrix GameEventHandler::getCameraPosition()
|
||||
{
|
||||
osg::Matrix cameraPosition;
|
||||
osg::Vec3 center = _origin+(_width+_height)*0.5f;
|
||||
|
||||
|
||||
float distance = _height.length()/(2.0f*tanf(_fovy*0.5f));
|
||||
|
||||
|
||||
cameraPosition.makeLookAt(center-osg::Vec3(0.0f,distance,0.0f),center,osg::Vec3(0.0f,0.0f,1.0f));
|
||||
return cameraPosition;
|
||||
}
|
||||
@@ -1036,8 +1036,8 @@ osg::Matrix GameEventHandler::getCameraPosition()
|
||||
osg::Node* GameEventHandler::createScene()
|
||||
{
|
||||
_gameSwitch = new osg::Switch;
|
||||
|
||||
// create a dummy catchable to load all the particule textures to reduce
|
||||
|
||||
// create a dummy catchable to load all the particule textures to reduce
|
||||
// latency later on..
|
||||
_dummyCatchable = new CatchableObject;
|
||||
_dummyCatchable->setObject("Catch/a.png","a",osg::Vec3(0.0f,0.0,0.0f),1.0f,osg::Vec3(0.0f,0.0,0.0f));
|
||||
@@ -1045,10 +1045,10 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
// set up welcome subgraph
|
||||
{
|
||||
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
|
||||
// set up the background
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/Welcome.jpg");
|
||||
osg::Image* image = osgDB::readImageFile("Catch/Welcome.jpg");
|
||||
if (image)
|
||||
{
|
||||
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
|
||||
@@ -1057,7 +1057,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(geometry);
|
||||
}
|
||||
|
||||
|
||||
// set up the text
|
||||
osg::Vec3 textPosition = _origin+_width*0.5f+_height*0.8f -osg::Vec3(0.0f,0.1f,0.0f);
|
||||
{
|
||||
@@ -1072,7 +1072,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(text);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
textPosition -= _height*0.25f;
|
||||
osgText::Text* text = new osgText::Text;
|
||||
@@ -1121,9 +1121,9 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
// set up you've lost subgraph
|
||||
{
|
||||
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/YouLost.jpg");
|
||||
osg::Image* image = osgDB::readImageFile("Catch/YouLost.jpg");
|
||||
if (image)
|
||||
{
|
||||
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
|
||||
@@ -1132,7 +1132,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(geometry);
|
||||
}
|
||||
|
||||
|
||||
// set up the text
|
||||
osg::Vec3 textPosition = _origin+_width*0.5f+_height*0.75f -osg::Vec3(0.0f,0.1f,0.0f);
|
||||
{
|
||||
@@ -1147,7 +1147,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(text);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
textPosition -= _height*0.25f;
|
||||
osgText::Text* text = new osgText::Text;
|
||||
@@ -1184,9 +1184,9 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
// set up you've won subgraph
|
||||
{
|
||||
osg::ref_ptr<osg::Geode> geode = new osg::Geode;
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Catch/YouWon.jpg");
|
||||
osg::Image* image = osgDB::readImageFile("Catch/YouWon.jpg");
|
||||
if (image)
|
||||
{
|
||||
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
|
||||
@@ -1195,7 +1195,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(geometry);
|
||||
}
|
||||
|
||||
|
||||
// set up the text
|
||||
osg::Vec3 textPosition = _origin+_width*0.5f+_height*0.75f -osg::Vec3(0.0f,0.1f,0.0f);
|
||||
{
|
||||
@@ -1210,7 +1210,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
geode->addDrawable(text);
|
||||
}
|
||||
|
||||
|
||||
{
|
||||
textPosition -= _height*0.25f;
|
||||
osgText::Text* text = new osgText::Text;
|
||||
@@ -1258,7 +1258,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
_gameGroup->addChild(_players[i]._character.get());
|
||||
_gameGroup->addChild(_players[i]._livesSwitch.get());
|
||||
_gameGroup->addChild(_players[i]._catchSwitch.get());
|
||||
}
|
||||
}
|
||||
|
||||
// background
|
||||
{
|
||||
@@ -1269,7 +1269,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
++itr)
|
||||
{
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(*itr);
|
||||
osg::Image* image = osgDB::readImageFile(*itr);
|
||||
if (image)
|
||||
{
|
||||
osg::Geometry* geometry = osg::createTexturedQuadGeometry(_origin,_width,_height);
|
||||
@@ -1305,7 +1305,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
geode->addDrawable(text);
|
||||
_scoreTextList.push_back(text);
|
||||
|
||||
|
||||
textPosition -= _height*0.05f;
|
||||
_levelText = new osgText::Text;
|
||||
_levelText->setText("Level : 0");
|
||||
@@ -1317,7 +1317,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
_levelText->setAxisAlignment(osgText::Text::XZ_PLANE);
|
||||
|
||||
geode->addDrawable(_levelText.get());
|
||||
|
||||
|
||||
|
||||
|
||||
_gameGroup->addChild(geode);
|
||||
@@ -1325,7 +1325,7 @@ osg::Node* GameEventHandler::createScene()
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
_currentIndex = _welcomeIndex;
|
||||
_gameSwitch->setSingleChildOn(_currentIndex);
|
||||
|
||||
@@ -1338,7 +1338,7 @@ void GameEventHandler::createNewCatchable()
|
||||
|
||||
unsigned int catachableIndex = (unsigned int)((float)_benignCatachables.size()*(float)rand()/(float)RAND_MAX);
|
||||
if (catachableIndex>=_benignCatachables.size()) catachableIndex = _benignCatachables.size()-1;
|
||||
|
||||
|
||||
const std::string& filename = _benignCatachables[catachableIndex];
|
||||
|
||||
float ratio = ((float)rand() / (float)RAND_MAX);
|
||||
@@ -1356,7 +1356,7 @@ void GameEventHandler::createNewCatchable()
|
||||
float r = (float)rand() / (float)RAND_MAX;
|
||||
if (r < _chanceOfExplodingAtStart)
|
||||
{
|
||||
catchableObject->explode();
|
||||
catchableObject->explode();
|
||||
}
|
||||
|
||||
_gameGroup->addChild(catchableObject->_object.get());
|
||||
@@ -1366,10 +1366,9 @@ class CompileStateCallback : public osg::Operation
|
||||
{
|
||||
public:
|
||||
CompileStateCallback(GameEventHandler* eh):
|
||||
osg::Referenced(true),
|
||||
osg::Operation("CompileStateCallback", false),
|
||||
_gameEventHandler(eh) {}
|
||||
|
||||
|
||||
virtual void operator () (osg::Object* object)
|
||||
{
|
||||
osg::GraphicsContext* context = dynamic_cast<osg::GraphicsContext*>(object);
|
||||
@@ -1380,7 +1379,7 @@ class CompileStateCallback : public osg::Operation
|
||||
_gameEventHandler->compileGLObjects(*(context->getState()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
OpenThreads::Mutex _mutex;
|
||||
GameEventHandler* _gameEventHandler;
|
||||
};
|
||||
@@ -1390,7 +1389,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()->setDescription(arguments.getApplicationName()+" is the example which demonstrates use node masks to create stereo images.");
|
||||
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" [options] image_file_left_eye image_file_right_eye");
|
||||
@@ -1410,8 +1409,8 @@ int main( int argc, char **argv )
|
||||
|
||||
while (arguments.read("--boy")) seh->addPlayer(GameEventHandler::PLAYER_BOY);
|
||||
while (arguments.read("--girl")) seh->addPlayer(GameEventHandler::PLAYER_GIRL);
|
||||
|
||||
|
||||
|
||||
|
||||
// if user request help write it out to cout.
|
||||
if (arguments.read("-h") || arguments.read("--help"))
|
||||
{
|
||||
@@ -1428,8 +1427,8 @@ int main( int argc, char **argv )
|
||||
arguments.writeErrorMessages(std::cout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// enable the image cache so we don't need to keep loading the particle files
|
||||
osgDB::ReaderWriter::Options* options = new osgDB::ReaderWriter::Options;
|
||||
options->setObjectCacheHint(osgDB::ReaderWriter::Options::CACHE_IMAGES);
|
||||
@@ -1454,7 +1453,7 @@ int main( int argc, char **argv )
|
||||
|
||||
double fovy, aspectRatio, zNear, zFar;
|
||||
viewer.getCamera()->getProjectionMatrixAsPerspective(fovy, aspectRatio, zNear, zFar);
|
||||
seh->setFOVY(osg::DegreesToRadians(fovy));
|
||||
seh->setFOVY(osg::DegreesToRadians(fovy));
|
||||
|
||||
// todo for osgViewer - create default set up.
|
||||
viewer.setUpViewAcrossAllScreens();
|
||||
@@ -1472,7 +1471,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
// todo for osgViewer - implement warp pointer that can be done relative to different coordinate frames
|
||||
// viewer.requestWarpPointer(0.5f,0.5f);
|
||||
// viewer.requestWarpPointer(0.5f,0.5f);
|
||||
|
||||
while( !viewer.done() )
|
||||
{
|
||||
@@ -1480,8 +1479,8 @@ int main( int argc, char **argv )
|
||||
|
||||
// fire off the cull and draw traversals of the scene.
|
||||
viewer.frame();
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -40,9 +40,10 @@
|
||||
#include <osgUtil/Optimizer>
|
||||
|
||||
|
||||
osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& subgraph)
|
||||
osg::Node* decorate_with_clip_node(osg::Node* subgraph)
|
||||
{
|
||||
osg::ref_ptr<osg::Group> rootnode = new osg::Group;
|
||||
osg::Group* rootnode = new osg::Group;
|
||||
|
||||
|
||||
// create wireframe view of the model so the user can see
|
||||
// what parts are being culled away.
|
||||
@@ -51,14 +52,14 @@ osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& s
|
||||
osg::PolygonMode* polymode = new osg::PolygonMode;
|
||||
polymode->setMode(osg::PolygonMode::FRONT_AND_BACK,osg::PolygonMode::LINE);
|
||||
stateset->setAttributeAndModes(polymode,osg::StateAttribute::OVERRIDE|osg::StateAttribute::ON);
|
||||
|
||||
|
||||
osg::Group* wireframe_subgraph = new osg::Group;
|
||||
wireframe_subgraph->setStateSet(stateset);
|
||||
wireframe_subgraph->addChild(subgraph);
|
||||
rootnode->addChild(wireframe_subgraph);
|
||||
|
||||
/*
|
||||
// simple approach to adding a clipnode above a subgraph.
|
||||
// simple approach to adding a clipnode above a subrgaph.
|
||||
|
||||
// create clipped part.
|
||||
osg::ClipNode* clipped_subgraph = new osg::ClipNode;
|
||||
@@ -77,9 +78,9 @@ osg::ref_ptr<osg::Node> decorate_with_clip_node(const osg::ref_ptr<osg::Node>& s
|
||||
|
||||
|
||||
// more complex approach to managing ClipNode, allowing
|
||||
// ClipNode node to be transformed independently from the subgraph
|
||||
// ClipNode node to be transformed independantly from the subgraph
|
||||
// that it is clipping.
|
||||
|
||||
|
||||
osg::MatrixTransform* transform= new osg::MatrixTransform;
|
||||
|
||||
osg::NodeCallback* nc = new osg::AnimationPathCallback(subgraph->getBound().center(),osg::Vec3(0.0f,0.0f,1.0f),osg::inDegrees(45.0f));
|
||||
@@ -116,28 +117,28 @@ int main( int argc, char **argv )
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
|
||||
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt");
|
||||
if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
|
||||
|
||||
|
||||
if (!loadedModel)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Please specify a filename on the command line"<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<"Please specifiy a filename and the command line"<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// decorate the scenegraph with a clip node.
|
||||
osg::ref_ptr<osg::Node> rootnode = decorate_with_clip_node(loadedModel);
|
||||
|
||||
osg::Node* rootnode = decorate_with_clip_node(loadedModel);
|
||||
|
||||
// run optimization over the scene graph
|
||||
osgUtil::Optimizer optimzer;
|
||||
optimzer.optimize(rootnode);
|
||||
|
||||
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
|
||||
// set the scene to render
|
||||
viewer.setSceneData(rootnode);
|
||||
|
||||
|
||||
@@ -45,8 +45,6 @@
|
||||
#include <net/soioctl.h>
|
||||
#elif defined(__CYGWIN__)
|
||||
#include <unistd.h>
|
||||
#elif defined (__GNU__)
|
||||
#include <unistd.h>
|
||||
#elif defined(__sun)
|
||||
#include <unistd.h>
|
||||
#include <sys/sockio.h>
|
||||
|
||||
@@ -44,6 +44,7 @@
|
||||
#include "broadcaster.h"
|
||||
|
||||
|
||||
const unsigned int MAX_NUM_EVENTS = 10;
|
||||
const unsigned int SWAP_BYTES_COMPARE = 0x12345678;
|
||||
class CameraPacket {
|
||||
public:
|
||||
@@ -375,8 +376,7 @@ class DataConverter
|
||||
itr != cameraPacket._events.end();
|
||||
++itr)
|
||||
{
|
||||
osgGA::GUIEventAdapter* event = (*itr)->asGUIEventAdapter();
|
||||
if (event) write(*event);
|
||||
write(*(*itr));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -505,7 +505,7 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
// load model.
|
||||
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> rootnode = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// set the scene to render
|
||||
viewer.setSceneData(rootnode.get());
|
||||
@@ -614,7 +614,7 @@ int main( int argc, char **argv )
|
||||
|
||||
osg::notify(osg::INFO)<<"Time to do cluster sync "<<osg::Timer::instance()->delta_m(startTick,endTick)<<std::endl;
|
||||
|
||||
// update the scene by traversing it with the update visitor which will
|
||||
// update the scene by traversing it with the the update visitor which will
|
||||
// call all node update callbacks and animations.
|
||||
viewer.eventTraversal();
|
||||
viewer.updateTraversal();
|
||||
|
||||
@@ -122,7 +122,7 @@ void Receiver::sync( void )
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ ) || defined(__FreeBSD_kernel__) || defined(__GNU__)
|
||||
#if defined(__linux) || defined(__FreeBSD__) || defined( __APPLE__ )
|
||||
socklen_t size;
|
||||
#else
|
||||
int size;
|
||||
|
||||
@@ -133,7 +133,7 @@ int main( int argc, char **argv )
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
// read the scene from the list of file specified commandline args.
|
||||
osg::ref_ptr<osg::Node> scene = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles(arguments);
|
||||
|
||||
if (!scene)
|
||||
{
|
||||
@@ -149,7 +149,7 @@ int main( int argc, char **argv )
|
||||
{
|
||||
osgViewer::View* view = new osgViewer::View;
|
||||
view->setName("Single view");
|
||||
view->setSceneData(osgDB::readRefNodeFile("fountain.osgt"));
|
||||
view->setSceneData(osgDB::readNodeFile("fountain.osgt"));
|
||||
|
||||
view->addEventHandler( new osgViewer::StatsHandler );
|
||||
|
||||
@@ -283,7 +283,7 @@ int main( int argc, char **argv )
|
||||
view->setName("View three");
|
||||
viewer.addView(view);
|
||||
|
||||
view->setSceneData(osgDB::readRefNodeFile("cessnafire.osgt"));
|
||||
view->setSceneData(osgDB::readNodeFile("cessnafire.osgt"));
|
||||
|
||||
view->getCamera()->setName("Cam three");
|
||||
view->getCamera()->setProjectionMatrixAsPerspective(30.0, double(traits->width) / double(traits->height/2), 1.0, 1000.0);
|
||||
|
||||
@@ -43,7 +43,7 @@ static const char* computeSrc = {
|
||||
int main( int argc, char** argv )
|
||||
{
|
||||
osg::ArgumentParser arguments( &argc, argv );
|
||||
|
||||
|
||||
// Create the texture as both the output of compute shader and the input of a normal quad
|
||||
osg::ref_ptr<osg::Texture2D> tex2D = new osg::Texture2D;
|
||||
tex2D->setTextureSize( 512, 512 );
|
||||
@@ -53,23 +53,23 @@ int main( int argc, char** argv )
|
||||
tex2D->setSourceFormat( GL_RED );
|
||||
tex2D->setSourceType( GL_FLOAT );
|
||||
tex2D->bindToImageUnit( 0, osg::Texture::WRITE_ONLY ); // So we can use 'image2D' in the compute shader
|
||||
|
||||
|
||||
// The compute shader can't work with other kinds of shaders
|
||||
// It also requires the work group numbers. Setting them to 0 will disable the compute shader
|
||||
osg::ref_ptr<osg::Program> computeProg = new osg::Program;
|
||||
computeProg->setComputeGroups( 512/16, 512/16, 1 );
|
||||
computeProg->addShader( new osg::Shader(osg::Shader::COMPUTE, computeSrc) );
|
||||
|
||||
|
||||
// Create a node for outputting to the texture.
|
||||
// It is OK to have just an empty node here, but seems inbuilt uniforms like osg_FrameTime won't work then.
|
||||
// TODO: maybe we can have a custom drawable which also will implement glMemoryBarrier?
|
||||
osg::ref_ptr<osg::Node> sourceNode = osgDB::readRefNodeFile("axes.osgt");
|
||||
osg::Node* sourceNode = osgDB::readNodeFile("axes.osgt");
|
||||
if ( !sourceNode ) sourceNode = new osg::Node;
|
||||
sourceNode->setDataVariance( osg::Object::DYNAMIC );
|
||||
sourceNode->getOrCreateStateSet()->setAttributeAndModes( computeProg.get() );
|
||||
sourceNode->getOrCreateStateSet()->addUniform( new osg::Uniform("targetTex", (int)0) );
|
||||
sourceNode->getOrCreateStateSet()->setTextureAttributeAndModes( 0, tex2D.get() );
|
||||
|
||||
|
||||
// Display the texture on a quad. We will also be able to operate on the data if reading back to CPU side
|
||||
osg::Geometry* geom = osg::createTexturedQuadGeometry(
|
||||
osg::Vec3(), osg::Vec3(1.0f,0.0f,0.0f), osg::Vec3(0.0f,0.0f,1.0f) );
|
||||
@@ -77,12 +77,12 @@ int main( int argc, char** argv )
|
||||
quad->addDrawable( geom );
|
||||
quad->getOrCreateStateSet()->setMode( GL_LIGHTING, osg::StateAttribute::OFF );
|
||||
quad->getOrCreateStateSet()->setTextureAttributeAndModes( 0, tex2D.get() );
|
||||
|
||||
|
||||
// Create the scene graph and start the viewer
|
||||
osg::ref_ptr<osg::Group> scene = new osg::Group;
|
||||
scene->addChild( sourceNode );
|
||||
scene->addChild( quad.get() );
|
||||
|
||||
|
||||
osgViewer::Viewer viewer;
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
viewer.addEventHandler( new osgViewer::StatsHandler );
|
||||
|
||||
@@ -33,12 +33,12 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
// Customize the CopyOp so that we add our own verbose
|
||||
// Customize the CopyOp so that we add our own verbose
|
||||
// output of what's being copied.
|
||||
class MyCopyOp : public osg::CopyOp
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
inline MyCopyOp(CopyFlags flags=SHALLOW_COPY):
|
||||
osg::CopyOp(flags),
|
||||
_indent(0),
|
||||
@@ -46,11 +46,11 @@ class MyCopyOp : public osg::CopyOp
|
||||
|
||||
inline void moveIn() const { _indent += _step; }
|
||||
inline void moveOut() const { _indent -= _step; }
|
||||
inline void writeIndent() const
|
||||
inline void writeIndent() const
|
||||
{
|
||||
for(int i=0;i<_indent;++i) std::cout << " ";
|
||||
}
|
||||
|
||||
|
||||
virtual osg::Referenced* operator() (const osg::Referenced* ref) const
|
||||
{
|
||||
writeIndent(); std::cout << "copying Referenced "<<ref<<std::endl;
|
||||
@@ -59,7 +59,7 @@ class MyCopyOp : public osg::CopyOp
|
||||
moveOut();
|
||||
return ret_ref;
|
||||
}
|
||||
|
||||
|
||||
virtual osg::Object* operator() (const osg::Object* obj) const
|
||||
{
|
||||
writeIndent(); std::cout << "copying Object "<<obj;
|
||||
@@ -70,7 +70,7 @@ class MyCopyOp : public osg::CopyOp
|
||||
moveOut();
|
||||
return ret_obj;
|
||||
}
|
||||
|
||||
|
||||
virtual osg::Node* operator() (const osg::Node* node) const
|
||||
{
|
||||
writeIndent(); std::cout << "copying Node "<<node;
|
||||
@@ -136,25 +136,25 @@ class MyCopyOp : public osg::CopyOp
|
||||
moveOut();
|
||||
return ret_image;
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
// must be mutable since CopyOp is passed around as const to
|
||||
// the various clone/copy constructors.
|
||||
mutable int _indent;
|
||||
mutable int _step;
|
||||
};
|
||||
|
||||
// this CopyOp class will preserve the multi-parent structure of the copied
|
||||
// object, instead of expanding it into a tree. Works with the
|
||||
// this CopyOp class will preserve the multi-parent structure of the copied
|
||||
// object, instead of expanding it into a tree. Works with the
|
||||
// DEEP_COPY_NODES flag.
|
||||
class GraphCopyOp : public osg::CopyOp
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
inline GraphCopyOp(CopyFlags flags=SHALLOW_COPY):
|
||||
osg::CopyOp(flags) { _nodeCopyMap.clear();}
|
||||
|
||||
|
||||
virtual osg::Node* operator() (const osg::Node* node) const
|
||||
{
|
||||
if (node && _flags&DEEP_COPY_NODES)
|
||||
@@ -180,9 +180,9 @@ class GraphCopyOp : public osg::CopyOp
|
||||
else
|
||||
return const_cast<osg::Node*>(node);
|
||||
}
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
// must be mutable since CopyOp is passed around as const to
|
||||
// the various clone/copy constructors.
|
||||
mutable std::map<const osg::Node*,osg::Node*> _nodeCopyMap;
|
||||
@@ -198,20 +198,20 @@ int main( int argc, char **argv )
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Node* rootnode = osgDB::readNodeFiles(arguments);
|
||||
if (!rootnode)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Please specify a model filename on the command line."<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// run optimization over the scene graph
|
||||
osgUtil::Optimizer optimzer;
|
||||
optimzer.optimize(rootnode);
|
||||
|
||||
|
||||
// ------------- Start of copy specific code -------------------------------------------------------
|
||||
|
||||
// do a deep copy, using MyCopyOp to reveal whats going on under the hood,
|
||||
|
||||
// do a deep copy, using MyCopyOp to reveal whats going on under the good,
|
||||
// in your own code you'd typically just use the basic osg::CopyOp something like
|
||||
osg::ref_ptr<osg::Node> mycopy = dynamic_cast<osg::Node*>(rootnode->clone(osg::CopyOp::DEEP_COPY_ALL));
|
||||
std::cout << "Doing a deep copy of scene graph"<<std::endl;
|
||||
@@ -219,7 +219,7 @@ int main( int argc, char **argv )
|
||||
// note, we need the dyanmic_cast because MS Visual Studio can't handle covarient
|
||||
// return types, so that clone has return just Object*. bahh hum bug
|
||||
osg::ref_ptr<osg::Node> deep_copy = dynamic_cast<osg::Node*>(rootnode->clone(MyCopyOp(osg::CopyOp::DEEP_COPY_ALL)));
|
||||
|
||||
|
||||
std::cout << "----------------------------------------------------------------"<<std::endl;
|
||||
|
||||
// do a graph preserving deep copy.
|
||||
@@ -260,18 +260,18 @@ int main( int argc, char **argv )
|
||||
// DEEP_COPY_IMAGES = 64,
|
||||
// DEEP_COPY_ALL = 0xffffffff
|
||||
// };
|
||||
//
|
||||
//
|
||||
// These options you can use together such as :
|
||||
// osg::Node* mycopy = dynamic_cast<osg::Node*>(rootnode->clone(osg::CopyOp::DEEP_COPY_NODES | DEEP_COPY_DRAWABLES));
|
||||
// Which shares state but creates copies of all nodes and drawables (which contain the geometry).
|
||||
//
|
||||
//
|
||||
// You may also want to subclass from CopyOp to provide finer grained control of what gets shared (shallow copy) vs
|
||||
// cloned (deep copy).
|
||||
|
||||
|
||||
|
||||
|
||||
// ------------- End of copy specific code -------------------------------------------------------
|
||||
|
||||
|
||||
// set the scene to render
|
||||
viewer.setSceneData(rootnode);
|
||||
|
||||
|
||||
@@ -43,21 +43,21 @@
|
||||
void create_specular_highlights(osg::Node *node)
|
||||
{
|
||||
osg::StateSet *ss = node->getOrCreateStateSet();
|
||||
|
||||
|
||||
// create and setup the texture object
|
||||
osg::TextureCubeMap *tcm = new osg::TextureCubeMap;
|
||||
tcm->setWrap(osg::Texture::WRAP_S, osg::Texture::CLAMP);
|
||||
tcm->setWrap(osg::Texture::WRAP_T, osg::Texture::CLAMP);
|
||||
tcm->setWrap(osg::Texture::WRAP_R, osg::Texture::CLAMP);
|
||||
tcm->setFilter(osg::Texture::MIN_FILTER, osg::Texture::LINEAR_MIPMAP_LINEAR);
|
||||
tcm->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
||||
tcm->setFilter(osg::Texture::MAG_FILTER, osg::Texture::LINEAR);
|
||||
|
||||
// generate the six highlight map images (light direction = [1, 1, -1])
|
||||
osgUtil::HighlightMapGenerator *mapgen = new osgUtil::HighlightMapGenerator(
|
||||
osg::Vec3(1, 1, -1), // light direction
|
||||
osg::Vec4(1, 0.9f, 0.8f, 1), // light color
|
||||
8); // specular exponent
|
||||
|
||||
|
||||
mapgen->generateMap();
|
||||
|
||||
// assign the six images to the texture object
|
||||
@@ -77,7 +77,7 @@ void create_specular_highlights(osg::Node *node)
|
||||
ss->setTextureAttributeAndModes(0, tg, osg::StateAttribute::OVERRIDE | osg::StateAttribute::ON);
|
||||
|
||||
// use TexEnvCombine to add the highlights to the original lighting
|
||||
osg::TexEnvCombine *te = new osg::TexEnvCombine;
|
||||
osg::TexEnvCombine *te = new osg::TexEnvCombine;
|
||||
te->setCombine_RGB(osg::TexEnvCombine::ADD);
|
||||
te->setSource0_RGB(osg::TexEnvCombine::TEXTURE);
|
||||
te->setOperand0_RGB(osg::TexEnvCombine::SRC_COLOR);
|
||||
@@ -93,12 +93,12 @@ int main(int argc, char *argv[])
|
||||
|
||||
// construct the viewer.
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> rootnode = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Node* rootnode = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!rootnode) rootnode = osgDB::readRefNodeFile("cessna.osgt");
|
||||
if (!rootnode) rootnode = osgDB::readNodeFile("cessna.osgt");
|
||||
|
||||
if (!rootnode)
|
||||
{
|
||||
@@ -107,17 +107,33 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
// create specular highlights
|
||||
create_specular_highlights(rootnode.get());
|
||||
|
||||
create_specular_highlights(rootnode);
|
||||
|
||||
// run optimization over the scene graph
|
||||
osgUtil::Optimizer optimzer;
|
||||
optimzer.optimize(rootnode);
|
||||
|
||||
|
||||
// add a viewport to the viewer and attach the scene graph.
|
||||
viewer.setSceneData(rootnode);
|
||||
|
||||
|
||||
// create the windows and run the threads.
|
||||
viewer.realize();
|
||||
|
||||
// now check to see if texture cube map is supported.
|
||||
for(unsigned int contextID = 0;
|
||||
contextID<osg::DisplaySettings::instance()->getMaxNumberOfGraphicsContexts();
|
||||
++contextID)
|
||||
{
|
||||
osg::TextureCubeMap::Extensions* tcmExt = osg::TextureCubeMap::getExtensions(contextID,false);
|
||||
if (tcmExt)
|
||||
{
|
||||
if (!tcmExt->isCubeMapSupported())
|
||||
{
|
||||
std::cout<<"Warning: texture_cube_map not supported by OpenGL drivers, unable to run application."<<std::endl;
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return viewer.run();
|
||||
}
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2006 Robert Osfield
|
||||
*
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* This application is open source and may be redistributed and/or modified
|
||||
* freely and without restriction, both in commercial and non commercial applications,
|
||||
* as long as this copyright notice is maintained.
|
||||
*
|
||||
*
|
||||
* This application 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.
|
||||
@@ -50,7 +50,7 @@ int main(int argc, char** argv)
|
||||
arguments.getApplicationUsage()->write(std::cout, helpType);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
// report any errors if they have occurred when parsing the program arguments.
|
||||
if (arguments.errors())
|
||||
{
|
||||
@@ -81,7 +81,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 );
|
||||
@@ -95,13 +95,13 @@ int main(int argc, char** argv)
|
||||
|
||||
// add the state manipulator
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
|
||||
|
||||
// add the thread model handler
|
||||
viewer.addEventHandler(new osgViewer::ThreadingHandler);
|
||||
|
||||
// add the window size toggle handler
|
||||
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
|
||||
|
||||
|
||||
// add the stats handler
|
||||
viewer.addEventHandler(new osgViewer::StatsHandler);
|
||||
|
||||
@@ -129,8 +129,8 @@ int main(int argc, char** argv)
|
||||
|
||||
|
||||
// load the data
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFile(file);
|
||||
if (!loadedModel)
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFile(file);
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
return 1;
|
||||
|
||||
@@ -224,7 +224,7 @@ public:
|
||||
osg::StateSet *dstate= gm->getOrCreateStateSet( );
|
||||
dstate->setMode( GL_LIGHTING, osg::StateAttribute::ON );
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/Brick-Std-Orange.TGA");
|
||||
osg::Image* image = osgDB::readImageFile("Images/Brick-Std-Orange.TGA");
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* txt = new osg::Texture2D;
|
||||
@@ -354,7 +354,7 @@ osg::Group *makedelaunay(const int ndcs)
|
||||
|
||||
osg::Vec3Array *points=new osg::Vec3Array;
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/blueFlowers.png");
|
||||
osg::Image* image = osgDB::readImageFile("Images/blueFlowers.png");
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* texture = new osg::Texture2D;
|
||||
@@ -817,7 +817,7 @@ osg::Geometry *WallConstraint::makeWallGeometry() const
|
||||
{
|
||||
osg::ref_ptr<osg::Geometry> gm=new osg::Geometry; // the wall
|
||||
if (texture!="") {
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture.c_str());
|
||||
osg::Image* image = osgDB::readImageFile(texture.c_str());
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* txt = new osg::Texture2D;
|
||||
@@ -1005,7 +1005,7 @@ deprecated_osg::Geometry *ArealConstraint::makeWallGeometry( osg::Vec3Array *pt)
|
||||
tscx->retessellatePolygons(*(edges)); // find all edges
|
||||
|
||||
if (walltexture!="") {
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(walltexture.c_str());
|
||||
osg::Image* image = osgDB::readImageFile(walltexture.c_str());
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* txt = new osg::Texture2D;
|
||||
@@ -1062,7 +1062,7 @@ deprecated_osg::Geometry * ArealConstraint::makeAreal( osg::Vec3Array *points)
|
||||
gm->setNormalArray(getCanopyNormals(points));
|
||||
gm->setNormalBinding(deprecated_osg::Geometry::BIND_PER_PRIMITIVE);
|
||||
gm->setTexCoordArray(0,getCanopyTexcoords(points));
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture);
|
||||
osg::Image* image = osgDB::readImageFile(texture);
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* txt = new osg::Texture2D;
|
||||
@@ -1238,7 +1238,7 @@ deprecated_osg::Geometry * LinearConstraint::makeGeometry(const osg::Vec3Array *
|
||||
if (_midline->size()>0) {
|
||||
osg::ref_ptr<osg::Vec3Array> locpts=getPoints(points);
|
||||
if (texture!="") {
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile(texture.c_str());
|
||||
osg::Image* image = osgDB::readImageFile(texture.c_str());
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* txt = new osg::Texture2D;
|
||||
|
||||
@@ -139,7 +139,7 @@ int main( int argc, char **argv )
|
||||
bool needToSetHomePosition = false;
|
||||
|
||||
// read the scene from the list of file specified commandline args.
|
||||
osg::ref_ptr<osg::Node> scene = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// if one hasn't been loaded create an earth and sun test model.
|
||||
if (!scene)
|
||||
|
||||
@@ -303,7 +303,7 @@ bool DePee::createHUD()
|
||||
osg::BoundingBox bb;
|
||||
for(unsigned int i=0;i<geode->getNumDrawables();++i)
|
||||
{
|
||||
bb.expandBy(geode->getDrawable(i)->getBoundingBox());
|
||||
bb.expandBy(geode->getDrawable(i)->getBound());
|
||||
}
|
||||
|
||||
osg::Geometry* geom = new osg::Geometry;
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
|
||||
/*!
|
||||
The DePee class is main class for setting up and managing depth peeling.
|
||||
A DePee object can be seen as a virtual node, that has one parent and one child. The rendering of every child and subchil of this child is managed by the DePee node. Besides that, it handles a head up display.
|
||||
A DePee object can be seen as a virtual node, that has one parent and one child. The rendering of every child and subchil of this child is managed by the the DePee node. Besides that, it handles a head up display.
|
||||
*/
|
||||
class DePee : public osg::Referenced
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "DePee.h"
|
||||
#include "DePee.h"
|
||||
|
||||
/*!
|
||||
Handles keyboard events.
|
||||
@@ -28,7 +28,7 @@
|
||||
class KeyboardEventHandler : public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
KeyboardEventHandler(DePee* dePee)
|
||||
{
|
||||
_apc = 0;
|
||||
@@ -41,12 +41,12 @@ public:
|
||||
_dePee->setSketchy(_sketchy);
|
||||
_dePee->setColored(_colored);
|
||||
}
|
||||
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&)
|
||||
{
|
||||
switch(ea.getEventType())
|
||||
{
|
||||
|
||||
|
||||
case(osgGA::GUIEventAdapter::KEYDOWN):
|
||||
{
|
||||
if (ea.getKey()==osgGA::GUIEventAdapter::KEY_Space)
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
_dePee->setSketchy(_sketchy);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
else if (ea.getKey() == 'e')
|
||||
{
|
||||
_edgy = !_edgy;
|
||||
@@ -106,13 +106,13 @@ public:
|
||||
_crayon = !_crayon;
|
||||
_dePee->setCrayon(_crayon);
|
||||
}
|
||||
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -139,12 +139,12 @@ private:
|
||||
class MouseEventHandler : public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
MouseEventHandler(DePee* dePee)
|
||||
{
|
||||
_dePee = dePee;
|
||||
}
|
||||
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&)
|
||||
{
|
||||
switch(ea.getEventType())
|
||||
@@ -152,17 +152,17 @@ public:
|
||||
//mouse
|
||||
case(osgGA::GUIEventAdapter::DRAG):
|
||||
{
|
||||
rotate(ea.getXnormalized(), ea.getYnormalized());
|
||||
rotate(ea.getXnormalized(), ea.getYnormalized());
|
||||
break;
|
||||
}
|
||||
case(osgGA::GUIEventAdapter::MOVE):
|
||||
_prevX = ea.getXnormalized();
|
||||
_prevX = ea.getXnormalized();
|
||||
_prevY = ea.getYnormalized();
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
break;
|
||||
|
||||
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@@ -175,25 +175,25 @@ private:
|
||||
void rotate(float x, float y)
|
||||
{
|
||||
osg::Matrix baseMatrix = _modelGroupTransform->getMatrix();
|
||||
|
||||
|
||||
baseMatrix.preMultTranslate(_rotCenter);
|
||||
baseMatrix.preMultRotate(osg::Quat((x - _prevX) * 3, osg::Vec3d(0.0, 0.0, 1.0)));
|
||||
baseMatrix.preMultRotate(osg::Quat(-(y - _prevY) * 3, (baseMatrix * osg::Vec3d(1.0, 0.0, 0.0))));
|
||||
baseMatrix.preMultTranslate(-_rotCenter);
|
||||
|
||||
|
||||
_modelGroupTransform->setMatrix(baseMatrix);
|
||||
|
||||
_prevX = x;
|
||||
_prevX = x;
|
||||
_prevY = y;
|
||||
};
|
||||
|
||||
|
||||
DePee* _dePee;
|
||||
|
||||
float _prevX;
|
||||
|
||||
float _prevX;
|
||||
float _prevY;
|
||||
|
||||
|
||||
osg::Vec3 _rotCenter;
|
||||
osg::MatrixTransform* _modelGroupTransform;
|
||||
osg::MatrixTransform* _modelGroupTransform;
|
||||
};
|
||||
|
||||
|
||||
@@ -202,25 +202,25 @@ 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()->setDescription(arguments.getApplicationName()+" is the example which demonstrates Depth Peeling");
|
||||
arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+" filename");
|
||||
|
||||
|
||||
|
||||
|
||||
// construct the viewer
|
||||
osgViewer::Viewer viewer(arguments);
|
||||
|
||||
|
||||
// any option left unread are converted into errors to write out later.
|
||||
arguments.reportRemainingOptionsAsUnrecognized();
|
||||
|
||||
|
||||
// report any errors if they have occurred when parsing the program arguments.
|
||||
if (arguments.errors())
|
||||
{
|
||||
arguments.writeErrorMessages(std::cout);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
if (arguments.argc()<=1 || arguments.argc() > 3)
|
||||
{
|
||||
arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION);
|
||||
@@ -232,29 +232,29 @@ int main( int argc, char **argv )
|
||||
viewer.getCamera()->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
|
||||
|
||||
// read the model to do depth peeling with
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFile(arguments.argv()[1]);
|
||||
|
||||
osg::Node* loadedModel = osgDB::readNodeFile(arguments.argv()[1]);
|
||||
|
||||
if (!loadedModel)
|
||||
return 1;
|
||||
|
||||
|
||||
// create a transform to spin the model.
|
||||
osg::MatrixTransform* modelGroupTransform = new osg::MatrixTransform;
|
||||
osg::Group* modelGroup = new osg::Group;
|
||||
modelGroupTransform->addChild(modelGroup);
|
||||
modelGroup->addChild(loadedModel);
|
||||
|
||||
|
||||
osg::Group* rootNode = new osg::Group();
|
||||
|
||||
|
||||
// add model to the viewer.
|
||||
viewer.setSceneData(rootNode);
|
||||
|
||||
|
||||
// Depth peel example only works on a single graphics context right now
|
||||
// so open up viewer on single screen to prevent problems
|
||||
viewer.setUpViewOnSingleScreen(0);
|
||||
|
||||
|
||||
// create the windows and run the threads.
|
||||
viewer.realize();
|
||||
|
||||
|
||||
unsigned int width = 1280;
|
||||
unsigned int height = 1280;
|
||||
osgViewer::Viewer::Windows windows;
|
||||
@@ -266,11 +266,11 @@ int main( int argc, char **argv )
|
||||
}
|
||||
|
||||
|
||||
osg::ref_ptr<DePee> dePee = new DePee(rootNode,
|
||||
modelGroupTransform,
|
||||
osg::ref_ptr<DePee> dePee = new DePee(rootNode,
|
||||
modelGroupTransform,
|
||||
width,
|
||||
height);
|
||||
|
||||
|
||||
//create event handlers
|
||||
KeyboardEventHandler* keyboardEventHandler = new KeyboardEventHandler(dePee.get());
|
||||
MouseEventHandler* mouseEventHandler = new MouseEventHandler(dePee.get());
|
||||
@@ -278,7 +278,7 @@ int main( int argc, char **argv )
|
||||
viewer.addEventHandler(mouseEventHandler);
|
||||
|
||||
//viewer.setCameraManipulator(new osgGA::TrackballManipulator);
|
||||
|
||||
|
||||
osg::StateSet* stateset = modelGroupTransform->getOrCreateStateSet();
|
||||
|
||||
stateset->setMode(GL_BLEND, osg::StateAttribute::OFF);
|
||||
@@ -287,15 +287,15 @@ int main( int argc, char **argv )
|
||||
osg::AnimationPathCallback* apc = new osg::AnimationPathCallback(modelGroupTransform->getBound().center(),osg::Vec3(0.0f,0.0f,1.0f),osg::inDegrees(45.0f));
|
||||
apc->setPause(true);
|
||||
modelGroupTransform->setUpdateCallback(apc);
|
||||
|
||||
|
||||
keyboardEventHandler->registerAnimationPathCallback(apc);
|
||||
mouseEventHandler->registerModelGroupTransform(modelGroupTransform);
|
||||
|
||||
|
||||
//setup stuff that is necessary for measuring fps
|
||||
osg::Timer_t current_tick, previous_tick = 1;
|
||||
double* fps = new double;
|
||||
dePee->setFPS(fps);
|
||||
|
||||
|
||||
while(!viewer.done())
|
||||
{
|
||||
current_tick = osg::Timer::instance()->tick();
|
||||
|
||||
@@ -52,96 +52,18 @@
|
||||
|
||||
using namespace osg;
|
||||
|
||||
struct CommandLineOptions
|
||||
{
|
||||
unsigned int width;
|
||||
unsigned int height;
|
||||
unsigned int tex_width;
|
||||
unsigned int tex_height;
|
||||
double sphere_radius;
|
||||
double collar_radius;
|
||||
double distance;
|
||||
|
||||
CommandLineOptions():
|
||||
width(1024),
|
||||
height(1024),
|
||||
tex_width(1024),
|
||||
tex_height(1024),
|
||||
sphere_radius(1.0),
|
||||
collar_radius(0.45),
|
||||
distance(1.0)
|
||||
{
|
||||
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
if (!wsi)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int width, height;
|
||||
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
|
||||
|
||||
distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
|
||||
}
|
||||
|
||||
void read(osg::ArgumentParser& arguments)
|
||||
{
|
||||
while (arguments.read("--width",width)) {}
|
||||
while (arguments.read("--height",height)) {}
|
||||
while (arguments.read("--texture-width",tex_width) || arguments.read("--tx",tex_width) ) {}
|
||||
while (arguments.read("--texture-height",tex_height) || arguments.read("--ty",tex_height) ) {}
|
||||
|
||||
while (arguments.read("--radius", sphere_radius)) {}
|
||||
while (arguments.read("--collar", collar_radius)) {}
|
||||
|
||||
distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
|
||||
while (arguments.read("--distance", distance)) {}
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
class WindowResizedHandler : public osgGA::GUIEventHandler
|
||||
{
|
||||
public:
|
||||
WindowResizedHandler()
|
||||
{
|
||||
}
|
||||
|
||||
virtual bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa, osg::Object* object, osg::NodeVisitor* nv)
|
||||
{
|
||||
osg::Camera* camera = dynamic_cast<osg::Camera*>(object);
|
||||
if (!camera) return false;
|
||||
|
||||
const osg::FrameStamp* fs = nv->getFrameStamp();
|
||||
|
||||
if (ea.getEventType()==osgGA::GUIEventAdapter::RESIZE)
|
||||
{
|
||||
OSG_NOTICE<<"Window resized event context="<<ea.getGraphicsContext()<<" frameNumber = "<<fs->getFrameNumber()<<std::endl;
|
||||
OSG_NOTICE<<" WindowX="<<ea.getWindowX()<<std::endl;
|
||||
OSG_NOTICE<<" WindowY="<<ea.getWindowY()<<std::endl;
|
||||
OSG_NOTICE<<" WindowWidth="<<ea.getWindowWidth()<<std::endl;
|
||||
OSG_NOTICE<<" WindowHeight="<<ea.getWindowHeight()<<std::endl;
|
||||
|
||||
// reset the Camera viewport and associated Texture's to make sure it tracks the new window size.
|
||||
camera->resize(ea.getWindowWidth(), ea.getWindowHeight());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subgraph, const osg::Vec4& clearColour)
|
||||
osg::Node* createDistortionSubgraph(osg::Node* subgraph, const osg::Vec4& clearColour)
|
||||
{
|
||||
osg::Group* distortionNode = new osg::Group;
|
||||
|
||||
unsigned int tex_width = 1024;
|
||||
unsigned int tex_height = 1024;
|
||||
|
||||
osg::Texture2D* texture = new osg::Texture2D;
|
||||
texture->setTextureSize(options.tex_width, options.tex_height);
|
||||
texture->setTextureSize(tex_width, tex_height);
|
||||
texture->setInternalFormat(GL_RGBA);
|
||||
texture->setFilter(osg::Texture2D::MIN_FILTER,osg::Texture2D::LINEAR);
|
||||
texture->setFilter(osg::Texture2D::MAG_FILTER,osg::Texture2D::LINEAR);
|
||||
texture->setWrap(osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP_TO_EDGE);
|
||||
texture->setWrap(osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP_TO_EDGE);
|
||||
|
||||
// set up the render to texture camera.
|
||||
{
|
||||
@@ -157,7 +79,7 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
|
||||
camera->setViewMatrix(osg::Matrixd::identity());
|
||||
|
||||
// set viewport
|
||||
camera->setViewport(0,0,options.tex_width,options.tex_height);
|
||||
camera->setViewport(0,0,tex_width,tex_height);
|
||||
|
||||
// set the camera to render before the main camera.
|
||||
camera->setRenderOrder(osg::Camera::PRE_RENDER);
|
||||
@@ -172,8 +94,6 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
|
||||
camera->addChild(subgraph);
|
||||
|
||||
distortionNode->addChild(camera);
|
||||
|
||||
camera->addEventCallback(new WindowResizedHandler());
|
||||
}
|
||||
|
||||
// set up the hud camera
|
||||
@@ -266,13 +186,27 @@ osg::Node* createDistortionSubgraph(CommandLineOptions& options, osg::Node* subg
|
||||
return distortionNode;
|
||||
}
|
||||
|
||||
void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
void setDomeFaces(osgViewer::Viewer& viewer, osg::ArgumentParser& arguments)
|
||||
{
|
||||
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
if (!wsi)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int width, height;
|
||||
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
|
||||
|
||||
while (arguments.read("--width",width)) {}
|
||||
while (arguments.read("--height",height)) {}
|
||||
|
||||
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
|
||||
traits->x = 0;
|
||||
traits->y = 0;
|
||||
traits->width = options.width;
|
||||
traits->height = options.height;
|
||||
traits->width = width;
|
||||
traits->height = height;
|
||||
traits->windowDecoration = true;
|
||||
traits->doubleBuffer = true;
|
||||
traits->sharedContext = 0;
|
||||
@@ -285,8 +219,8 @@ void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
}
|
||||
|
||||
|
||||
int center_x = options.width/2;
|
||||
int center_y = options.height/2;
|
||||
int center_x = width/2;
|
||||
int center_y = height/2;
|
||||
int camera_width = 256;
|
||||
int camera_height = 256;
|
||||
|
||||
@@ -369,18 +303,27 @@ void setDomeFaces(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
}
|
||||
|
||||
osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3& widthVector, const osg::Vec3& heightVector,
|
||||
CommandLineOptions& options)
|
||||
osg::ArgumentParser& arguments)
|
||||
{
|
||||
double sphere_radius = 1.0;
|
||||
if (arguments.read("--radius", sphere_radius)) {}
|
||||
|
||||
double collar_radius = 0.45;
|
||||
if (arguments.read("--collar", collar_radius)) {}
|
||||
|
||||
osg::Vec3d center(0.0,0.0,0.0);
|
||||
osg::Vec3d eye(0.0,0.0,0.0);
|
||||
|
||||
double distance = sqrt(sphere_radius*sphere_radius - collar_radius*collar_radius);
|
||||
if (arguments.read("--distance", distance)) {}
|
||||
|
||||
bool centerProjection = false;
|
||||
|
||||
osg::Vec3d projector = eye - osg::Vec3d(0.0,0.0, options.distance);
|
||||
osg::Vec3d projector = eye - osg::Vec3d(0.0,0.0, distance);
|
||||
|
||||
|
||||
osg::notify(osg::NOTICE)<<"Projector position = "<<projector<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<"distance = "<<options.distance<<std::endl;
|
||||
osg::notify(osg::NOTICE)<<"distance = "<<distance<<std::endl;
|
||||
|
||||
|
||||
// create the quad to visualize.
|
||||
@@ -453,15 +396,15 @@ osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3
|
||||
|
||||
// osg::notify(osg::NOTICE)<<"theta = "<<theta<< "phi="<<phi<<std::endl;
|
||||
|
||||
double f = options.distance * sin(phi);
|
||||
double e = options.distance * cos(phi) + sqrt( options.sphere_radius*options.sphere_radius - f*f);
|
||||
double f = distance * sin(phi);
|
||||
double e = distance * cos(phi) + sqrt( sphere_radius*sphere_radius - f*f);
|
||||
double l = e * cos(phi);
|
||||
double h = e * sin(phi);
|
||||
double z = l - options.distance;
|
||||
double z = l - distance;
|
||||
|
||||
osg::Vec3 texcoord(h * cos(theta) / options.sphere_radius,
|
||||
h * sin(theta) / options.sphere_radius,
|
||||
z / options.sphere_radius);
|
||||
osg::Vec3 texcoord(h * cos(theta) / sphere_radius,
|
||||
h * sin(theta) / sphere_radius,
|
||||
z / sphere_radius);
|
||||
|
||||
vertices->push_back(cursor);
|
||||
colors->push_back(osg::Vec4(1.0f,1.0f,1.0f,1.0f));
|
||||
@@ -494,17 +437,33 @@ osg::Geometry* createDomeDistortionMesh(const osg::Vec3& origin, const osg::Vec3
|
||||
return geometry;
|
||||
}
|
||||
|
||||
void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
void setDomeCorrection(osgViewer::Viewer& viewer, osg::ArgumentParser& arguments)
|
||||
{
|
||||
|
||||
osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface();
|
||||
if (!wsi)
|
||||
{
|
||||
osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot create windows."<<std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
unsigned int width, height;
|
||||
wsi->getScreenResolution(osg::GraphicsContext::ScreenIdentifier(0), width, height);
|
||||
|
||||
while (arguments.read("--width",width)) {}
|
||||
while (arguments.read("--height",height)) {}
|
||||
|
||||
osg::ref_ptr<osg::GraphicsContext::Traits> traits = new osg::GraphicsContext::Traits;
|
||||
traits->x = 0;
|
||||
traits->y = 0;
|
||||
traits->width = options.width;
|
||||
traits->height = options.height;
|
||||
traits->width = width;
|
||||
traits->height = height;
|
||||
traits->windowDecoration = false;
|
||||
traits->doubleBuffer = true;
|
||||
traits->sharedContext = 0;
|
||||
|
||||
|
||||
|
||||
osg::ref_ptr<osg::GraphicsContext> gc = osg::GraphicsContext::createGraphicsContext(traits.get());
|
||||
if (!gc)
|
||||
{
|
||||
@@ -512,18 +471,18 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
return;
|
||||
}
|
||||
|
||||
int camera_width = options.tex_width;
|
||||
int camera_height = options.tex_height;
|
||||
int tex_width = 512;
|
||||
int tex_height = 512;
|
||||
|
||||
int camera_width = tex_width;
|
||||
int camera_height = tex_height;
|
||||
|
||||
osg::TextureCubeMap* texture = new osg::TextureCubeMap;
|
||||
|
||||
texture->setTextureSize(options.tex_width, options.tex_height);
|
||||
texture->setTextureSize(tex_width, tex_height);
|
||||
texture->setInternalFormat(GL_RGB);
|
||||
texture->setFilter(osg::Texture::MIN_FILTER,osg::Texture::LINEAR);
|
||||
texture->setFilter(osg::Texture::MAG_FILTER,osg::Texture::LINEAR);
|
||||
texture->setWrap(osg::Texture::WRAP_S,osg::Texture::CLAMP_TO_EDGE);
|
||||
texture->setWrap(osg::Texture::WRAP_T,osg::Texture::CLAMP_TO_EDGE);
|
||||
texture->setWrap(osg::Texture::WRAP_R,osg::Texture::CLAMP_TO_EDGE);
|
||||
|
||||
#if 0
|
||||
osg::Camera::RenderTargetImplementation renderTargetImplementation = osg::Camera::SEPERATE_WINDOW;
|
||||
@@ -655,7 +614,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
// distortion correction set up.
|
||||
{
|
||||
osg::Geode* geode = new osg::Geode();
|
||||
geode->addDrawable(createDomeDistortionMesh(osg::Vec3(0.0f,0.0f,0.0f), osg::Vec3(options.width,0.0f,0.0f), osg::Vec3(0.0f,options.height,0.0f), options));
|
||||
geode->addDrawable(createDomeDistortionMesh(osg::Vec3(0.0f,0.0f,0.0f), osg::Vec3(width,0.0f,0.0f), osg::Vec3(0.0f,height,0.0f), arguments));
|
||||
|
||||
// new we need to add the texture to the mesh, we do so by creating a
|
||||
// StateSet to contain the Texture StateAttribute.
|
||||
@@ -667,7 +626,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
camera->setGraphicsContext(gc.get());
|
||||
camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT );
|
||||
camera->setClearColor( osg::Vec4(0.1,0.1,1.0,1.0) );
|
||||
camera->setViewport(new osg::Viewport(0, 0, options.width, options.height));
|
||||
camera->setViewport(new osg::Viewport(0, 0, width, height));
|
||||
GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
|
||||
camera->setDrawBuffer(buffer);
|
||||
camera->setReadBuffer(buffer);
|
||||
@@ -676,7 +635,7 @@ void setDomeCorrection(osgViewer::Viewer& viewer, CommandLineOptions& options)
|
||||
//camera->setInheritanceMask(camera->getInheritanceMask() & ~osg::CullSettings::CLEAR_COLOR & ~osg::CullSettings::COMPUTE_NEAR_FAR_MODE);
|
||||
//camera->setComputeNearFarMode(osg::CullSettings::DO_NOT_COMPUTE_NEAR_FAR);
|
||||
|
||||
camera->setProjectionMatrixAsOrtho2D(0,options.width,0,options.height);
|
||||
camera->setProjectionMatrixAsOrtho2D(0,width,0,height);
|
||||
camera->setViewMatrix(osg::Matrix::identity());
|
||||
|
||||
// add subgraph to render
|
||||
@@ -696,17 +655,14 @@ int main(int argc, char** argv)
|
||||
// use an ArgumentParser object to manage the program arguments.
|
||||
osg::ArgumentParser arguments(&argc,argv);
|
||||
|
||||
CommandLineOptions options;
|
||||
options.read(arguments);
|
||||
|
||||
// construct the viewer.
|
||||
osgViewer::Viewer viewer(arguments);
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
// load the nodes from the commandline arguments.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::Node* loadedModel = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("cow.osgt");
|
||||
if (!loadedModel) loadedModel = osgDB::readNodeFile("cow.osgt");
|
||||
|
||||
if (!loadedModel)
|
||||
{
|
||||
@@ -718,20 +674,20 @@ int main(int argc, char** argv)
|
||||
if (arguments.read("--dome") || arguments.read("--puffer") )
|
||||
{
|
||||
|
||||
setDomeCorrection(viewer, options);
|
||||
setDomeCorrection(viewer, arguments);
|
||||
|
||||
viewer.setSceneData( loadedModel );
|
||||
}
|
||||
else if (arguments.read("--faces"))
|
||||
{
|
||||
|
||||
setDomeFaces(viewer, options);
|
||||
setDomeFaces(viewer, arguments);
|
||||
|
||||
viewer.setSceneData( loadedModel );
|
||||
}
|
||||
else
|
||||
{
|
||||
osg::Node* distortionNode = createDistortionSubgraph( options, loadedModel.get(), viewer.getCamera()->getClearColor());
|
||||
osg::Node* distortionNode = createDistortionSubgraph( loadedModel, viewer.getCamera()->getClearColor());
|
||||
viewer.setSceneData( distortionNode );
|
||||
}
|
||||
|
||||
@@ -782,9 +738,6 @@ int main(int argc, char** argv)
|
||||
|
||||
viewer.setThreadingModel(osgViewer::Viewer::SingleThreaded);
|
||||
|
||||
// add window resize handler
|
||||
viewer.addEventHandler(new osgViewer::WindowSizeHandler);
|
||||
|
||||
// add the state manipulator
|
||||
viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) );
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ createStateSet()
|
||||
ss->setAttribute( program.get(),
|
||||
osg::StateAttribute::ON | osg::StateAttribute::PROTECTED );
|
||||
|
||||
osg::ref_ptr< osg::Image> iLogo = osgDB::readRefImageFile( "Images/osg128.png" );
|
||||
osg::ref_ptr< osg::Image> iLogo = osgDB::readImageFile( "Images/osg128.png" );
|
||||
if( !iLogo.valid() )
|
||||
{
|
||||
osg::notify( osg::ALWAYS ) << "Can't open image file osg128.png" << std::endl;
|
||||
|
||||
@@ -44,21 +44,21 @@ osg::Node* createEarth()
|
||||
osg::TessellationHints* hints = new osg::TessellationHints;
|
||||
hints->setDetailRatio(5.0f);
|
||||
|
||||
|
||||
|
||||
osg::ShapeDrawable* sd = new osg::ShapeDrawable(new osg::Sphere(osg::Vec3(0.0,0.0,0.0), osg::WGS_84_RADIUS_POLAR), hints);
|
||||
|
||||
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
geode->addDrawable(sd);
|
||||
|
||||
|
||||
std::string filename = osgDB::findDataFile("Images/land_shallow_topo_2048.jpg");
|
||||
geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readRefImageFile(filename)));
|
||||
|
||||
geode->getOrCreateStateSet()->setTextureAttributeAndModes(0, new osg::Texture2D(osgDB::readImageFile(filename)));
|
||||
|
||||
osg::CoordinateSystemNode* csn = new osg::CoordinateSystemNode;
|
||||
csn->setEllipsoidModel(new osg::EllipsoidModel());
|
||||
csn->addChild(geode);
|
||||
|
||||
|
||||
return csn;
|
||||
|
||||
|
||||
}
|
||||
|
||||
osgText::Text* createText(osg::EllipsoidModel* ellipsoid, double latitude, double longitude, double height, const std::string& str)
|
||||
@@ -78,7 +78,7 @@ osgText::Text* createText(osg::EllipsoidModel* ellipsoid, double latitude, doubl
|
||||
text->setCharacterSize(300000.0f);
|
||||
text->setCharacterSizeMode(osgText::Text::OBJECT_COORDS_WITH_MAXIMUM_SCREEN_SIZE_CAPPED_BY_FONT_HEIGHT);
|
||||
text->setAutoRotateToScreen(true);
|
||||
|
||||
|
||||
return text;
|
||||
}
|
||||
|
||||
@@ -87,10 +87,10 @@ osg::Node* createFadeText(osg::EllipsoidModel* ellipsoid)
|
||||
osg::Group* group = new osg::Group;
|
||||
|
||||
group->getOrCreateStateSet()->setMode(GL_DEPTH_TEST,osg::StateAttribute::OFF);
|
||||
|
||||
|
||||
osg::Geode* geode = new osg::Geode;
|
||||
group->addChild(geode);
|
||||
|
||||
|
||||
std::vector<std::string> textList;
|
||||
textList.push_back("Town");
|
||||
textList.push_back("City");
|
||||
@@ -99,7 +99,7 @@ osg::Node* createFadeText(osg::EllipsoidModel* ellipsoid)
|
||||
textList.push_back("Mountain");
|
||||
textList.push_back("Road");
|
||||
textList.push_back("Lake");
|
||||
|
||||
|
||||
unsigned int numLat = 15;
|
||||
unsigned int numLong = 20;
|
||||
double latitude = 0.0;
|
||||
@@ -118,7 +118,7 @@ osg::Node* createFadeText(osg::EllipsoidModel* ellipsoid)
|
||||
}
|
||||
|
||||
return group;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int main(int, char**)
|
||||
@@ -128,10 +128,10 @@ int main(int, char**)
|
||||
|
||||
viewer.getCamera()->setComputeNearFarMode(osg::CullSettings::COMPUTE_NEAR_FAR_USING_PRIMITIVES);
|
||||
viewer.getCamera()->setNearFarRatio(0.00001f);
|
||||
|
||||
|
||||
// read the scene from the list of file specified commandline args.
|
||||
osg::ref_ptr<osg::Node> root = createEarth();
|
||||
|
||||
|
||||
if (!root) return 0;
|
||||
|
||||
// add a viewport to the viewer and attach the scene graph.
|
||||
@@ -142,7 +142,7 @@ int main(int, char**)
|
||||
{
|
||||
// add fade text around the globe
|
||||
csn->addChild(createFadeText(csn->getEllipsoidModel()));
|
||||
}
|
||||
}
|
||||
|
||||
viewer.setCameraManipulator(new osgGA::TerrainManipulator);
|
||||
|
||||
|
||||
@@ -19,10 +19,17 @@ void textInfo(osgText::Text* text)
|
||||
|
||||
for(unsigned int i = 0; i < s.size(); i++)
|
||||
{
|
||||
osg::Vec2 ul = (*gq.getCoords())[0 + (i * 4)]; // upperLeft
|
||||
osg::Vec2 ll = (*gq.getCoords())[1 + (i * 4)]; // lowerLeft
|
||||
osg::Vec2 lr = (*gq.getCoords())[2 + (i * 4)]; // lowerRight
|
||||
osg::Vec2 ur = (*gq.getCoords())[3 + (i * 4)]; // upperRight
|
||||
osg::Vec2 ul = gq.getCoords()[0 + (i * 4)]; // upperLeft
|
||||
osg::Vec2 ll = gq.getCoords()[1 + (i * 4)]; // lowerLeft
|
||||
osg::Vec2 lr = gq.getCoords()[2 + (i * 4)]; // lowerRight
|
||||
osg::Vec2 ur = gq.getCoords()[3 + (i * 4)]; // upperRight
|
||||
|
||||
/*
|
||||
osg::Vec3 ul = gq.getTransformedCoords(0)[0 + (i * 4)];
|
||||
osg::Vec3 ll = gq.getTransformedCoords(0)[1 + (i * 4)];
|
||||
osg::Vec3 lr = gq.getTransformedCoords(0)[2 + (i * 4)];
|
||||
osg::Vec3 ur = gq.getTransformedCoords(0)[3 + (i * 4)];
|
||||
*/
|
||||
|
||||
osg::notify(osg::NOTICE)
|
||||
<< "'" << static_cast<char>(s[i]) << "':"
|
||||
@@ -62,7 +69,7 @@ osgText::Text* createLabel(const std::string& l, const char* f, unsigned int siz
|
||||
static osg::Vec3 pos(10.0f, 10.0f, 0.0f);
|
||||
|
||||
osgText::Text* label = new osgText::Text();
|
||||
osg::ref_ptr<osgText::Font> font = osgText::readRefFontFile(f);
|
||||
osgText::Font* font = osgText::readFontFile(f);
|
||||
|
||||
label->setFont(font);
|
||||
label->setCharacterSize(size);
|
||||
|
||||
@@ -388,7 +388,7 @@ osg::Geode* ForestTechniqueManager::createTerrain(const osg::Vec3& origin, const
|
||||
// ---------------------------------------
|
||||
osg::StateSet* stateset = new osg::StateSet();
|
||||
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/lz.rgb");
|
||||
osg::Image* image = osgDB::readImageFile("Images/lz.rgb");
|
||||
if (image)
|
||||
{
|
||||
osg::Texture2D* texture = new osg::Texture2D;
|
||||
@@ -812,9 +812,9 @@ class ShaderGeometry : public osg::Drawable
|
||||
}
|
||||
}
|
||||
|
||||
virtual osg::BoundingBox computeBoundingBox() const
|
||||
virtual osg::BoundingBox computeBound() const
|
||||
{
|
||||
osg::BoundingBox geom_box = _geometry->getBoundingBox();
|
||||
osg::BoundingBox geom_box = _geometry->getBound();
|
||||
osg::BoundingBox bb;
|
||||
for(PositionSizeList::const_iterator itr = _trees.begin();
|
||||
itr != _trees.end();
|
||||
@@ -1182,7 +1182,7 @@ osg::Node* ForestTechniqueManager::createScene(unsigned int numTreesToCreates, u
|
||||
osg::Texture2D *tex = new osg::Texture2D;
|
||||
tex->setWrap( osg::Texture2D::WRAP_S, osg::Texture2D::CLAMP );
|
||||
tex->setWrap( osg::Texture2D::WRAP_T, osg::Texture2D::CLAMP );
|
||||
tex->setImage(osgDB::readRefImageFile("Images/tree0.rgba"));
|
||||
tex->setImage(osgDB::readImageFile("Images/tree0.rgba"));
|
||||
|
||||
osg::StateSet *dstate = new osg::StateSet;
|
||||
{
|
||||
|
||||
@@ -23,6 +23,7 @@
|
||||
#include <osg/Geometry>
|
||||
#include <osg/GLExtensions>
|
||||
#include <osg/Node>
|
||||
#include <osg/NodeCallback>
|
||||
#include <osg/Notify>
|
||||
#include <osg/observer_ptr>
|
||||
#include <osg/Projection>
|
||||
@@ -132,10 +133,10 @@ void getPossibleConfigs(GraphicsContext* gc, BufferConfigList& colorConfigs,
|
||||
unsigned contextID = gc->getState()->getContextID();
|
||||
colorConfigs.push_back(BufferConfig("RGBA8", GL_RGBA8, 8));
|
||||
depthConfigs.push_back(BufferConfig("D24", GL_DEPTH_COMPONENT24, 24));
|
||||
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>();
|
||||
if (!ext->isRenderbufferMultisampleSupported())
|
||||
FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
|
||||
if (!fboe->isSupported())
|
||||
return;
|
||||
if (ext->isMultisampleSupported)
|
||||
if (fboe->isMultisampleSupported())
|
||||
glGetIntegerv(GL_MAX_SAMPLES_EXT, &maxSamples);
|
||||
// isMultisampleCoverageSupported
|
||||
if (isGLExtensionSupported(contextID,
|
||||
@@ -156,8 +157,9 @@ void getPossibleConfigs(GraphicsContext* gc, BufferConfigList& colorConfigs,
|
||||
bool checkFramebufferStatus(GraphicsContext* gc, bool silent = false)
|
||||
{
|
||||
State& state = *gc->getState();
|
||||
osg::GLExtensions* ext = state.get<GLExtensions>();
|
||||
switch(ext->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT)) {
|
||||
unsigned contextID = state.getContextID();
|
||||
FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
|
||||
switch(fboe->glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT)) {
|
||||
case GL_FRAMEBUFFER_COMPLETE_EXT:
|
||||
break;
|
||||
case GL_FRAMEBUFFER_UNSUPPORTED_EXT:
|
||||
@@ -241,30 +243,30 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
|
||||
}
|
||||
State& state = *gc->getState();
|
||||
unsigned int contextID = state.getContextID();
|
||||
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>();
|
||||
FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
|
||||
|
||||
data.fb->apply(state);
|
||||
result = checkFramebufferStatus(gc, true);
|
||||
if (!result)
|
||||
{
|
||||
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
|
||||
fboe->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
|
||||
return false;
|
||||
}
|
||||
int query;
|
||||
if (multisample)
|
||||
{
|
||||
GLuint colorRBID = colorRB->getObjectID(contextID, ext);
|
||||
ext->glBindRenderbuffer(GL_RENDERBUFFER_EXT, colorRBID);
|
||||
GLuint colorRBID = colorRB->getObjectID(contextID, fboe);
|
||||
fboe->glBindRenderbuffer(GL_RENDERBUFFER_EXT, colorRBID);
|
||||
if (csaa)
|
||||
{
|
||||
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_COVERAGE_SAMPLES_NV,
|
||||
&query);
|
||||
if (query < config.coverageSamples)
|
||||
result = false;
|
||||
else
|
||||
config.coverageSamples = query;
|
||||
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_COLOR_SAMPLES_NV,
|
||||
&query);
|
||||
|
||||
@@ -276,7 +278,7 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
|
||||
}
|
||||
else
|
||||
{
|
||||
ext->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
fboe->glGetRenderbufferParameteriv(GL_RENDERBUFFER_EXT,
|
||||
GL_RENDERBUFFER_SAMPLES_EXT,
|
||||
&query);
|
||||
if (query < config.depthSamples)
|
||||
@@ -302,7 +304,7 @@ bool createFBO(GraphicsContext* gc, FboConfig &config, FboData &data)
|
||||
result = false;
|
||||
}
|
||||
}
|
||||
ext->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
|
||||
fboe->glBindFramebuffer(GL_FRAMEBUFFER_EXT, 0);
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -695,15 +697,15 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
|
||||
DisplaySettings* ds = viewer.getDisplaySettings() ? viewer.getDisplaySettings() : DisplaySettings::instance().get();
|
||||
GraphicsContext::ScreenIdentifier si;
|
||||
si.readDISPLAY();
|
||||
si.setUndefinedScreenDetailsToDefaultScreen();
|
||||
|
||||
// displayNum has not been set so reset it to 0.
|
||||
if (si.displayNum<0) si.displayNum = 0;
|
||||
|
||||
bool decoration = true;
|
||||
if (x < 0)
|
||||
{
|
||||
unsigned int w, h;
|
||||
wsi->getScreenResolution(si, w, h);
|
||||
OSG_NOTICE<<"Screen resolution is "<<w<<", "<<h<<std::endl;
|
||||
OSG_NOTICE<<"ScreenIdentifier "<<si.displayNum<<", "<<si.screenNum<<std::endl;
|
||||
x = 0;
|
||||
y = 0;
|
||||
width = w;
|
||||
@@ -711,9 +713,8 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
|
||||
decoration = false;
|
||||
}
|
||||
|
||||
OSG_NOTICE<<"x = "<<x<<", y = "<<y<<", width = "<<width<<", height = "<<height<<std::endl;
|
||||
|
||||
ref_ptr<GraphicsContext::Traits> traits = new GraphicsContext::Traits(ds);
|
||||
ref_ptr<GraphicsContext::Traits> traits
|
||||
= new GraphicsContext::Traits(ds);
|
||||
traits->hostName = si.hostName;
|
||||
traits->displayNum = si.displayNum;
|
||||
traits->screenNum = si.screenNum;
|
||||
@@ -724,9 +725,10 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
|
||||
traits->windowDecoration = decoration;
|
||||
traits->doubleBuffer = true;
|
||||
traits->sharedContext = 0;
|
||||
|
||||
ref_ptr<GraphicsContext> gc = GraphicsContext::createGraphicsContext(traits.get());
|
||||
osgViewer::GraphicsWindow* gw = dynamic_cast<osgViewer::GraphicsWindow*>(gc.get());
|
||||
ref_ptr<GraphicsContext> gc
|
||||
= GraphicsContext::createGraphicsContext(traits.get());
|
||||
osgViewer::GraphicsWindow* gw
|
||||
= dynamic_cast<osgViewer::GraphicsWindow*>(gc.get());
|
||||
if (gw)
|
||||
{
|
||||
OSG_NOTIFY(INFO)<<"View::setUpViewOnSingleScreen - GraphicsWindow has been created successfully."<<std::endl;
|
||||
@@ -749,29 +751,20 @@ GraphicsContext* setupGC(osgViewer::Viewer& viewer, ArgumentParser& arguments)
|
||||
}
|
||||
// Context has to be current to test for extensions
|
||||
gc->realize();
|
||||
if (!gc->makeCurrent())
|
||||
{
|
||||
OSG_NOTIFY(NOTICE) << "Unable to create GraphicsWindow"<<std::endl;
|
||||
gc->releaseContext();
|
||||
gc->close(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
gc->makeCurrent();
|
||||
unsigned int contextID = gc->getState()->getContextID();
|
||||
osg::GLExtensions* ext = gc->getState()->get<GLExtensions>();
|
||||
if (!ext->isFrameBufferObjectSupported)
|
||||
FBOExtensions* fboe = FBOExtensions::instance(contextID, true);
|
||||
if (!fboe->isSupported())
|
||||
{
|
||||
OSG_NOTIFY(NOTICE) << "Frame buffer objects are not supported\n";
|
||||
gc->releaseContext();
|
||||
gc->close(true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (isGLExtensionSupported(contextID, "GL_ARB_depth_buffer_float"))
|
||||
depthTextureEnum = GL_DEPTH_COMPONENT32F;
|
||||
else if (isGLExtensionSupported(contextID, "GL_NV_depth_buffer_float"))
|
||||
depthTextureEnum = GL_DEPTH_COMPONENT32F_NV;
|
||||
|
||||
BufferConfigList colorConfigs;
|
||||
BufferConfigList depthConfigs;
|
||||
vector<int> coverageConfigs;
|
||||
@@ -963,7 +956,7 @@ int main(int argc, char **argv)
|
||||
arguments.getApplicationUsage()->write(std::cout,osg::ApplicationUsage::COMMAND_LINE_OPTION);
|
||||
return 1;
|
||||
}
|
||||
ref_ptr<Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
ref_ptr<Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
if (!loadedModel) {
|
||||
cerr << "couldn't load " << argv[1] << "\n";
|
||||
return 1;
|
||||
|
||||
@@ -127,7 +127,7 @@ public:
|
||||
for (osgFX::Registry::EffectMap::const_iterator i=emap.begin(); i!=emap.end(); ++i) {
|
||||
std::cout << "INFO: \t" << i->first << "\n";
|
||||
osg::ref_ptr<osgFX::Effect> effect = static_cast<osgFX::Effect *>(i->second->cloneType());
|
||||
_effects.push_back(effect.get());
|
||||
_effects.push_back(effect.get());
|
||||
}
|
||||
|
||||
std::cout << "INFO: " << emap.size() << " effect(s) ready.\n";
|
||||
@@ -144,9 +144,9 @@ public:
|
||||
inline void setScene(osg::Node* node) { _scene = node; }
|
||||
|
||||
inline bool getEffectsEnabled() const { return _fxen; }
|
||||
inline void setEffectsEnabled(bool v)
|
||||
{
|
||||
_fxen = v;
|
||||
inline void setEffectsEnabled(bool v)
|
||||
{
|
||||
_fxen = v;
|
||||
if (getSelectedEffect()) {
|
||||
getSelectedEffect()->setEnabled(_fxen);
|
||||
}
|
||||
@@ -156,7 +156,7 @@ public:
|
||||
inline void setEffectIndex(int i)
|
||||
{
|
||||
if (i >= static_cast<int>(_effects.size())) i = 0;
|
||||
if (i < 0) i = static_cast<int>(_effects.size()-1);
|
||||
if (i < 0) i = static_cast<int>(_effects.size()-1);
|
||||
_selected_fx = i;
|
||||
rebuild();
|
||||
}
|
||||
@@ -174,11 +174,11 @@ protected:
|
||||
{
|
||||
float zPos = -0.1; // note from Robert, was 0.1f, but now must be -0.1f to keep text visible??#!? due
|
||||
// to some other change in the OSG not tracked down yet...
|
||||
|
||||
osg::ref_ptr<osgText::Font> arial = osgText::readRefFontFile("fonts/arial.ttf");
|
||||
|
||||
osg::ref_ptr<osgText::Font> arial = osgText::readFontFile("fonts/arial.ttf");
|
||||
|
||||
osg::ref_ptr<osgText::Text> hints = new osgText::Text;
|
||||
hints->setFont(arial);
|
||||
hints->setFont(arial.get());
|
||||
hints->setColor(_hints_color);
|
||||
hints->setAlignment(osgText::Text::CENTER_BOTTOM);
|
||||
hints->setCharacterSize(13);
|
||||
@@ -195,7 +195,7 @@ protected:
|
||||
if (!author_name.empty()) {
|
||||
effect_description = author_name = "AUTHOR: " + std::string(_effects[_selected_fx]->effectAuthor()) + std::string("\n\n");
|
||||
}
|
||||
effect_description += "DESCRIPTION:\n" + std::string(_effects[_selected_fx]->effectDescription());
|
||||
effect_description += "DESCRIPTION:\n" + std::string(_effects[_selected_fx]->effectDescription());
|
||||
|
||||
if (_scene.valid() && _root.valid()) {
|
||||
_root->removeChildren(0, _root->getNumChildren());
|
||||
@@ -268,7 +268,7 @@ EffectPanel* build_gui(osg::Group* root)
|
||||
|
||||
osg::ref_ptr<EffectPanel> effect_panel = new EffectPanel;
|
||||
effect_panel->setCaption("osgFX Effect Browser");
|
||||
effect_panel->setRect(osgfxbrowser::Rect(20, 20, 1000, 280));
|
||||
effect_panel->setRect(osgfxbrowser::Rect(20, 20, 1000, 280));
|
||||
|
||||
hud->addChild(effect_panel.get());
|
||||
|
||||
@@ -325,7 +325,7 @@ int main(int argc, char *argv[])
|
||||
unsigned int clearMask = viewer.getCamera()->getClearMask();
|
||||
viewer.getCamera()->setClearMask(clearMask | GL_STENCIL_BUFFER_BIT);
|
||||
viewer.getCamera()->setClearStencil(0);
|
||||
|
||||
|
||||
// any option left unread are converted into errors to write out later.
|
||||
arguments.reportRemainingOptionsAsUnrecognized();
|
||||
|
||||
@@ -336,11 +336,11 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
// read the scene from the list of file specified commandline args.
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readRefNodeFiles(arguments);
|
||||
osg::ref_ptr<osg::Node> loadedModel = osgDB::readNodeFiles(arguments);
|
||||
|
||||
// if not loaded assume no arguments passed in, try use default mode instead.
|
||||
if (!loadedModel) loadedModel = osgDB::readRefNodeFile("dumptruck.osgt");
|
||||
|
||||
if (!loadedModel) loadedModel = osgDB::readNodeFile("dumptruck.osgt");
|
||||
|
||||
if (!loadedModel)
|
||||
{
|
||||
std::cout << arguments.getApplicationName() <<": No data loaded" << std::endl;
|
||||
|
||||
@@ -117,14 +117,14 @@ int main(int argc, char *argv[])
|
||||
}
|
||||
|
||||
// load the image
|
||||
osg::ref_ptr<osg::Image> startIm = osgDB::readRefImageFile(startName);
|
||||
osg::ref_ptr<osg::Image> startIm = osgDB::readImageFile(startName);
|
||||
|
||||
if (!startIm) {
|
||||
std::cout << "Could not load start image.\n";
|
||||
return(1);
|
||||
}
|
||||
|
||||
osg::ref_ptr<osg::Node> scene = createScene(startIm.get());
|
||||
osg::Node* scene = createScene(startIm.get());
|
||||
|
||||
// construct the viewer.
|
||||
osgViewer::Viewer viewer;
|
||||
|
||||
@@ -44,7 +44,7 @@
|
||||
// wraps OpenGL very thinly and therefore uses all the same enum and naming conventions. The coordinate data is also
|
||||
// wrapped around OpenGL's vertex arrays and draw arrays/elements calls. Familiarity with
|
||||
// OpenGL will help you understand the osg::Geometry class which encapsulate all this, or if you
|
||||
// haven't learned OpenGL yet, learning osg::Geometry will help you understand how OpenGL
|
||||
// havn't learned OpenGL yet, learning osg::Geometry will help you understand how OpenGL
|
||||
// works!
|
||||
|
||||
// The osg::Geometry class "is a" subclass of osg::Drawable base class, so is an object that provides
|
||||
@@ -550,7 +550,7 @@ osg::Node* createBackground()
|
||||
{
|
||||
|
||||
// we'll create a texture mapped quad to sit behind the Geometry
|
||||
osg::ref_ptr<osg::Image> image = osgDB::readRefImageFile("Images/primitives.gif");
|
||||
osg::Image* image = osgDB::readImageFile("Images/primitives.gif");
|
||||
if (!image) return NULL;
|
||||
|
||||
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
|
||||
#ifdef ENABLE_GLSL
|
||||
|
||||
class SineAnimation: public osg::UniformCallback
|
||||
class SineAnimation: public osg::Uniform::Callback
|
||||
{
|
||||
public:
|
||||
SineAnimation( float rate = 1.0f, float scale = 1.0f, float offset = 0.0f ) :
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield
|
||||
* Copyright (C) 2014 Pawel Ksiezopolski
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*
|
||||
*/
|
||||
#include "AggregateGeometryVisitor.h"
|
||||
|
||||
AggregateGeometryVisitor::AggregateGeometryVisitor( ConvertTrianglesOperator* ctOperator )
|
||||
: osg::NodeVisitor( osg::NodeVisitor::TRAVERSE_ALL_CHILDREN)
|
||||
{
|
||||
_ctOperator.setConverter(ctOperator);
|
||||
init();
|
||||
}
|
||||
|
||||
void AggregateGeometryVisitor::init()
|
||||
{
|
||||
_aggregatedGeometry = new osg::Geometry;
|
||||
_ctOperator.initGeometry( _aggregatedGeometry.get() );
|
||||
_matrixStack.clear();
|
||||
}
|
||||
|
||||
AggregateGeometryVisitor::AddObjectResult AggregateGeometryVisitor::addObject( osg::Node* object, unsigned int typeID, unsigned int lodNumber )
|
||||
{
|
||||
unsigned int currentVertexFirst = _aggregatedGeometry->getVertexArray()->getNumElements();
|
||||
_currentTypeID = typeID;
|
||||
_currentLodNumber = lodNumber;
|
||||
object->accept(*this);
|
||||
unsigned int currentVertexCount = _aggregatedGeometry->getVertexArray()->getNumElements() - currentVertexFirst;
|
||||
_aggregatedGeometry->addPrimitiveSet( new osg::DrawArrays( osg::PrimitiveSet::TRIANGLES, currentVertexFirst, currentVertexCount ) );
|
||||
_matrixStack.clear();
|
||||
return AddObjectResult( currentVertexFirst, currentVertexCount, _aggregatedGeometry->getNumPrimitiveSets()-1 );
|
||||
}
|
||||
|
||||
void AggregateGeometryVisitor::apply( osg::Node& node )
|
||||
{
|
||||
bool pushed = _ctOperator.pushNode(&node);
|
||||
traverse(node);
|
||||
if( pushed ) _ctOperator.popNode();
|
||||
}
|
||||
|
||||
void AggregateGeometryVisitor::apply( osg::Transform& transform )
|
||||
{
|
||||
bool pushed = _ctOperator.pushNode(&transform);
|
||||
osg::Matrix matrix;
|
||||
if( !_matrixStack.empty() )
|
||||
matrix = _matrixStack.back();
|
||||
transform.computeLocalToWorldMatrix( matrix, this );
|
||||
_matrixStack.push_back( matrix );
|
||||
|
||||
traverse(transform);
|
||||
|
||||
_matrixStack.pop_back();
|
||||
if( pushed ) _ctOperator.popNode();
|
||||
}
|
||||
|
||||
void AggregateGeometryVisitor::apply( osg::Geode& geode )
|
||||
{
|
||||
bool pushed = _ctOperator.pushNode(&geode);
|
||||
|
||||
osg::Matrix matrix;
|
||||
if(! _matrixStack.empty() )
|
||||
matrix = _matrixStack.back();
|
||||
for( unsigned int i=0; i<geode.getNumDrawables(); ++i)
|
||||
{
|
||||
osg::Geometry* geom = geode.getDrawable(i)->asGeometry();
|
||||
if ( geom != NULL )
|
||||
{
|
||||
_ctOperator.setGeometryData( matrix, geom, _aggregatedGeometry.get(), (float) _currentTypeID, (float) _currentLodNumber );
|
||||
geom->accept( _ctOperator );
|
||||
}
|
||||
}
|
||||
|
||||
traverse(geode);
|
||||
if( pushed ) _ctOperator.popNode();
|
||||
}
|
||||
@@ -1,290 +0,0 @@
|
||||
/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2014 Robert Osfield
|
||||
* Copyright (C) 2014 Pawel Ksiezopolski
|
||||
*
|
||||
* This library is open source and may be redistributed and/or modified under
|
||||
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
|
||||
* (at your option) any later version. The full license is in LICENSE file
|
||||
* included with this distribution, and on the openscenegraph.org website.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* OpenSceneGraph Public License for more details.
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef AGREGATE_GEOMETRY_VISITOR_H
|
||||
#define AGREGATE_GEOMETRY_VISITOR_H 1
|
||||
#include <osg/Geode>
|
||||
#include <osg/Geometry>
|
||||
#include <osg/Transform>
|
||||
#include <osg/NodeVisitor>
|
||||
#include <osg/TriangleIndexFunctor>
|
||||
|
||||
// AggregateGeometryVisitor uses ConvertTrianglesOperator to create and fill osg::Geometry
|
||||
// with data matching users needs
|
||||
struct ConvertTrianglesOperator : public osg::Referenced
|
||||
{
|
||||
ConvertTrianglesOperator()
|
||||
: osg::Referenced()
|
||||
{
|
||||
}
|
||||
virtual void initGeometry( osg::Geometry* outputGeometry ) = 0;
|
||||
virtual bool pushNode( osg::Node* node )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
virtual void popNode() = 0;
|
||||
virtual void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber ) = 0;
|
||||
virtual void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 ) = 0;
|
||||
};
|
||||
|
||||
class GetVec2FromArrayVisitor : public osg::ValueVisitor
|
||||
{
|
||||
public:
|
||||
GetVec2FromArrayVisitor()
|
||||
{
|
||||
}
|
||||
void apply( GLfloat& value )
|
||||
{
|
||||
out = osg::Vec2( value, 0.0 );
|
||||
}
|
||||
void apply( osg::Vec2& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
virtual void apply( osg::Vec2d& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
void apply( osg::Vec3& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
void apply( osg::Vec4& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
void apply( osg::Vec3d& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
void apply( osg::Vec4d& value )
|
||||
{
|
||||
out = osg::Vec2( value.x(), value.y() );
|
||||
}
|
||||
|
||||
osg::Vec2 out;
|
||||
};
|
||||
|
||||
|
||||
// ConvertTrianglesOperatorClassic is a ConvertTrianglesOperator that creates
|
||||
// aggregated geometry with standard set of vertex attributes : vertices, normals, color and texCoord0.
|
||||
// texCoord1 holds additional information about vertex ( typeID, lodNumber, boneIndex )
|
||||
struct ConvertTrianglesOperatorClassic : public ConvertTrianglesOperator
|
||||
{
|
||||
ConvertTrianglesOperatorClassic()
|
||||
: ConvertTrianglesOperator(), _typeID(0.0f), _lodNumber(0.0f)
|
||||
|
||||
{
|
||||
_boneIndices.push_back(0.0);
|
||||
}
|
||||
virtual void initGeometry( osg::Geometry* outputGeometry )
|
||||
{
|
||||
osg::Vec3Array* vertices = new osg::Vec3Array; outputGeometry->setVertexArray( vertices );
|
||||
osg::Vec4Array* colors = new osg::Vec4Array; outputGeometry->setColorArray( colors, osg::Array::BIND_PER_VERTEX );
|
||||
osg::Vec3Array* normals = new osg::Vec3Array; outputGeometry->setNormalArray( normals, osg::Array::BIND_PER_VERTEX );
|
||||
osg::Vec2Array* texCoords0 = new osg::Vec2Array; outputGeometry->setTexCoordArray( 0, texCoords0 );
|
||||
osg::Vec3Array* texCoords1 = new osg::Vec3Array; outputGeometry->setTexCoordArray( 1, texCoords1 );
|
||||
outputGeometry->setStateSet(NULL);
|
||||
}
|
||||
virtual bool pushNode( osg::Node* node )
|
||||
{
|
||||
std::map<std::string,float>::iterator it = _boneNames.find( node->getName() );
|
||||
if(it==_boneNames.end())
|
||||
return false;
|
||||
_boneIndices.push_back( it->second );
|
||||
return true;
|
||||
}
|
||||
virtual void popNode()
|
||||
{
|
||||
_boneIndices.pop_back();
|
||||
}
|
||||
virtual void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber )
|
||||
{
|
||||
_matrix = matrix;
|
||||
|
||||
_inputVertices = dynamic_cast<osg::Vec3Array *>( inputGeometry->getVertexArray() );
|
||||
_inputColors = dynamic_cast<osg::Vec4Array *>( inputGeometry->getColorArray() );
|
||||
_inputNormals = dynamic_cast<osg::Vec3Array *>( inputGeometry->getNormalArray() );
|
||||
_inputTexCoord0 = inputGeometry->getTexCoordArray(0);
|
||||
|
||||
_outputVertices = dynamic_cast<osg::Vec3Array *>( outputGeometry->getVertexArray() );
|
||||
_outputColors = dynamic_cast<osg::Vec4Array *>( outputGeometry->getColorArray() );
|
||||
_outputNormals = dynamic_cast<osg::Vec3Array *>( outputGeometry->getNormalArray() );
|
||||
_outputTexCoord0 = dynamic_cast<osg::Vec2Array *>( outputGeometry->getTexCoordArray(0) );
|
||||
_outputTexCoord1 = dynamic_cast<osg::Vec3Array *>( outputGeometry->getTexCoordArray(1) );
|
||||
|
||||
_typeID = typeID;
|
||||
_lodNumber = lodNumber;
|
||||
}
|
||||
virtual void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 )
|
||||
{
|
||||
unsigned int ic1=i1, ic2=i2, ic3=i3, in1=i1, in2=i2, in3=i3, it01=i1, it02=i2, it03=i3;
|
||||
if ( _inputColors!=NULL && _inputColors->size() == 1 )
|
||||
{
|
||||
ic1=0; ic2=0; ic3=0;
|
||||
}
|
||||
if ( _inputNormals!=NULL && _inputNormals->size() == 1 )
|
||||
{
|
||||
in1=0; in2=0; in3=0;
|
||||
}
|
||||
if ( _inputTexCoord0!=NULL && _inputTexCoord0->getNumElements()==1 )
|
||||
{
|
||||
it01=0; it02=0; it03=0;
|
||||
}
|
||||
|
||||
_outputVertices->push_back( _inputVertices->at( i1 ) * _matrix );
|
||||
_outputVertices->push_back( _inputVertices->at( i2 ) * _matrix );
|
||||
_outputVertices->push_back( _inputVertices->at( i3 ) * _matrix );
|
||||
|
||||
if( _inputColors != NULL )
|
||||
{
|
||||
_outputColors->push_back( _inputColors->at( ic1 ) );
|
||||
_outputColors->push_back( _inputColors->at( ic2 ) );
|
||||
_outputColors->push_back( _inputColors->at( ic3 ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
for(unsigned int i=0; i<3; ++i)
|
||||
_outputColors->push_back( osg::Vec4(1.0,1.0,1.0,1.0) );
|
||||
}
|
||||
|
||||
if( _inputNormals != NULL )
|
||||
{
|
||||
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in1 ), _matrix ) );
|
||||
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in2 ), _matrix ) );
|
||||
_outputNormals->push_back( osg::Matrix::transform3x3( _inputNormals->at( in3 ), _matrix ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
for(unsigned int i=0; i<3; ++i)
|
||||
_outputNormals->push_back( osg::Vec3( 0.0,0.0,1.0 ) );
|
||||
}
|
||||
if( _inputTexCoord0 != NULL )
|
||||
{
|
||||
_inputTexCoord0->accept( it01, _inputTexCoord0Visitor );
|
||||
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
|
||||
_inputTexCoord0->accept( it02, _inputTexCoord0Visitor );
|
||||
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
|
||||
_inputTexCoord0->accept( it03, _inputTexCoord0Visitor );
|
||||
_outputTexCoord0->push_back( _inputTexCoord0Visitor.out );
|
||||
}
|
||||
else
|
||||
{
|
||||
for(unsigned int i=0; i<3; ++i)
|
||||
_outputTexCoord0->push_back( osg::Vec2(0.0,0.0) );
|
||||
}
|
||||
|
||||
for(unsigned int i=0; i<3; ++i)
|
||||
_outputTexCoord1->push_back( osg::Vec3( _typeID, _lodNumber, _boneIndices.back() ) );
|
||||
}
|
||||
void registerBoneByName( const std::string& boneName, int boneIndex )
|
||||
{
|
||||
_boneNames[boneName] = float(boneIndex);
|
||||
}
|
||||
|
||||
osg::Matrix _matrix;
|
||||
|
||||
osg::Vec3Array* _inputVertices;
|
||||
osg::Vec4Array* _inputColors;
|
||||
osg::Vec3Array* _inputNormals;
|
||||
osg::Array* _inputTexCoord0;
|
||||
|
||||
osg::Vec3Array* _outputVertices;
|
||||
osg::Vec4Array* _outputColors;
|
||||
osg::Vec3Array* _outputNormals;
|
||||
osg::Vec2Array* _outputTexCoord0;
|
||||
osg::Vec3Array* _outputTexCoord1;
|
||||
|
||||
float _typeID;
|
||||
float _lodNumber;
|
||||
std::vector<float> _boneIndices;
|
||||
|
||||
std::map<std::string,float> _boneNames;
|
||||
|
||||
GetVec2FromArrayVisitor _inputTexCoord0Visitor;
|
||||
};
|
||||
|
||||
|
||||
|
||||
class AggregateGeometryVisitor : public osg::NodeVisitor
|
||||
{
|
||||
public:
|
||||
AggregateGeometryVisitor( ConvertTrianglesOperator* ctOperator );
|
||||
void init();
|
||||
|
||||
// osg::TriangleIndexFunctor uses its template parameter as a base class, so we must use an adapter pattern to hack it
|
||||
struct ConvertTrianglesBridge
|
||||
{
|
||||
inline void setConverter( ConvertTrianglesOperator* cto )
|
||||
{
|
||||
_converter = cto;
|
||||
}
|
||||
inline void initGeometry( osg::Geometry* outputGeometry )
|
||||
{
|
||||
_converter->initGeometry(outputGeometry);
|
||||
}
|
||||
inline bool pushNode( osg::Node* node )
|
||||
{
|
||||
return _converter->pushNode( node );
|
||||
}
|
||||
inline void popNode()
|
||||
{
|
||||
_converter->popNode();
|
||||
}
|
||||
inline void setGeometryData( const osg::Matrix &matrix, osg::Geometry *inputGeometry, osg::Geometry* outputGeometry, float typeID, float lodNumber )
|
||||
{
|
||||
_converter->setGeometryData(matrix,inputGeometry,outputGeometry,typeID, lodNumber);
|
||||
}
|
||||
inline void operator() ( unsigned int i1, unsigned int i2, unsigned int i3 )
|
||||
{
|
||||
_converter->operator()(i1,i2,i3);
|
||||
}
|
||||
|
||||
osg::ref_ptr<ConvertTrianglesOperator> _converter;
|
||||
};
|
||||
|
||||
|
||||
// struct returning information about added object ( first vertex, vertex count, primitiveset index )
|
||||
// used later to create indirect command texture buffers
|
||||
struct AddObjectResult
|
||||
{
|
||||
AddObjectResult( unsigned int f, unsigned int c, unsigned int i )
|
||||
: first(f), count(c), index(i)
|
||||
{
|
||||
}
|
||||
unsigned int first;
|
||||
unsigned int count;
|
||||
unsigned int index;
|
||||
};
|
||||
AddObjectResult addObject( osg::Node* object, unsigned int typeID, unsigned int lodNumber );
|
||||
|
||||
void apply( osg::Node& node );
|
||||
void apply( osg::Transform& transform );
|
||||
void apply( osg::Geode& geode );
|
||||
|
||||
inline osg::Geometry* getAggregatedGeometry()
|
||||
{
|
||||
return _aggregatedGeometry.get();
|
||||
}
|
||||
protected:
|
||||
osg::ref_ptr<osg::Geometry> _aggregatedGeometry;
|
||||
osg::TriangleIndexFunctor<ConvertTrianglesBridge> _ctOperator;
|
||||
std::vector<osg::Matrix> _matrixStack;
|
||||
|
||||
unsigned int _currentTypeID;
|
||||
unsigned int _currentLodNumber;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,16 +0,0 @@
|
||||
SET(TARGET_SRC
|
||||
ShapeToGeometry.cpp
|
||||
DrawIndirectPrimitiveSet.cpp
|
||||
AggregateGeometryVisitor.cpp
|
||||
osggpucull.cpp
|
||||
)
|
||||
|
||||
SET(TARGET_H
|
||||
ShapeToGeometry.h
|
||||
DrawIndirectPrimitiveSet.h
|
||||
AggregateGeometryVisitor.h
|
||||
GpuCullShaders.h
|
||||
)
|
||||
|
||||
#### end var setup ###
|
||||
SETUP_EXAMPLE(osggpucull)
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user