1
1
forked from 0ad/0ad

Removes remaining fixed program used in shader pipelines and adds check on FFP create.

Commented By: Stan
Differential Revision: https://code.wildfiregames.com/D3048
This was SVN commit r24121.
This commit is contained in:
Vladislav Belov 2020-11-03 18:59:27 +00:00
parent 8e547cdce5
commit 6e3db3d84c
8 changed files with 80 additions and 4 deletions

View File

@ -0,0 +1,6 @@
!!ARBfp1.0
TEMP color;
MOV color, 0.0;
MOV color.a, 1.0;
MOV result.color, color;
END

View File

@ -0,0 +1,12 @@
!!ARBvp1.0
ATTRIB position = vertex.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;
END

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<program type="arb">
<vertex file="arb/dummy.vp">
<stream name="pos"/>
<uniform name="transform" loc="0" type="mat4"/>
</vertex>
<fragment file="arb/dummy.fp"/>
</program>

View File

@ -0,0 +1,6 @@
#version 110
void main()
{
gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);
}

View File

@ -0,0 +1,10 @@
#version 110
attribute vec3 a_vertex;
uniform mat4 transform;
void main()
{
gl_Position = transform * vec4(a_vertex, 1.0);
}

View File

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<program type="glsl">
<vertex file="glsl/dummy.vs">
<stream name="pos"/>
<attrib name="a_vertex" semantics="gl_Vertex"/>
</vertex>
<fragment file="glsl/dummy.fs"/>
</program>

View File

@ -1135,6 +1135,7 @@ public:
/*static*/ CShaderProgram* CShaderProgram::ConstructFFP(const std::string& id, const CShaderDefines& defines)
{
LOGWARNING("CShaderProgram::ConstructFFP: '%s': fixed pipeline is going to be removed soon, don't use its programs", id.c_str());
if (id == "dummy")
return new CShaderProgramFFP_Dummy();
if (id == "overlayline")

View File

@ -59,6 +59,25 @@ extern GameLoopState* g_AtlasGameLoop;
///////////////////////////////////////////////////////////////////////////////////////////////
// TerrainRenderer implementation
namespace
{
CShaderProgramPtr GetDummyShader()
{
const char* shaderName;
if (g_RenderingOptions.GetRenderPath() == RenderPath::SHADER)
{
if (g_RenderingOptions.GetPreferGLSL())
shaderName = "glsl/dummy";
else
shaderName = "arb/dummy";
}
else
shaderName = "fixed:dummy";
return g_Renderer.GetShaderManager().LoadProgram(shaderName, CShaderDefines());
}
} // anonymous namespace
/**
* TerrainRenderer keeps track of which phase it is in, to detect
@ -185,7 +204,7 @@ void TerrainRenderer::RenderTerrainFixed(int cullGroup)
if (visiblePatches.empty() && visibleDecals.empty())
return;
CShaderProgramPtr dummyShader = g_Renderer.GetShaderManager().LoadProgram("fixed:dummy", CShaderDefines());
CShaderProgramPtr dummyShader = GetDummyShader();
dummyShader->Bind();
// render the solid black sides of the map first
@ -403,7 +422,7 @@ void TerrainRenderer::RenderTerrainOverlayTexture(int cullGroup, CMatrix3D& text
glLoadMatrixf(&textureMatrix._11);
glMatrixMode(GL_MODELVIEW);
CShaderProgramPtr dummyShader = g_Renderer.GetShaderManager().LoadProgram("fixed:dummy", CShaderDefines());
CShaderProgramPtr dummyShader = GetDummyShader();
dummyShader->Bind();
CPatchRData::RenderStreams(visiblePatches, dummyShader, STREAM_POS|STREAM_POSTOUV0);
dummyShader->Unbind();
@ -540,7 +559,7 @@ void TerrainRenderer::RenderPatches(int cullGroup)
#if CONFIG2_GLES
#warning TODO: implement TerrainRenderer::RenderPatches for GLES
#else
CShaderProgramPtr dummyShader = g_Renderer.GetShaderManager().LoadProgram("fixed:dummy", CShaderDefines());
CShaderProgramPtr dummyShader = GetDummyShader();
dummyShader->Bind();
glEnableClientState(GL_VERTEX_ARRAY);
@ -903,7 +922,7 @@ void TerrainRenderer::RenderSimpleWater(int cullGroup)
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB_ARB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB_ARB, GL_SRC_ALPHA);
CShaderProgramPtr dummyShader = g_Renderer.GetShaderManager().LoadProgram("fixed:dummy", CShaderDefines());
CShaderProgramPtr dummyShader = GetDummyShader();
dummyShader->Bind();
glEnableClientState(GL_VERTEX_ARRAY);