コード例 #1
0
ファイル: renderer.cpp プロジェクト: proverbface/Meganekko
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);
    }

}
コード例 #2
0
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());
			}
		}
	}
}