1
0
forked from 0ad/0ad

Removes deprecated gl_*Matrix builtins from GLSL shaders.

Tested By: Freagarach, Stan
Differential Revision: https://code.wildfiregames.com/D3635
This was SVN commit r25018.
This commit is contained in:
Vladislav Belov 2021-03-05 22:32:32 +00:00
parent 373b8b6ff1
commit 76af18b23a
9 changed files with 39 additions and 20 deletions

View File

@ -3,10 +3,12 @@
ATTRIB position = vertex.position;
ATTRIB uv = vertex.texcoord[0];
DP4 result.position.x, state.matrix.mvp.row[0], position;
DP4 result.position.y, state.matrix.mvp.row[1], position;
DP4 result.position.z, state.matrix.mvp.row[2], position;
DP4 result.position.w, state.matrix.mvp.row[3], position;
PARAM transform[4] = { program.local[0..3] };
DP4 result.position.x, transform[0], position;
DP4 result.position.y, transform[1], position;
DP4 result.position.z, transform[2], position;
DP4 result.position.w, transform[3], position;
MOV result.texcoord, uv;

View File

@ -4,6 +4,7 @@
<vertex file="arb/foreground_overlay.vp">
<stream name="pos"/>
<stream name="uv0"/>
<uniform name="transform" loc="0" type="mat4"/>
</vertex>
<fragment file="arb/foreground_overlay.fp">

View File

@ -1,13 +1,15 @@
!!ARBvp1.0
PARAM transform[4] = { program.local[0..3] };
#if !IGNORE_LOS
PARAM losTransform = program.local[0];
PARAM losTransform = program.local[4];
#endif
ATTRIB position = vertex.position;
DP4 result.position.x, state.matrix.mvp.row[0], position;
DP4 result.position.y, state.matrix.mvp.row[1], position;
DP4 result.position.z, state.matrix.mvp.row[2], position;
DP4 result.position.w, state.matrix.mvp.row[3], position;
DP4 result.position.x, transform[0], position;
DP4 result.position.y, transform[1], position;
DP4 result.position.z, transform[2], position;
DP4 result.position.w, transform[3], position;
MOV result.texcoord[0], vertex.texcoord[0];
#if !IGNORE_LOS

View File

@ -11,7 +11,8 @@
<stream name="pos"/>
<stream name="uv0"/>
<stream name="color" if="!USE_OBJECTCOLOR"/>
<uniform name="losTransform" loc="0" type="vec2" if="!IGNORE_LOS"/>
<uniform name="transform" loc="0" type="mat4"/>
<uniform name="losTransform" loc="4" type="vec2" if="!IGNORE_LOS"/>
</vertex>
<fragment file="arb/overlayline.fp">

View File

@ -6,5 +6,5 @@ varying vec2 v_tex;
void main()
{
gl_FragColor = texture2D(baseTex, v_tex) * colorMul;
gl_FragColor = texture2D(baseTex, v_tex) * colorMul;
}

View File

@ -1,11 +1,14 @@
#version 110
uniform mat4 transform;
varying vec2 v_tex;
attribute vec3 a_vertex;
attribute vec2 a_uv0;
void main()
{
gl_Position = gl_ModelViewProjectionMatrix * vec4(a_vertex, 1.0);
v_tex = a_uv0;
gl_Position = transform * vec4(a_vertex, 1.0);
v_tex = a_uv0;
}

View File

@ -3,9 +3,9 @@
<vertex file="glsl/foreground_overlay.vs">
<stream name="pos"/>
<stream name="uv0"/>
<stream name="uv0"/>
<attrib name="a_vertex" semantics="gl_Vertex"/>
<attrib name="a_uv0" semantics="gl_MultiTexCoord0"/>
<attrib name="a_uv0" semantics="gl_MultiTexCoord0"/>
</vertex>
<fragment file="glsl/foreground_overlay.fs"/>

View File

@ -2,6 +2,8 @@
#include "common/los_vertex.h"
uniform mat4 transform;
attribute vec3 a_vertex;
attribute vec2 a_uv0;
@ -19,5 +21,5 @@ void main()
#if !USE_OBJECTCOLOR
v_color = a_color;
#endif
gl_Position = gl_ModelViewProjectionMatrix * vec4(a_vertex, 1.0);
gl_Position = transform * vec4(a_vertex, 1.0);
}

View File

@ -19,6 +19,7 @@
#include "OverlayRenderer.h"
#include "graphics/Camera.h"
#include "graphics/LOSTexture.h"
#include "graphics/Overlay.h"
#include "graphics/Terrain.h"
@ -455,6 +456,8 @@ void OverlayRenderer::RenderTexturedOverlayLines()
shaderTexLineNormal->BindTexture(str_losTex, los.GetTexture());
shaderTexLineNormal->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f);
shaderTexLineNormal->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection());
// batch render only the non-always-visible overlay lines using the normal shader
RenderTexturedOverlayLines(shaderTexLineNormal, false);
@ -470,6 +473,8 @@ void OverlayRenderer::RenderTexturedOverlayLines()
shaderTexLineAlwaysVisible->BindTexture(str_losTex, los.GetTexture());
shaderTexLineAlwaysVisible->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f);
shaderTexLineAlwaysVisible->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection());
// batch render only the always-visible overlay lines using the LoS-ignored shader
RenderTexturedOverlayLines(shaderTexLineAlwaysVisible, true);
@ -541,6 +546,8 @@ void OverlayRenderer::RenderQuadOverlays()
shader->BindTexture(str_losTex, los.GetTexture());
shader->Uniform(str_losTransform, los.GetTextureMatrix()[0], los.GetTextureMatrix()[12], 0.f, 0.f);
shader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection());
// Base offsets (in bytes) of the two backing stores relative to their owner VBO
u8* indexBase = m->quadIndices.Bind();
u8* vertexBase = m->quadVertices.Bind();
@ -626,6 +633,8 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
tech->BeginPass();
CShaderProgramPtr shader = tech->GetShader();
shader->Uniform(str_transform, g_Renderer.GetViewCamera().GetViewProjection());
float uvs[8] = { 0,1, 1,1, 1,0, 0,0 };
shader->TexCoordPointer(GL_TEXTURE0, 2, GL_FLOAT, sizeof(float)*2, &uvs[0]);
@ -633,11 +642,10 @@ void OverlayRenderer::RenderForegroundOverlays(const CCamera& viewCamera)
for (size_t i = 0; i < m->sprites.size(); ++i)
{
SOverlaySprite* sprite = m->sprites[i];
if (!i || sprite->m_Texture != m->sprites[i - 1]->m_Texture)
shader->BindTexture(str_baseTex, sprite->m_Texture);
shader->BindTexture(str_baseTex, sprite->m_Texture);
if (shader)
shader->Uniform(str_colorMul, sprite->m_Color);
shader->Uniform(str_colorMul, sprite->m_Color);
CVector3D pos[4] = {
sprite->m_Position + right*sprite->m_X0 + up*sprite->m_Y0,