Reduces uniforms sizes for the minimap shader.
This was SVN commit r27147.
This commit is contained in:
parent
1cd1715088
commit
344ec2c166
@ -1,31 +1,28 @@
|
||||
!!ARBvp1.0
|
||||
|
||||
PARAM transform[4] = { program.local[0..3] };
|
||||
PARAM textureTransform[4] = { program.local[4..7] };
|
||||
PARAM transform = program.local[0];
|
||||
PARAM translation = program.local[1];
|
||||
PARAM textureTransform = program.local[2];
|
||||
OUTPUT v_tex = result.texcoord[0];
|
||||
|
||||
TEMP position;
|
||||
MOV position, vertex.position;
|
||||
#if MINIMAP_POINT
|
||||
MOV position.z, 0.0;
|
||||
#endif
|
||||
MUL position, transform, vertex.position.xyxy;
|
||||
ADD position.x, position.x, position.y;
|
||||
ADD position.y, position.z, position.w;
|
||||
ADD position, position, translation.xyxy;
|
||||
MOV position.z, 0.0;
|
||||
MOV position.w, 1.0;
|
||||
|
||||
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.position, position;
|
||||
|
||||
#if MINIMAP_BASE || MINIMAP_LOS
|
||||
TEMP tex;
|
||||
MOV tex, vertex.texcoord;
|
||||
#endif
|
||||
|
||||
#if MINIMAP_BASE || MINIMAP_LOS
|
||||
DP4 v_tex.x, textureTransform[0], tex;
|
||||
DP4 v_tex.y, textureTransform[1], tex;
|
||||
DP4 v_tex.z, textureTransform[2], tex;
|
||||
DP4 v_tex.w, textureTransform[3], tex;
|
||||
MUL tex, textureTransform, vertex.texcoord.xyxy;
|
||||
ADD tex.x, tex.x, tex.y;
|
||||
ADD tex.y, tex.z, tex.w;
|
||||
ADD tex, tex, translation.zwzw;
|
||||
MOV tex.z, 0.0;
|
||||
MOV tex.w, 1.0;
|
||||
MOV v_tex, tex;
|
||||
#endif
|
||||
|
||||
#if MINIMAP_POINT
|
||||
|
@ -5,8 +5,9 @@
|
||||
<stream name="pos"/>
|
||||
<stream name="uv0" if="MINIMAP_BASE || MINIMAP_LOS"/>
|
||||
<stream name="color" if="MINIMAP_POINT"/>
|
||||
<uniform name="transform" loc="0" type="mat4"/>
|
||||
<uniform name="textureTransform" loc="4" type="mat4"/>
|
||||
<uniform name="transform" loc="0" type="vec4"/>
|
||||
<uniform name="translation" loc="1" type="vec4"/>
|
||||
<uniform name="textureTransform" loc="2" type="vec4"/>
|
||||
</vertex>
|
||||
|
||||
<fragment file="arb/minimap.fp">
|
||||
|
@ -1,18 +1,19 @@
|
||||
#version 110
|
||||
|
||||
uniform mat4 transform;
|
||||
uniform mat4 textureTransform;
|
||||
uniform vec4 transform;
|
||||
uniform vec4 translation;
|
||||
uniform vec4 textureTransform;
|
||||
#if MINIMAP_POINT && USE_GPU_INSTANCING
|
||||
uniform float width;
|
||||
#endif
|
||||
|
||||
attribute vec2 a_vertex;
|
||||
|
||||
#if MINIMAP_BASE || MINIMAP_LOS
|
||||
attribute vec3 a_vertex;
|
||||
attribute vec2 a_uv0;
|
||||
#endif
|
||||
|
||||
#if MINIMAP_POINT
|
||||
attribute vec2 a_vertex;
|
||||
attribute vec3 a_color;
|
||||
#if USE_GPU_INSTANCING
|
||||
attribute vec2 a_uv1;
|
||||
@ -30,16 +31,18 @@ varying vec3 color;
|
||||
void main()
|
||||
{
|
||||
#if MINIMAP_BASE || MINIMAP_LOS
|
||||
gl_Position = transform * vec4(a_vertex, 1.0);
|
||||
v_tex = (textureTransform * vec4(a_uv0, 0.0, 1.0)).xy;
|
||||
vec2 position = a_vertex;
|
||||
v_tex = mat2(textureTransform.xy, textureTransform.zw) * a_uv0 + translation.zw;
|
||||
#endif
|
||||
|
||||
#if MINIMAP_POINT
|
||||
#if USE_GPU_INSTANCING
|
||||
gl_Position = transform * vec4(a_vertex * width + a_uv1, 0.0, 1.0);
|
||||
vec2 position = a_vertex * width + a_uv1;
|
||||
#else
|
||||
gl_Position = transform * vec4(a_vertex, 0.0, 1.0);
|
||||
vec2 position = a_vertex;
|
||||
#endif
|
||||
color = a_color;
|
||||
#endif // MINIMAP_POINT
|
||||
|
||||
gl_Position = vec4(mat2(transform.xy, transform.zw) * position + translation.xy, 0.0, 1.0);
|
||||
}
|
||||
|
@ -95,18 +95,18 @@ void DrawTexture(
|
||||
};
|
||||
const float quadVertices[] =
|
||||
{
|
||||
-1.0f, -1.0f, 0.0f,
|
||||
1.0f, -1.0f, 0.0f,
|
||||
1.0f, 1.0f, 0.0f,
|
||||
-1.0f, -1.0f,
|
||||
1.0f, -1.0f,
|
||||
1.0f, 1.0f,
|
||||
|
||||
1.0f, 1.0f, 0.0f,
|
||||
-1.0f, 1.0f, 0.0f,
|
||||
-1.0f, -1.0f, 0.0f
|
||||
1.0f, 1.0f,
|
||||
-1.0f, 1.0f,
|
||||
-1.0f, -1.0f,
|
||||
};
|
||||
|
||||
deviceCommandContext->SetVertexAttributeFormat(
|
||||
Renderer::Backend::VertexAttributeStream::POSITION,
|
||||
Renderer::Backend::Format::R32G32B32_SFLOAT, 0, sizeof(float) * 3,
|
||||
Renderer::Backend::Format::R32G32_SFLOAT, 0, sizeof(float) * 2,
|
||||
Renderer::Backend::VertexAttributeRate::PER_VERTEX, 0);
|
||||
deviceCommandContext->SetVertexAttributeFormat(
|
||||
Renderer::Backend::VertexAttributeStream::UV0,
|
||||
@ -486,10 +486,16 @@ void CMiniMapTexture::RenderFinalTexture(
|
||||
CMatrix3D terrainTransform;
|
||||
terrainTransform.SetIdentity();
|
||||
terrainTransform.Scale(texCoordMax, texCoordMax, 1.0f);
|
||||
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_transform), baseTransform.AsFloatArray());
|
||||
shader->GetBindingSlot(str_transform),
|
||||
baseTransform._11, baseTransform._21, baseTransform._12, baseTransform._22);
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_textureTransform), terrainTransform.AsFloatArray());
|
||||
shader->GetBindingSlot(str_textureTransform),
|
||||
terrainTransform._11, terrainTransform._21, terrainTransform._12, terrainTransform._22);
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_translation),
|
||||
baseTransform._14, baseTransform._24, terrainTransform._14, terrainTransform._24);
|
||||
|
||||
if (m_TerrainTexture)
|
||||
DrawTexture(deviceCommandContext);
|
||||
@ -513,10 +519,15 @@ void CMiniMapTexture::RenderFinalTexture(
|
||||
deviceCommandContext->SetTexture(
|
||||
shader->GetBindingSlot(str_baseTex), territoryTexture.GetTexture());
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_transform), baseTransform.AsFloatArray());
|
||||
shader->GetBindingSlot(str_transform),
|
||||
baseTransform._11, baseTransform._21, baseTransform._12, baseTransform._22);
|
||||
const CMatrix3D& territoryTransform = territoryTexture.GetMinimapTextureMatrix();
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_textureTransform),
|
||||
territoryTexture.GetMinimapTextureMatrix().AsFloatArray());
|
||||
territoryTransform._11, territoryTransform._21, territoryTransform._12, territoryTransform._22);
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_translation),
|
||||
baseTransform._14, baseTransform._24, territoryTransform._14, territoryTransform._24);
|
||||
|
||||
DrawTexture(deviceCommandContext);
|
||||
deviceCommandContext->EndPass();
|
||||
@ -530,10 +541,15 @@ void CMiniMapTexture::RenderFinalTexture(
|
||||
deviceCommandContext->SetTexture(
|
||||
shader->GetBindingSlot(str_baseTex), losTexture.GetTexture());
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_transform), baseTransform.AsFloatArray());
|
||||
shader->GetBindingSlot(str_transform),
|
||||
baseTransform._11, baseTransform._21, baseTransform._12, baseTransform._22);
|
||||
const CMatrix3D& losTransform = losTexture.GetMinimapTextureMatrix();
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_textureTransform),
|
||||
losTexture.GetMinimapTextureMatrix().AsFloatArray());
|
||||
losTransform._11, losTransform._21, losTransform._12, losTransform._22);
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_translation),
|
||||
baseTransform._14, baseTransform._24, losTransform._14, losTransform._24);
|
||||
|
||||
DrawTexture(deviceCommandContext);
|
||||
|
||||
@ -723,8 +739,6 @@ void CMiniMapTexture::RenderFinalTexture(
|
||||
tech->GetGraphicsPipelineStateDesc());
|
||||
deviceCommandContext->BeginPass();
|
||||
shader = tech->GetShader();
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_transform), baseTransform.AsFloatArray());
|
||||
|
||||
CMatrix3D unitMatrix;
|
||||
unitMatrix.SetIdentity();
|
||||
@ -734,7 +748,11 @@ void CMiniMapTexture::RenderFinalTexture(
|
||||
// Offset the coordinates to [-1, 1].
|
||||
unitMatrix.Translate(CVector3D(-1.0f, -1.0f, 0.0f));
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_transform), unitMatrix.AsFloatArray());
|
||||
shader->GetBindingSlot(str_transform),
|
||||
unitMatrix._11, unitMatrix._21, unitMatrix._12, unitMatrix._22);
|
||||
deviceCommandContext->SetUniform(
|
||||
shader->GetBindingSlot(str_translation),
|
||||
unitMatrix._14, unitMatrix._24, 0.0f, 0.0f);
|
||||
|
||||
Renderer::Backend::IDeviceCommandContext::Rect scissorRect;
|
||||
scissorRect.x = scissorRect.y = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user