mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-06-16 05:13:58 -07:00
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.
This commit is contained in:
parent
f1613a3c90
commit
7dec618898
5 changed files with 111 additions and 53 deletions
|
|
@ -4,6 +4,8 @@
|
|||
<vertex file="glsl/hdr.vs">
|
||||
<stream name="pos"/>
|
||||
<stream name="uv0"/>
|
||||
<attrib name="a_vertex" semantics="gl_Vertex"/>
|
||||
<attrib name="a_uv0" semantics="gl_MultiTexCoord0"/>
|
||||
</vertex>
|
||||
|
||||
<fragment file="glsl/bloom.fs"/>
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue