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();