SLProject  4.2.000
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>
61 #include <AppDemoSceneRevolver.h>
62 #include <AppDemoSceneRTDoF.h>
64 #include <AppDemoSceneRTLens.h>
65 #include <AppDemoSceneRTSpheres.h>
66 #include <AppDemoSceneRobot.h>
67 #include <AppDemoSceneSuzanne.h>
69 #include <AppDemoSceneShaderBump.h>
70 #include <AppDemoSceneShaderCook.h>
72 #include <AppDemoSceneShaderIBL.h>
75 #include <AppDemoSceneShaderWave.h>
94 #include <AppDemoSceneZFighting.h>
95 
96 #ifdef SL_BUILD_WAI
97 # include <CVTrackedWAI.h>
98 #else
99 # include <CVTracked.h>
100 #endif
101 
102 //-----------------------------------------------------------------------------
103 // Global pointers and functions declared in AppDemoVideo
104 extern SLGLTexture* gVideoTexture;
105 extern CVTracked* gVideoTracker;
106 extern SLNode* gVideoTrackedNode;
107 bool onUpdateVideo();
108 
109 //-----------------------------------------------------------------------------
111  int curDPI,
112  SLInputManager& inputManager)
113 {
114  // The sceneview will be deleted by SLScene::~SLScene()
115  return new AppDemoSceneView(scene, curDPI, inputManager);
116 }
117 //-----------------------------------------------------------------------------
119 {
120  switch (sceneID)
121  {
122  case SID_Empty: return new AppDemoSceneEmpty();
123  case SID_Figure: return new AppDemoSceneFigure();
124  case SID_Minimal: return new AppDemoSceneMinimal();
125  case SID_MeshLoad: return new AppDemoSceneMeshLoad();
126  case SID_Revolver: return new AppDemoSceneRevolver();
127  case SID_TextureBlend: return new AppDemoSceneTextureBlend();
128  case SID_TextureFilter: return new AppDemoSceneTextureFilter();
129 #ifdef SL_BUILD_WITH_KTX
131 #endif
132  case SID_FrustumCull: return new AppDemoSceneFrustum();
133  case SID_2Dand3DText: return new AppDemoScene2Dand3DText();
134  case SID_PointClouds: return new AppDemoScenePointClouds();
135  case SID_ZFighting: return new AppDemoSceneZFighting();
136  case SID_ShaderPerVertexBlinn: return new AppDemoSceneShaderBlinn("Per Vertex Blinn-Phong Lighting", true);
137  case SID_ShaderPerPixelBlinn: return new AppDemoSceneShaderBlinn("Per Pixel Blinn-Phong Lighting", false);
139  case SID_ShaderIBL: return new AppDemoSceneShaderIBL();
140  case SID_ShaderWave: return new AppDemoSceneShaderWave();
141  case SID_ShaderBumpNormal: return new AppDemoSceneShaderBump();
143  case SID_ShaderSkybox: return new AppDemoSceneShaderSkybox();
144  case SID_ShaderEarth: return new AppDemoSceneShaderEarth();
150  case SID_SuzannePerPixBlinn: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and reflection colors", false, false, false, false, false);
151  case SID_SuzannePerPixBlinnTm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and texture mapping", true, false, false, false, false);
152  case SID_SuzannePerPixBlinnNm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and normal mapping", false, true, false, false, false);
153  case SID_SuzannePerPixBlinnAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and ambient occlusion", false, false, true, false, false);
154  case SID_SuzannePerPixBlinnSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and shadow mapping", false, false, false, true, false);
155  case SID_SuzannePerPixBlinnTmNm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture and normal mapping", true, true, false, false, false);
156  case SID_SuzannePerPixBlinnTmAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture mapping and ambient occlusion", true, false, true, false, false);
157  case SID_SuzannePerPixBlinnNmAo: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, normal mapping and ambient occlusion", false, true, true, false, false);
158  case SID_SuzannePerPixBlinnTmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, texture mapping and shadow mapping", true, false, false, true, false);
159  case SID_SuzannePerPixBlinnNmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, normal mapping and shadow mapping", false, true, false, true, false);
160  case SID_SuzannePerPixBlinnAoSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting, ambient occlusion and shadow mapping", false, false, true, true, false);
161  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);
162  case SID_SuzannePerPixBlinnTmNmSm: return new AppDemoSceneSuzanne("Suzanne with per pixel Blinn-Phong lighting and diffuse, normal and shadow mapping ", true, true, false, true, false);
163  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);
164  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);
167  case SID_glTF_Sponza:
169  case SID_Robotics_FanucCRX_FK: return new AppDemoSceneRobot();
170  case SID_VolumeRayCast: return new AppDemoSceneVolumeRayCast();
172  case SID_AnimationNode: return new AppDemoSceneAnimNode();
188  case SID_VideoTrackWAI: return new AppDemoSceneVideoTrackWAI();
189  case SID_VideoSensorAR: return new AppDemoSceneVideoSensorAR();
198  case SID_RTSpheres:
201  case SID_RTDoF: return new AppDemoSceneRTDoF();
202  case SID_RTLens: return new AppDemoSceneRTLens();
218  default: SL_EXIT_MSG("appDemoSwitchScene: Unknown SceneID");
219  }
220 }
221 //-----------------------------------------------------------------------------
223 {
224  // Reset video and trackers
225  CVCapture::instance()->videoType(VT_NONE); // turn off any video
226  CVTracked::resetTimes(); // delete all gVideoTracker times
227  delete gVideoTracker; // delete the tracker deep
228  gVideoTracker = nullptr;
229  gVideoTexture = nullptr; // The video texture will be deleted by scene uninit
230  gVideoTrackedNode = nullptr; // The tracked node will be deleted by scene uninit
231 
232  // Clear gui stuff that depends on scene and sceneview
234 }
235 //-----------------------------------------------------------------------------
237 {
238  AppDemoGui::loadingString = "Loading ...";
239 }
240 //-----------------------------------------------------------------------------
242 {
243  AppDemoGui::loadingString = "Assembling ...";
244 }
245 //-----------------------------------------------------------------------------
247 {
248  if (CVCapture::instance()->videoType() != VT_NONE)
249  {
250  if (sv->viewportSameAsVideo())
251  {
252  // Pass a negative value to the start function, so that the
253  // viewport aspect ratio can be adapted later to the video aspect.
254  // This will be known after start.
255  CVCapture::instance()->start(-1.0f);
256  SLVec2i videoAspect;
257  videoAspect.x = CVCapture::instance()->captureSize.width;
258  videoAspect.y = CVCapture::instance()->captureSize.height;
259  sv->setViewportFromRatio(videoAspect,
260  sv->viewportAlign(),
261  true);
262  }
263  else
265  }
266 }
267 //-----------------------------------------------------------------------------
269 {
270  // If live video image is requested grab it and copy it
271  if (CVCapture::instance()->videoType() != VT_NONE)
272  {
273  float viewportWdivH = sv->viewportWdivH();
274  CVCapture::instance()->grabAndAdjustForSL(viewportWdivH);
275  }
276 
277  SLbool trackingGotUpdated = onUpdateVideo();
278  return trackingGotUpdated;
279 }
280 //-----------------------------------------------------------------------------
281 // The entry point of our application.
282 // On most platforms, SL_MAIN_FUNCTION is simply `main`.
283 // On Android though, there is no `main` function, so we emulate it by setting
284 // SL_MAIN_FUNCTION to `slAndroidMain`, which creates a "fake" main function.
285 // This `slAndroidMain` function is then called in the JNI initialization code
286 // to set up the application configuration.
287 int SL_MAIN_FUNCTION(int argc, char* argv[])
288 {
290  config.argc = argc;
291  config.argv = argv;
292  config.windowWidth = 1280;
293  config.windowHeight = 720;
294  config.windowTitle = "SLProject Test Application";
295  config.numSamples = 4;
296  config.startSceneID = SL_STARTSCENE;
307 
308  return App::run(config);
309 }
310 //-----------------------------------------------------------------------------
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_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_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_RTMuttenzerBox
@ 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.
@ VT_NONE
No camera needed.
Definition: CVCapture.h:41
bool SLbool
Definition: SL.h:175
#define SL_EXIT_MSG(message)
Definition: SL.h:240
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:229
static SLstring loadingString
String shown during loading screens.
Definition: AppDemoGui.h:78
static void clear()
Definition: AppDemoGui.cpp:218
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 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 Muttenzer Box 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:147
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:155
void setViewportFromRatio(const SLVec2i &vpRatio, SLViewportAlign vpAlignment, SLbool vpSameAsVideo)
Sets the viewport ratio and the viewport rectangle.
SLViewportAlign viewportAlign() const
Definition: SLSceneView.h:181
SLfloat viewportWdivH() const
Definition: SLSceneView.h:178
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