void VORApp::Display() { #ifdef TEST _cpuTimer->Start(); _gpuTimer->Start(); #endif _mirrorTransforms[0] *= IGLUMatrix4x4::Rotate(10,vec3(0,1,0)); // Start timing this frame draw _frameRate->StartFrame(); // Clear the screen glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT ); size_t frustumSize = 0; size_t size = VirtualFrustumsCulling(frustumSize); #ifdef TEST _cpuTimer->Tick(); _gpuTimer->Tick(); printf("VirtualFrustums Culling gpu: %lf cpu: %lf \n", _gpuTimer->Tick(), _cpuTimer->Tick()); #endif //size_t size = CPUVirtualFrustumsCulling(frustumSize); //draw stencil { _mirrorStencilFBO->Bind(); _mirrorStencilFBO->Clear(); _shaders[3]->Enable(); _shaders[3]["project"] = _camera->GetProjectionMatrix(); _shaders[3]["model"] = _mirrorTransforms[0]; _shaders[3]["view"] = _camera->GetViewMatrix(); _mirrorObjs[0]->GetVertexArray()->Bind(); _mirrorElementBuffer->Bind(); //_mirrorObjs[0]->GetVertexArray()->GetElementArray()->Bind(); glDrawElements(GL_TRIANGLES,frustumSize*3,GL_UNSIGNED_INT,0); //_mirrorObjs[0]->GetVertexArray()->GetElementArray()->Unbind(); _mirrorElementBuffer->Unbind(); _mirrorObjs[0]->GetVertexArray()->Unbind(); _shaders[3]->Disable(); _mirrorStencilFBO->Unbind(); /* IGLUDraw::Fullscreen( _mirrorStencilFBO[IGLU_COLOR0], 0 ); return; */ } _mirrorFBO->Bind(); _mirrorFBO->Clear(); glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); for(int i=0; i<_objReaders.size(); i++) { _shaders[2]->Enable(); _shaders[2]["project"] = _camera->GetProjectionMatrix(); _shaders[2]["view"] = _camera->GetViewMatrix(); _shaders[2]["model"] = _objTransforms[i]; _shaders[2]["mirrorModel"] = _mirrorTransforms[0]; _shaders[2]["InstanceData"] = _instanceDataTex; _shaders[2]["lightIntensity" ] = float(1); _shaders[2]["matlInfoTex"] = IGLUOBJMaterialReader::s_matlCoefBuf; _shaders[2]["matlTextures"] = IGLUOBJMaterialReader::s_matlTexArray; _shaders[2]["lightColor"] = vec3(1.0); _shaders[2]["resX"] = _camera->GetResX(); _shaders[2]["resY"] = _camera->GetResY(); _shaders[2]["stencilTexture"] = _mirrorStencilFBO[0]; IGLUVertexArray::Ptr vao = _objReaders[i]->GetVertexArray(); vao->Bind(); vao->GetElementArray()->Bind(); _indirectDrawBuffer->Bind(); glMultiDrawElementsIndirect( GL_TRIANGLES, GL_UNSIGNED_INT, NULL, size, 0); _indirectDrawBuffer->Unbind(); vao->GetElementArray()->Unbind(); vao->Unbind(); _shaders[2]->Disable(); } _mirrorFBO->Unbind(); /* IGLUDraw::Fullscreen( _mirrorFBO[IGLU_COLOR0], 0 ); return;*/ _mirrorTexShader->Enable(); _mirrorTexShader["project"] = _camera->GetProjectionMatrix(); _mirrorTexShader["modelview"] = _camera->GetViewMatrix() *_mirrorTransforms[0]; _mirrorTexShader["mtexture"] = _mirrorFBO[0]; _mirrorObjs[0]->GetVertexArray()->Bind(); _mirrorElementBuffer->Bind(); glDrawElements(GL_TRIANGLES,frustumSize*3,GL_UNSIGNED_INT,0); _mirrorElementBuffer->Unbind(); _mirrorObjs[0]->GetVertexArray()->Unbind(); _mirrorTexShader->Disable(); for(int i=0; i<_objReaders.size(); i++) { _objShader->Enable(); _objShader["project"] = _camera->GetProjectionMatrix(); _objShader["model"] = _objTransforms[i]; _objShader["view"] = _camera->GetViewMatrix(); _objShader["lightIntensity" ] = float(1); _objShader["matlInfoTex"] = IGLUOBJMaterialReader::s_matlCoefBuf; _objShader["matlTextures"] = IGLUOBJMaterialReader::s_matlTexArray; _objShader["lightColor"] = _lightColor; _objReaders[i]->GetVertexArray()->Bind(); _objReaders[i]->GetVertexArray()->GetElementArray()->Bind(); glDrawElements(GL_TRIANGLES,_objReaders[i]->GetTriangleCount()*3,GL_UNSIGNED_INT,0); _objReaders[i]->GetVertexArray()->GetElementArray()->Unbind(); _objReaders[i]->GetVertexArray()->Unbind(); _objShader->Disable(); } // Draw the framerate on the screen char buf[32]; sprintf( buf, "%.1f fps", _frameRate->EndFrame() ); IGLUDraw::DrawText( IGLU_FONT_VARIABLE, 0, 0, buf ); }