Reduces the uniform size of an instancing transform of overlay solid shader.

This was SVN commit r27209.
This commit is contained in:
Vladislav Belov 2022-11-06 20:04:26 +00:00
parent 3978149386
commit f4c730a887
7 changed files with 15 additions and 21 deletions

View File

@ -2,7 +2,7 @@
PARAM transform[4] = { program.local[0..3] };
#if DEBUG_TEXTURED
PARAM textureTransform[4] = { program.local[4..7] };
PARAM textureTransform = program.local[4];
#endif
ATTRIB position = vertex.position;
@ -18,8 +18,8 @@ DP4 result.position.w, transform[3], position;
#if DEBUG_TEXTURED
OUTPUT v_tex = result.texcoord[0];
DP4 v_tex.x, textureTransform[0], uv;
DP4 v_tex.y, textureTransform[1], uv;
MUL v_tex.x, textureTransform.x, uv.x;
MUL v_tex.y, textureTransform.y, uv.z;
#endif
END

View File

@ -3,7 +3,7 @@
<vertex file="arb/debug_overlay.vp">
<uniform name="transform" loc="0" type="mat4"/>
<uniform name="textureTransform" loc="4" type="mat4" if="DEBUG_TEXTURED"/>
<uniform name="textureTransform" loc="4" type="vec2" if="DEBUG_TEXTURED"/>
<stream name="pos"/>
<stream name="uv0" if="DEBUG_TEXTURED"/>
</vertex>

View File

@ -1,13 +1,13 @@
!!ARBvp1.0
PARAM transform[4] = { program.local[0..3] };
PARAM instancingTransform[4] = { program.local[4..7] };
PARAM instancingTransform = program.local[4];
TEMP position;
DP4 position.x, instancingTransform[0], vertex.position;
DP4 position.y, instancingTransform[1], vertex.position;
DP4 position.z, instancingTransform[2], vertex.position;
MAD position.x, vertex.position.x, instancingTransform.w, instancingTransform.x;
MAD position.y, vertex.position.y, instancingTransform.w, instancingTransform.y;
MAD position.z, vertex.position.z, instancingTransform.w, instancingTransform.z;
MOV position.w, 1.0;
DP4 result.position.x, transform[0], position;

View File

@ -3,7 +3,7 @@
<vertex file="arb/overlay_solid.vp">
<uniform name="transform" loc="0" type="mat4"/>
<uniform name="instancingTransform" loc="4" type="mat4"/>
<uniform name="instancingTransform" loc="4" type="vec4"/>
<stream name="pos"/>
</vertex>

View File

@ -3,12 +3,12 @@
#include "common/vertex.h"
uniform mat4 transform;
uniform mat4 instancingTransform;
uniform vec4 instancingTransform;
VERTEX_INPUT_ATTRIBUTE(0, vec3, a_vertex);
void main()
{
vec4 worldPos = instancingTransform * vec4(a_vertex, 1.0);
vec4 worldPos = vec4(a_vertex * instancingTransform.w + instancingTransform.xyz, 1.0);
OUTPUT_VERTEX_POSITION(transform * worldPos);
}

View File

@ -795,15 +795,10 @@ void OverlayRenderer::RenderSphereOverlays(
deviceCommandContext->SetIndexBufferData(
m->sphereIndexes.data(), m->sphereIndexes.size() * sizeof(m->sphereIndexes[0]));
for (size_t i = 0; i < m->spheres.size(); ++i)
for (const SOverlaySphere* sphere : m->spheres)
{
SOverlaySphere* sphere = m->spheres[i];
CMatrix3D instancingTransform;
instancingTransform.SetIdentity();
instancingTransform.Scale(
sphere->m_Radius, sphere->m_Radius, sphere->m_Radius);
instancingTransform.Translate(sphere->m_Center);
const CVector4D instancingTransform{
sphere->m_Center.X, sphere->m_Center.Y, sphere->m_Center.Z, sphere->m_Radius};
deviceCommandContext->SetUniform(
shader->GetBindingSlot(str_instancingTransform),

View File

@ -363,9 +363,8 @@ void CCmpUnitRenderer::Interpolate(float frameTime, float frameOffset)
m_DebugSpheres.clear();
if (m_EnableDebugOverlays)
{
for (size_t i = 0; i < m_Units.size(); i++)
for (const SUnit& unit : m_Units)
{
SUnit& unit = m_Units[i];
if (!(unit.actor && unit.inWorld))
continue;