From 7dec6188988408a54d93f2e721a8d38dfc15bb37 Mon Sep 17 00:00:00 2001 From: historic_bruno Date: Tue, 12 Nov 2013 01:30:17 +0000 Subject: [PATCH] Some attempts to fix GLES build in smooth LOS and post proc manager. Replaces glBegin/End with glDrawArrays, GL_QUADS with GL_TRIANGLES, and replaces glPush/PopAttrib by resetting the viewport manually. Adjusts GLSL shaders for these changes. This was SVN commit r14152. --- .../data/mods/public/shaders/glsl/bloom.xml | 2 + binaries/data/mods/public/shaders/glsl/hdr.vs | 7 +- .../mods/public/shaders/glsl/los_interp.vs | 4 +- source/graphics/LOSTexture.cpp | 37 ++++-- source/renderer/PostprocManager.cpp | 114 ++++++++++++------ 5 files changed, 111 insertions(+), 53 deletions(-) diff --git a/binaries/data/mods/public/shaders/glsl/bloom.xml b/binaries/data/mods/public/shaders/glsl/bloom.xml index 2f901bb5f6..04a000f049 100644 --- a/binaries/data/mods/public/shaders/glsl/bloom.xml +++ b/binaries/data/mods/public/shaders/glsl/bloom.xml @@ -4,6 +4,8 @@ + + diff --git a/binaries/data/mods/public/shaders/glsl/hdr.vs b/binaries/data/mods/public/shaders/glsl/hdr.vs index a4acbb9885..be50844f1f 100644 --- a/binaries/data/mods/public/shaders/glsl/hdr.vs +++ b/binaries/data/mods/public/shaders/glsl/hdr.vs @@ -2,9 +2,12 @@ varying vec2 v_tex; +attribute vec3 a_vertex; +attribute vec2 a_uv0; + void main() { - gl_Position = gl_Vertex; + gl_Position = vec4(a_vertex, 1.0); - v_tex = vec2(gl_MultiTexCoord0); + v_tex = a_uv0; } diff --git a/binaries/data/mods/public/shaders/glsl/los_interp.vs b/binaries/data/mods/public/shaders/glsl/los_interp.vs index 56c3169d0f..df72569f0c 100644 --- a/binaries/data/mods/public/shaders/glsl/los_interp.vs +++ b/binaries/data/mods/public/shaders/glsl/los_interp.vs @@ -13,7 +13,7 @@ varying vec2 v_los; void main() { - gl_Position = gl_Vertex; + gl_Position = vec4(a_vertex, 1.0); - v_tex = vec2(gl_MultiTexCoord0); + v_tex = a_uv0; } diff --git a/source/graphics/LOSTexture.cpp b/source/graphics/LOSTexture.cpp index e2b8d07734..61a13e8843 100644 --- a/source/graphics/LOSTexture.cpp +++ b/source/graphics/LOSTexture.cpp @@ -148,22 +148,33 @@ void CLOSTexture::InterpolateLOS() shader->Uniform(str_delta, (float)g_Renderer.GetTimeManager().GetFrameDelta() * 4.0f, 0.0f, 0.0f, 0.0f); -#if CONFIG2_GLES -#warning TODO: fix CLOSTexture::InterpolateLOS for GLES (avoid GL_QUADS/glPushAttrib) -#else - glPushAttrib(GL_VIEWPORT_BIT); glViewport(0, 0, m_TextureSize, m_TextureSize); - glBegin(GL_QUADS); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTexCoord2f(1.0, 1.0); glVertex2f(1,1); - glTexCoord2f(0.0, 1.0); glVertex2f(-1,1); - glTexCoord2f(0.0, 0.0); glVertex2f(-1,-1); - glTexCoord2f(1.0, 0.0); glVertex2f(1,-1); - glEnd(); + float quadVerts[] = { + 1.0f, 1.0f, + -1.0f, 1.0f, + -1.0f, -1.0f, + + -1.0f, -1.0f, + 1.0f, -1.0f, + 1.0f, 1.0f + }; + float quadTex[] = { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + + 0.0f, 0.0f, + 1.0f, 0.0f, + 1.0f, 1.0f + }; + shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, 0, quadTex); + shader->VertexPointer(2, GL_FLOAT, 0, quadVerts); + shader->AssertPointersBound(); + glDrawArrays(GL_TRIANGLES, 0, 6); - glPopAttrib(); -#endif + glViewport(0, 0, g_xres, g_yres); + shader->Unbind(); m_smoothShader->EndPass(); diff --git a/source/renderer/PostprocManager.cpp b/source/renderer/PostprocManager.cpp index 5eefcb4249..c0526c1491 100644 --- a/source/renderer/PostprocManager.cpp +++ b/source/renderer/PostprocManager.cpp @@ -195,18 +195,33 @@ void CPostprocManager::ApplyBlurDownscale2x(GLuint inTex, GLuint outTex, int inW shader->BindTexture(str_renderedTex, renderedTex); - glPushAttrib(GL_VIEWPORT_BIT); glViewport(0, 0, inWidth / 2, inHeight / 2); - glBegin(GL_QUADS); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTexCoord2f(1.0, 1.0); glVertex2f(1,1); - glTexCoord2f(0.0, 1.0); glVertex2f(-1,1); - glTexCoord2f(0.0, 0.0); glVertex2f(-1,-1); - glTexCoord2f(1.0, 0.0); glVertex2f(1,-1); - glEnd(); + float quadVerts[] = { + 1.0f, 1.0f, + -1.0f, 1.0f, + -1.0f, -1.0f, + + -1.0f, -1.0f, + 1.0f, -1.0f, + 1.0f, 1.0f + }; + float quadTex[] = { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + + 0.0f, 0.0f, + 1.0f, 0.0f, + 1.0f, 1.0f + }; + 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); - glPopAttrib(); tech->EndPass(); } @@ -227,18 +242,33 @@ void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWid shader->BindTexture(str_renderedTex, inOutTex); shader->Uniform(str_texSize, inWidth, inHeight, 0.0f, 0.0f); - glPushAttrib(GL_VIEWPORT_BIT); glViewport(0, 0, inWidth, inHeight); - glBegin(GL_QUADS); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTexCoord2f(1.0, 1.0); glVertex2f(1,1); - glTexCoord2f(0.0, 1.0); glVertex2f(-1,1); - glTexCoord2f(0.0, 0.0); glVertex2f(-1,-1); - glTexCoord2f(1.0, 0.0); glVertex2f(1,-1); - glEnd(); - - glPopAttrib(); + float quadVerts[] = { + 1.0f, 1.0f, + -1.0f, 1.0f, + -1.0f, -1.0f, + + -1.0f, -1.0f, + 1.0f, -1.0f, + 1.0f, 1.0f + }; + float quadTex[] = { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + + 0.0f, 0.0f, + 1.0f, 0.0f, + 1.0f, 1.0f + }; + 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); + tech->EndPass(); // Set result texture as our render target. @@ -258,18 +288,15 @@ void CPostprocManager::ApplyBlurGauss(GLuint inOutTex, GLuint tempTex, int inWid shader->BindTexture(str_renderedTex, tempTex); shader->Uniform(str_texSize, inWidth, inHeight, 0.0f, 0.0f); - glPushAttrib(GL_VIEWPORT_BIT); glViewport(0, 0, inWidth, inHeight); - glBegin(GL_QUADS); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTexCoord2f(1.0, 1.0); glVertex2f(1,1); - glTexCoord2f(0.0, 1.0); glVertex2f(-1,1); - glTexCoord2f(0.0, 0.0); glVertex2f(-1,-1); - glTexCoord2f(1.0, 0.0); glVertex2f(1,-1); - glEnd(); - - glPopAttrib(); + 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); + tech->EndPass(); } @@ -392,13 +419,28 @@ void CPostprocManager::ApplyEffect(CShaderTechniquePtr &shaderTech1, int pass) shader->Uniform(str_saturation, g_LightEnv.m_Saturation); shader->Uniform(str_bloom, g_LightEnv.m_Bloom); - glBegin(GL_QUADS); - glColor4f(1.f, 1.f, 1.f, 1.f); - glTexCoord2f(1.0, 1.0); glVertex2f(1,1); - glTexCoord2f(0.0, 1.0); glVertex2f(-1,1); - glTexCoord2f(0.0, 0.0); glVertex2f(-1,-1); - glTexCoord2f(1.0, 0.0); glVertex2f(1,-1); - glEnd(); + float quadVerts[] = { + 1.0f, 1.0f, + -1.0f, 1.0f, + -1.0f, -1.0f, + + -1.0f, -1.0f, + 1.0f, -1.0f, + 1.0f, 1.0f + }; + float quadTex[] = { + 1.0f, 1.0f, + 0.0f, 1.0f, + 0.0f, 0.0f, + + 0.0f, 0.0f, + 1.0f, 0.0f, + 1.0f, 1.0f + }; + shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, 0, quadTex); + shader->VertexPointer(2, GL_FLOAT, 0, quadVerts); + shader->AssertPointersBound(); + glDrawArrays(GL_TRIANGLES, 0, 6); shader->Unbind();