1
0
forked from 0ad/0ad

Moves management of GL viewports to CRenderer, letting it store the current viewport; calling code can retrieve and restore it later (instead of using deprecated glPush/PopAttrib, previously removed for GLES compatibility by 7dec618898)

This was SVN commit r14235.
This commit is contained in:
historic_bruno 2013-11-28 00:57:39 +00:00
parent 8b0f1c3f1f
commit acf1c420c1
5 changed files with 33 additions and 15 deletions

View File

@ -148,7 +148,9 @@ void CLOSTexture::InterpolateLOS()
shader->Uniform(str_delta, (float)g_Renderer.GetTimeManager().GetFrameDelta() * 4.0f, 0.0f, 0.0f, 0.0f);
glViewport(0, 0, m_TextureSize, m_TextureSize);
const SViewPort oldVp = g_Renderer.GetViewport();
const SViewPort vp = { 0, 0, m_TextureSize, m_TextureSize };
g_Renderer.SetViewport(vp);
float quadVerts[] = {
1.0f, 1.0f,
@ -173,7 +175,7 @@ void CLOSTexture::InterpolateLOS()
shader->AssertPointersBound();
glDrawArrays(GL_TRIANGLES, 0, 6);
glViewport(0, 0, g_xres, g_yres);
g_Renderer.SetViewport(oldVp);
shader->Unbind();
m_smoothShader->EndPass();

View File

@ -195,7 +195,9 @@ void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inW
shader->BindTexture(str_renderedTex, renderedTex);
glViewport(0, 0, inWidth / 2, inHeight / 2);
const SViewPort oldVp = g_Renderer.GetViewport();
const SViewPort vp = { 0, 0, inWidth / 2, inHeight / 2 };
g_Renderer.SetViewport(vp);
float quadVerts[] = {
1.0f, 1.0f,
@ -220,7 +222,7 @@ void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inW
shader->AssertPointersBound();
glDrawArrays(GL_TRIANGLES, 0, 6);
glViewport(0, 0, g_xres, g_yres);
g_Renderer.SetViewport(oldVp);
tech->EndPass();
}
@ -242,7 +244,9 @@ void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWid
shader->BindTexture(str_renderedTex, inOutTex);
shader->Uniform(str_texSize, inWidth, inHeight, 0.0f, 0.0f);
glViewport(0, 0, inWidth, inHeight);
const SViewPort oldVp = g_Renderer.GetViewport();
const SViewPort vp = { 0, 0, inWidth, inHeight };
g_Renderer.SetViewport(vp);
float quadVerts[] = {
1.0f, 1.0f,
@ -267,7 +271,7 @@ void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWid
shader->AssertPointersBound();
glDrawArrays(GL_TRIANGLES, 0, 6);
glViewport(0, 0, g_xres, g_yres);
g_Renderer.SetViewport(oldVp);
tech->EndPass();
@ -287,15 +291,15 @@ void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWid
// Our input texture to the shader is the output of the horizontal pass.
shader->BindTexture(str_renderedTex, tempTex);
shader->Uniform(str_texSize, inWidth, inHeight, 0.0f, 0.0f);
glViewport(0, 0, inWidth, inHeight);
g_Renderer.SetViewport(vp);
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, 0, quadTex);
shader->VertexPointer(2, GL_FLOAT, 0, quadVerts);
shader->AssertPointersBound();
glDrawArrays(GL_TRIANGLES, 0, 6);
glViewport(0, 0, g_xres, g_yres);
g_Renderer.SetViewport(oldVp);
tech->EndPass();
}

View File

@ -350,8 +350,7 @@ public:
glLoadMatrixf(&view._11);
#endif
const SViewPort &vp = camera.GetViewPort();
glViewport((GLint)vp.m_X,(GLint)vp.m_Y,(GLsizei)vp.m_Width,(GLsizei)vp.m_Height);
g_Renderer.SetViewport(camera.GetViewPort());
}
/**
@ -1696,9 +1695,15 @@ void CRenderer::SetSceneCamera(const CCamera& viewCamera, const CCamera& cullCam
void CRenderer::SetViewport(const SViewPort &vp)
{
m_Viewport = vp;
glViewport((GLint)vp.m_X,(GLint)vp.m_Y,(GLsizei)vp.m_Width,(GLsizei)vp.m_Height);
}
SViewPort CRenderer::GetViewport()
{
return m_Viewport;
}
void CRenderer::Submit(CPatch* patch)
{
m->terrainRenderer.Submit(patch);

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2012 Wildfire Games.
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -220,6 +220,9 @@ public:
// set the viewport
void SetViewport(const SViewPort &);
// get the last viewport
SViewPort GetViewport();
/**
* Render the given scene immediately.
* @param scene a Scene object describing what should be rendered.
@ -396,6 +399,8 @@ protected:
CShaderDefines m_SystemShaderDefines;
SViewPort m_Viewport;
/**
* m_ViewCamera: determines the eye position for rendering
*

View File

@ -1,4 +1,4 @@
/* Copyright (C) 2012 Wildfire Games.
/* Copyright (C) 2013 Wildfire Games.
* This file is part of 0 A.D.
*
* 0 A.D. is free software: you can redistribute it and/or modify
@ -479,7 +479,8 @@ void ShadowMap::BeginRender()
}
// setup viewport
glViewport(0, 0, m->EffectiveWidth, m->EffectiveHeight);
const SViewPort vp = { 0, 0, m->EffectiveWidth, m->EffectiveHeight };
g_Renderer.SetViewport(vp);
m->SavedViewCamera = g_Renderer.GetViewCamera();
@ -513,7 +514,8 @@ void ShadowMap::EndRender()
pglBindFramebufferEXT(GL_FRAMEBUFFER_EXT, m->SavedViewFBO);
}
glViewport(0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight());
const SViewPort vp = { 0, 0, g_Renderer.GetWidth(), g_Renderer.GetHeight() };
g_Renderer.SetViewport(vp);
glColorMask(1,1,1,1);
}