void Renderer::RenderEyeView(Scene* scene, std::vector<SceneObject*> scene_objects, OESShader* oesShader, const Matrix4f &eyeViewMatrix, const Matrix4f &eyeProjectionMatrix, const Matrix4f &eyeViewProjection, const int eye) { // there is no need to flat and sort every frame. // however let's keep it as is and assume we are not changed // This is not right way to do data conversion. However since GVRF doesn't support // bone/weight/joint and other assimp data, we will put general model conversion // on hold and do this kind of conversion fist std::vector<RenderData*> render_data_vector; // do occlusion culling, if enabled OcclusionCull(scene, scene_objects); // do frustum culling, if enabled FrustumCull(scene, eyeViewMatrix.GetTranslation(), scene_objects, render_data_vector, eyeViewProjection, oesShader); // do sorting based on render order if (!scene->GetFrustumCulling()) { std::sort(render_data_vector.begin(), render_data_vector.end(), compareRenderData); } else { std::sort(render_data_vector.begin(), render_data_vector.end(), compareRenderDataWithFrustumCulling); } glEnable (GL_DEPTH_TEST); glDepthFunc (GL_LEQUAL); glEnable (GL_CULL_FACE); glFrontFace (GL_CCW); glCullFace (GL_BACK); glEnable (GL_BLEND); glBlendEquation (GL_FUNC_ADD); glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); glDisable (GL_POLYGON_OFFSET_FILL); // TODO background color as parameter glClearColor(0.0f, 0.0f, 0.0f, 1.0f); glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); for (auto it = render_data_vector.begin(); it != render_data_vector.end(); ++it) { RenderRenderData(*it, eyeViewMatrix, eyeProjectionMatrix, oesShader, eye); } }
void RenderInputScene::Draw(GraphicsState & glstate, const std::vector <Drawable*> & drawlist, bool preculled) { for (std::vector <Drawable*>::const_iterator ptr = drawlist.begin(); ptr != drawlist.end(); ++ptr) { const Drawable & d = **ptr; if (preculled || !FrustumCull(d)) { SetFlags(d, glstate); SetTextures(d, glstate); SetTransform(d, glstate); if (d.GetDrawList()) { glCallList(d.GetDrawList()); } else if (d.GetVertArray()) { DrawVertexArray(*d.GetVertArray(), d.GetLineSize()); } } } }