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