SLProject  4.3.020
A platform independent 3D computer graphics framework for desktop OS, Android, iOS and online in web browsers
AppDemoMain.cpp
Go to the documentation of this file.
1 /**
2  * \file AppDemoMain.cpp
3  * \brief This file has the main function of the demo app of SLProject
4  * \details An App::Config is set and then passed to the run function defined
5  * App.h. Beside this is contains the callback functions for the
6  * scene creation. See App.h for their typedef.
7  * For more info on how to create a new app with SLProject see:
8  * https://github.com/cpvrlab/SLProject4/wiki/Creating-a-New-App
9  * For more info about App framework see:
10  * https://cpvrlab.github.io/SLProject4/app-framework.html
11  * \authors Marcus Hudritsch, Marino von Wattenwyl
12  * \date July 2024
13  * \copyright http://opensource.org/licenses/GPL-3.0
14  * \remarks Please use clangformat to format the code. See more code style on
15  * https://github.com/cpvrlab/SLProject4/wiki/SLProject-Coding-Style
16  */
17 
18 #include <App.h>
19 #include <AppCommon.h>
20 #include <AppDemoGui.h>
21 #include <AppDemoSceneView.h>
22 #include <AppDemoSceneID.h>
23 
24 #include <SLGLState.h>
25 #include <SLEnums.h>
26 #include <CVCapture.h>
27 
29 #include <AppDemoSceneAnimNode.h>
35 #include <AppDemoSceneEmpty.h>
44 #include <AppDemoSceneFigure.h>
45 #include <AppDemoSceneFrustum.h>
46 #include <AppDemoSceneGLTF.h>
48 #include <AppDemoSceneMeshLoad.h>
49 #include <AppDemoSceneMinimal.h>
50 #include <AppDemoSceneLargeModel.h>
63 #include <AppDemoSceneRevolver.h>
64 #include <AppDemoSceneRTDoF.h>
65 #include <AppDemoSceneRTLens.h>
66 #include <AppDemoSceneRTSpheres.h>
67 #include <AppDemoSceneRobot.h>
68 #include <AppDemoSceneSuzanne.h>
70 #include <AppDemoSceneShaderBump.h>
71 #include <AppDemoSceneShaderCook.h>
73 #include <AppDemoSceneShaderIBL.h>
76 #include <AppDemoSceneShaderWave.h>
95 #include <AppDemoSceneZFighting.h>
96 
97 #ifdef SL_BUILD_WAI
98 # include <CVTrackedWAI.h>
99 #else
100 # include <CVTracked.h>
101 #endif
102 
103 //-----------------------------------------------------------------------------
104 // Global pointers and functions declared in AppDemoVideo
105 extern SLGLTexture* gVideoTexture;
106 extern CVTracked* gVideoTracker;
107 extern SLNode* gVideoTrackedNode;
108 bool onUpdateVideo();
109 
110 //-----------------------------------------------------------------------------
112  int curDPI,
113  SLInputManager& inputManager)
114 {
115  // The sceneview will be deleted by SLScene::~SLScene()
116  return new AppDemoSceneView(scene, curDPI, inputManager);
117 }
118 //-----------------------------------------------------------------------------
120 {
121  switch (sceneID)
122  {
123  case SID_Empty: return new AppDemoSceneEmpty();
124  case SID_Figure: return new AppDemoSceneFigure();
125  case SID_Minimal: return new AppDemoSceneMinimal();
126  case SID_MeshLoad: return new AppDemoSceneMeshLoad();
127  case SID_Revolver: return new AppDemoSceneRevolver();
128  case SID_TextureBlend: return new AppDemoSceneTextureBlend();
129  case SID_TextureFilter: return new AppDemoSceneTextureFilter();
130 #ifdef SL_BUILD_WITH_KTX
132 #endif
133  case SID_FrustumCull: return new AppDemoSceneFrustum();
134  case SID_2Dand3DText: return new AppDemoScene2Dand3DText();
135  case SID_PointClouds: return new AppDemoScenePointClouds();
136  case SID_ZFighting: return new AppDemoSceneZFighting();
137  case SID_ShaderPerVertexBlinn: return new AppDemoSceneShaderBlinn("Per Vertex Blinn-Phong Lighting", true);
138  case SID_ShaderPerPixelBlinn: return new AppDemoSceneShaderBlinn("Per Pixel Blinn-Phong Lighting", false);
140  case SID_ShaderIBL: return new AppDemoSceneShaderIBL();
141  case SID_ShaderWave: return new AppDemoSceneShaderWave();
142  case SID_ShaderBumpNormal: return new AppDemoSceneShaderBump();
144  case SID_ShaderSkybox: return new AppDemoSceneShaderSkybox();
145  case SID_ShaderEarth: return new AppDemoSceneShaderEarth();
151  case SID_SuzannePerPixBlinn: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and reflection colors", false, false, false, false, false);
152  case SID_SuzannePerPixBlinnTm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and texture mapping", true, false, false, false, false);
153  case SID_SuzannePerPixBlinnNm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and normal mapping", false, true, false, false, false);
154  case SID_SuzannePerPixBlinnAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and ambient occlusion", false, false, true, false, false);
155  case SID_SuzannePerPixBlinnSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and shadow mapping", false, false, false, true, false);
156  case SID_SuzannePerPixBlinnTmNm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture and normal mapping", true, true, false, false, false);
157  case SID_SuzannePerPixBlinnTmAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture mapping and ambient occlusion", true, false, true, false, false);
158  case SID_SuzannePerPixBlinnNmAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, normal mapping and ambient occlusion", false, true, true, false, false);
159  case SID_SuzannePerPixBlinnTmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture mapping and shadow mapping", true, false, false, true, false);
160  case SID_SuzannePerPixBlinnNmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, normal mapping and shadow mapping", false, true, false, true, false);
161  case SID_SuzannePerPixBlinnAoSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, ambient occlusion and shadow mapping", false, false, true, true, false);
162  case SID_SuzannePerPixBlinnTmNmAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and diffuse, normal, ambient occlusion and shadow mapping", true, true, true, false, false);
163  case SID_SuzannePerPixBlinnTmNmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and diffuse, normal and shadow mapping ", true, true, false, true, false);
164  case SID_SuzannePerPixBlinnTmNmAoSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and diffuse, normal, ambient occlusion and shadow mapping", true, true, true, true, false);
165  case SID_SuzannePerPixCookTmNmAoSmEm: return new AppDemoSceneSuzanne("Suzanne with per pixel Cook-Torrance lighting and diffuse, normal, ambient occlusion, shadow and environment mapping", true, true, true, true, true);
168  case SID_glTF_Sponza:
170  case SID_Robotics_FanucCRX_FK: return new AppDemoSceneRobot();
171  case SID_VolumeRayCast: return new AppDemoSceneVolumeRayCast();
173  case SID_AnimationNode: return new AppDemoSceneAnimNode();
189  case SID_VideoTrackWAI: return new AppDemoSceneVideoTrackWAI();
190  case SID_VideoSensorAR: return new AppDemoSceneVideoSensorAR();
199  case SID_RTSpheres:
203  case SID_RTDoF: return new AppDemoSceneRTDoF();
204  case SID_RTLens: return new AppDemoSceneRTLens();
220  default: SL_EXIT_MSG("appDemoSwitchScene: Unknown SceneID");
221  }
222 }
223 //-----------------------------------------------------------------------------
225 {
226  // Reset video and trackers
227  CVCapture::instance()->videoType(VT_NONE); // turn off any video
228  CVTracked::resetTimes(); // delete all gVideoTracker times
229  delete gVideoTracker; // delete the tracker deep
230  gVideoTracker = nullptr;
231  gVideoTexture = nullptr; // The video texture will be deleted by scene uninit
232  gVideoTrackedNode = nullptr; // The tracked node will be deleted by scene uninit
233 
234  // Clear gui stuff that depends on scene and sceneview
236 }
237 //-----------------------------------------------------------------------------
239 {
240  AppDemoGui::loadingString = "Loading ...";
241 }
242 //-----------------------------------------------------------------------------
244 {
245  AppDemoGui::loadingString = "Assembling ...";
246 }
247 //-----------------------------------------------------------------------------
249 {
250  if (CVCapture::instance()->videoType() != VT_NONE)
251  {
252  if (sv->viewportSameAsVideo())
253  {
254  // Pass a negative value to the start function, so that the
255  // viewport aspect ratio can be adapted later to the video aspect.
256  // This will be known after start.
257  CVCapture::instance()->start(-1.0f);
258  SLVec2i videoAspect;
259  videoAspect.x = CVCapture::instance()->captureSize.width;
260  videoAspect.y = CVCapture::instance()->captureSize.height;
261  sv->setViewportFromRatio(videoAspect,
262  sv->viewportAlign(),
263  true);
264  }
265  else
267  }
268 }
269 //-----------------------------------------------------------------------------
271 {
272  // If live video image is requested grab it and copy it
273  if (CVCapture::instance()->videoType() != VT_NONE)
274  {
275  float viewportWdivH = sv->viewportWdivH();
276  CVCapture::instance()->grabAndAdjustForSL(viewportWdivH);
277  }
278 
279  SLbool trackingGotUpdated = onUpdateVideo();
280  return trackingGotUpdated;
281 }
282 //-----------------------------------------------------------------------------
283 // The entry point of our application.
284 // On most platforms, SL_MAIN_FUNCTION is simply `main`.
285 // On Android though, there is no `main` function, so we emulate it by setting
286 // SL_MAIN_FUNCTION to `slAndroidMain`, which creates a "fake" main function.
287 // This `slAndroidMain` function is then called in the JNI initialization code
288 // to set up the application configuration.
289 int SL_MAIN_FUNCTION(int argc, char* argv[])
290 {
292  config.argc = argc;
293  config.argv = argv;
294  config.windowWidth = 1280;
295  config.windowHeight = 720;
296  config.windowTitle = "SLProject Test Application";
297  config.numSamples = 4;
298  config.startSceneID = SL_STARTSCENE;
309 
310  return App::run(config);
311 }
312 //-----------------------------------------------------------------------------
The App namespace declares the App::Config struct and the App::run function.
The AppCommon class holds the top-level instances of the app-demo.
C++ Header file for the class AppDemoGui.h.
static SLbool onUpdate(SLSceneView *sv)
int SL_MAIN_FUNCTION(int argc, char *argv[])
bool onUpdateVideo()
Implements the update per frame for video update and feature tracking.
static SLSceneView * createSceneView(SLScene *scene, int curDPI, SLInputManager &inputManager)
SLNode * gVideoTrackedNode
static void onBeforeSceneAssembly(SLSceneView *sv, SLScene *s)
static void onAfterSceneAssembly(SLSceneView *sv, SLScene *s)
SLGLTexture * gVideoTexture
static void onBeforeSceneDelete(SLSceneView *sv, SLScene *s)
static void onBeforeSceneLoad(SLSceneView *sv, SLScene *s)
CVTracked * gVideoTracker
static SLScene * createScene(SLSceneID sceneID)
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Definition of scene IDs in the demo app.
@ SID_SuzannePerPixBlinnNmSm
@ SID_Benchmark_SkinnedAnimations
@ SID_TextureBlend
@ SID_Minimal
@ SID_glTF_Sponza
@ SID_VideoTrackChessScnd
@ SID_ParticleSystem_Many
@ SID_SuzannePerPixBlinnTmAo
@ SID_VideoTrackMediaPipeHandsMain
@ SID_Benchmark_LargeModel
@ SID_PTMuttenzerBox
@ SID_SuzannePerPixBlinnTmSm
@ SID_SuzannePerPixBlinnAoSm
@ SID_ErlebAR_BielCBB
@ SID_ParticleSystem_ComplexFire
@ SID_ParticleSystem_RingOfFire
@ SID_ShaderSkybox
@ SID_RTSoftShadows
@ SID_Figure
@ SID_SuzannePerPixBlinnNm
@ SID_ShadowMappingSpotLights
@ SID_VideoTrackFaceScnd
@ SID_RTSpheres
@ SID_VideoSensorAR
@ SID_ErlebAR_BielBFH
@ SID_ErlebAR_BernChristoffel
@ SID_PointClouds
@ SID_ParticleSystem_DustStorm
@ SID_Revolver
@ SID_SuzannePerPixBlinnNmAo
@ SID_ShaderEarth
@ SID_VolumeRayCast
@ SID_VideoTextureLive
@ SID_AnimationNode
@ SID_ParticleSystem_Simple
@ SID_VideoCalibrateScnd
@ SID_Benchmark_JansUniverse
@ SID_Benchmark_ColumnsNoLOD
@ SID_MeshLoad
@ SID_PTMuttenzerBox2
@ SID_ParticleSystem_Fountain
@ SID_SuzannePerPixBlinnSm
@ SID_ShadowMappingLightTypes
@ SID_AnimationSkinnedMass
@ SID_VideoTextureFile
@ SID_SuzannePerPixBlinnTmNmSm
@ SID_ShaderPerPixelBlinn
@ SID_ZFighting
@ SID_SuzannePerPixBlinnTm
@ SID_ErlebAR_AventicumAmphiteatre
@ SID_Empty
@ SID_Benchmark_NodeAnimations
@ SID_Benchmark_ColumnsLOD
@ SID_ShadowMappingCascaded
@ SID_SuzannePerPixBlinnTmNmAoSm
@ SID_SuzannePerPixCookTmNmAoSmEm
@ SID_ErlebAR_AventicumCigognier
@ SID_glTF_DamagedHelmet
@ SID_SuzannePerPixBlinn
@ SID_ShaderIBL
@ SID_ShadowMappingPointLights
@ SID_VideoTrackArucoMain
@ SID_glTF_FlightHelmet
@ SID_TextureFilter
@ SID_RTLens
@ SID_Benchmark_ParticleSystemComplexFire
@ SID_Benchmark_LotsOfNodes
@ SID_VideoTrackArucoScnd
@ SID_SuzannePerPixBlinnTmNmAo
@ SID_VideoTrackFeature2DMain
@ SID_ParticleSystem_Sun
@ SID_VolumeRayCastLighted
@ SID_ErlebAR_AventicumTheatre
@ SID_ShadowMappingBasicScene
@ SID_2Dand3DText
@ SID_VideoTrackFaceMain
@ SID_VideoCalibrateMain
@ SID_VideoTrackChessMain
@ SID_ShaderBumpParallax
@ SID_ShaderPerPixelCook
@ SID_ShaderWave
@ SID_SuzannePerPixBlinnAo
@ SID_SuzannePerPixBlinnTmNm
@ SID_ErlebAR_AugustaRauricaTmpTht
@ SID_ErlebAR_SutzKirchrain18
@ SID_TextureCompression
@ SID_ShaderBumpNormal
@ SID_Robotics_FanucCRX_FK
@ SID_glTF_WaterBottle
@ SID_FrustumCull
@ SID_VideoTrackWAI
@ SID_ShaderPerVertexBlinn
@ SID_AnimationNodeMass
@ SID_AnimationSkinned
@ SID_RTDoF
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
Class declaration for an SLScene inherited class.
@ VT_NONE
No camera needed.
Definition: CVCapture.h:41
bool SLbool
analog to GLbool
Definition: SL.h:202
#define SL_EXIT_MSG(message)
Definition: SL.h:288
int SLSceneID
Scene identifier.
Definition: SLEnums.h:91
Singleton class for global render state.
SLScene SLSceneView SLint sceneID
Definition: SLScene.h:33
static void loadConfig(SLint dotsPerInch)
Loads the UI configuration.
static void saveConfig()
Stores the UI configuration.
static void build(SLScene *s, SLSceneView *sv)
This is the main building function for the GUI of the Demo apps.
Definition: AppDemoGui.cpp:232
static SLstring loadingString
String shown during loading screens.
Definition: AppDemoGui.h:78
static void clear()
Definition: AppDemoGui.cpp:221
Class for 2D and 3D text scene.
Class for node animation test scene.
Class for benchmark mass animation test scene.
Class for mass animation test scene.
Class for skinned animation test scene.
Class for skinned animation test scene.
Class for skinned animation test scene.
Class for ErlebAR model for Augusta Raurica Tempel & Theater.
Class for ErlebAR model for Aventicum Amphitheater.
Class for ErlebAR model for Aventicum Cigognier.
Class for ErlebAR model for Aventicum Theater.
Class for ErlebAR model Christoffel Tower in Bern.
Class for ErlebAR model in Biel at BFH.
Class for ErlebAR model in Biel Campus Biel-Bienne (CBB).
Class for ErlebAR model in Sutz.
Class for the figure scene.
Class for frustum culling test scene.
Class for GLTF file loading demo scene.
Class for the benchmark scene for Jans Universe.
Class for large model scene.
Class for level of detail test scene.
Class for scene with lots of nodes.
Class for mesh loading demo scene.
Class for minimal scene.
Class for the Muttenzer Box path tracing scene with soft gloss materials.
Class for the Muttenzer Box ray tracing scene.
Class for fire ring particle system scene.
Class for simple particle system scene.
Class for simple particle system scene.
Class for benchmark scene with a particle system with many particles.
Class for fire ring particle system scene.
Class for simple particle system scene.
Class for sun particle system scene.
Class for point cloud test scene.
Class for the depth of field ray tracing scene.
Class for the lens ray tracing scene.
Class for the ray tracing scene with sphere group.
Class for revolver mesh scene.
Class for a robot arm test scene.
Class for demo scene with Blinn-Phong lighting per vertex or per pixel.
Class for normal map bump mapping.
Class for Cook-Torrance lighting demo scene.
Class for image base lighting demo scene.
Class for image base lighting demo scene.
Class for parallax bump mapping demo scene.
Class for image base lighting demo scene.
Class for per vertex wave shader.
Class for basic shadow mapping demo scene.
Class for demo scene for cascaded shadow mapping.
Class for demo scene for point light shadow mapping.
Class for demo scene for spotlight shadow mapping.
Class for demo scene with all shadow mapping types.
Class for all variants of generated shaders on the Suzanne head.
Class for texture blending scene.
Class for texture compression test scene.
Class for texture filtering scene.
Class for devices IMU and GPS Sensors test scene.
Class for live or file video on texture test scene.
Class for ARUCO marker tracking test scene.
Class for video for chessboard test scene.
Class for facial feature tracking test scene.
Class for feature tracking test scene.
Class for Mediapipe hand tracking test scene.
Class for Mediapipe hand tracking test scene.
Class for test scene for volume rendering of an angiographic MRI scan".
Class for test scene for lighted volume rendering of an angiographic MRI scan".
Class for z-fighting test scene.
CVSize captureSize
size of captured frame
Definition: CVCapture.h:123
void videoType(CVVideoType vt)
Setter for video type also sets the active calibration.
Definition: CVCapture.cpp:866
void start(float viewportWdivH)
starts the video capturing
Definition: CVCapture.cpp:174
static CVCapture * instance()
Public static instance getter for singleton pattern.
Definition: CVCapture.h:65
bool grabAndAdjustForSL(float viewportWdivH)
Definition: CVCapture.cpp:235
CVTracked is the pure virtual base class for tracking features in video.
Definition: CVTracked.h:50
static void resetTimes()
Resets all static variables.
Definition: CVTracked.cpp:31
Texture object for OpenGL texturing.
Definition: SLGLTexture.h:110
SLInputManager. manages system input and custom input devices.
SLNode represents a node in a hierarchical scene graph.
Definition: SLNode.h:148
The SLScene class represents the top level instance holding the scene structure.
Definition: SLScene.h:47
SceneView class represents a dynamic real time 3D view onto the scene.
Definition: SLSceneView.h:69
void viewportSameAsVideo(bool sameAsVideo)
Definition: SLSceneView.h:159
void setViewportFromRatio(const SLVec2i &vpRatio, SLViewportAlign vpAlignment, SLbool vpSameAsVideo)
Sets the viewport ratio and the viewport rectangle.
SLViewportAlign viewportAlign() const
Definition: SLSceneView.h:185
SLfloat viewportWdivH() const
Definition: SLSceneView.h:182
T y
Definition: SLVec2.h:30
T x
Definition: SLVec2.h:30
int run(Config config)
App::run implementation from App.h for the Emscripten platform.
Definition: AppAndroid.cpp:78
Config config
The configuration set in App::run.
Definition: AppAndroid.cpp:34
App configuration struct to be passed to the App::run function.
Definition: App.h:57
OnGuiLoadConfigCallback onGuiLoadConfig
Definition: App.h:73
OnAfterSceneAssemblyCallback onAfterSceneAssembly
Definition: App.h:70
SLSceneID startSceneID
Definition: App.h:64
SLint windowWidth
Definition: App.h:60
SLint windowHeight
Definition: App.h:61
OnNewSceneViewCallback onNewSceneView
Definition: App.h:65
OnUpdateCallback onUpdate
Definition: App.h:71
OnBeforeSceneAssemblyCallback onBeforeSceneAssembly
Definition: App.h:69
OnGuiSaveConfigCallback onGuiSaveConfig
Definition: App.h:74
OnNewSceneCallback onNewScene
Definition: App.h:66
SLint numSamples
Definition: App.h:63
OnGuiBuildCallback onGuiBuild
Definition: App.h:72
int argc
Definition: App.h:58
OnBeforeSceneLoadCallback onBeforeSceneLoad
Definition: App.h:68
OnBeforeSceneDeleteCallback onBeforeSceneDelete
Definition: App.h:67
char ** argv
Definition: App.h:59
SLstring windowTitle
Definition: App.h:62