// --------------------------------------------------------------- bool MyPVRDemo::InitView() { CPVRTString ErrorStr; LoadVBOs(); bool bResult = true; bResult &= LoadTextures(&ErrorStr); bResult &= LoadShaders(&ErrorStr); bResult &= CreateFBOs(&ErrorStr); if(!bResult) { PVRShellSet(prefExitMessage, ErrorStr.c_str()); return false; } m_bRotated = PVRShellGet(prefIsRotated) && PVRShellGet(prefFullScreen); // --- Set up light position, projection and view m_vLightPos = PVRTVec3(0, 125, 200); m_mxLightProj = PVRTMat4::PerspectiveFovRH(PVRT_PI / 4, 1.0f, 10.0f, 1000.0f, PVRTMat4::OGL, m_bRotated); m_mxLightView = PVRTMat4::LookAtRH(m_vLightPos, PVRTVec3(0,25,0), PVRTVec3(0,1,0)); m_mxLightBias = PVRTMat4(0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.0f, 0.0f, 0.0f, 0.5f, 0.0f, 0.5f, 0.5f, 0.5f, 1.0f); // --- Set up Camera projection and view float fAspect = PVRShellGet(prefWidth) / (float)PVRShellGet(prefHeight); m_mxProjection = PVRTMat4::PerspectiveFovFloatDepthRH(0.75f, fAspect, 10.0f, PVRTMat4::OGL, m_bRotated); m_mxCam = PVRTMat4::LookAtRH(PVRTVec3(0, 55, 150), PVRTVec3(0, 35, 0), PVRTVec3(0, 1, 0)); // --- Set GL states glCullFace(GL_BACK); glEnable(GL_CULL_FACE); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_GEQUAL); glClearDepthf(0.0f); glClearColor(0,0,0,1); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); return true; }
/*!**************************************************************************** @Function InitView @Return bool true if no error occured @Description Code in InitView() will be called by PVRShell upon initialization or after a change in the rendering context. Used to initialize variables that are dependant on the rendering context (e.g. textures, vertex buffers, etc.) ******************************************************************************/ bool OGLES3IntroducingPFX::InitView() { /* Initialize Print3D */ bool bRotate = PVRShellGet(prefIsRotated) && PVRShellGet(prefFullScreen); if(m_Print3D.SetTextures(0,PVRShellGet(prefWidth),PVRShellGet(prefHeight), bRotate) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, "ERROR: Cannot initialise Print3D\n"); return false; } // Sets the clear color glClearColor(0.6f, 0.8f, 1.0f, 1.0f); // Enables depth test using the z-buffer glEnable(GL_DEPTH_TEST); /* Loads the light direction from the scene. */ // We check the scene contains at least one if (m_Scene.nNumLight == 0) { PVRShellSet(prefExitMessage, "ERROR: The scene does not contain a light\n"); return false; } // Load the VBOs LoadVBOs(); /* Load the effect file */ CPVRTString error; unsigned int uiUnknownUniforms; // Parse the file m_pEffectParser = new CPVRTPFXParser; if(m_pEffectParser->ParseFromFile(c_szPfxFile, &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } // --- Load an effect from the file m_pEffect = new CPVRTPFXEffect(); // Register a custom uniform if(m_pEffect->RegisterUniformSemantic(c_sCustomSemantics, sizeof(c_sCustomSemantics) / sizeof(c_sCustomSemantics[0]), &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } /* Load the effect. We pass 'this' as an argument as we wish to receive callbacks as the PFX is loaded. This is optional and supplying NULL implies that the developer will take care of all texture loading and binding to to the Effect instead. */ if(m_pEffect->Load(*m_pEffectParser, "Effect", c_szPfxFile, this, uiUnknownUniforms, &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } /* 'Unknown uniforms' are uniform semantics that have been detected in the PFX file but are unknown to PVRTools. If you wish to utilise this semantic, register the semantic by calling RegisterUniformSemantic(). This is performed above. */ if(uiUnknownUniforms) { PVRShellOutputDebug(error.c_str()); PVRShellOutputDebug("Unknown uniform semantic count: %u\n", uiUnknownUniforms); } // Enable culling glEnable(GL_CULL_FACE); return true; }
/*!**************************************************************************** @Function InitView @Return bool true if no error occured @Description Code in InitView() will be called by PVRShell upon initialization or after a change in the rendering context. Used to initialize variables that are dependant on the rendering context (e.g. textures, vertex buffers, etc.) ******************************************************************************/ bool OGLES2MaximumIntensityBlend::InitView() { /* Check that EXT_blend_minmax is supported */ if(!CPVRTgles2Ext::IsGLExtensionSupported("GL_EXT_blend_minmax")) { PVRShellSet(prefExitMessage, "ERROR: GL_EXT_blend_minmax extension is required to run this example."); return false; } /* Initialize Print3D */ bool bRotate = PVRShellGet(prefIsRotated) && PVRShellGet(prefFullScreen); if(m_Print3D.SetTextures(0,PVRShellGet(prefWidth),PVRShellGet(prefHeight), bRotate) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, "ERROR: Cannot initialise Print3D\n"); return false; } // Sets the clear color glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glEnable(GL_CULL_FACE); glFrontFace(GL_CW); // Load the VBOs LoadVBOs(); /* Load the effect file */ CPVRTString error; unsigned int uiUnknownUniforms; // Parse the file m_pEffectParser = new CPVRTPFXParser; if(m_pEffectParser->ParseFromFile(c_szPfxFile, &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } // --- Load an effect from the file m_pEffect = new CPVRTPFXEffect(); m_pEffect->RegisterUniformSemantic(c_sCustomSemantics, sizeof(c_sCustomSemantics) / sizeof(c_sCustomSemantics[0]), &error); /* Load the effect. */ if(m_pEffect->Load(*m_pEffectParser, "Effect", c_szPfxFile, NULL, uiUnknownUniforms, &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } // --- Load the textured effect m_pEffectTextured = new CPVRTPFXEffect(); m_pEffectTextured->RegisterUniformSemantic(c_sCustomSemantics, sizeof(c_sCustomSemantics) / sizeof(c_sCustomSemantics[0]), &error); /* Load the effect. */ if(m_pEffectTextured->Load(*m_pEffectParser, "TexturedEffect", c_szPfxFile, this, uiUnknownUniforms, &error) != PVR_SUCCESS) { PVRShellSet(prefExitMessage, error.c_str()); return false; } return true; }