Changes posmtx vertex attribute to integer.
This makes it so we don't need to do some dumb casting from float to integer in our shaders. Only tested in OpenGL, needs to be tested in D3D.
This commit is contained in:
parent
99338daa8f
commit
2d8cfb89d7
|
@ -102,7 +102,7 @@ void SHADER::SetProgramBindings()
|
||||||
// Need to set some attribute locations
|
// Need to set some attribute locations
|
||||||
glBindAttribLocation(glprogid, SHADER_POSITION_ATTRIB, "rawpos");
|
glBindAttribLocation(glprogid, SHADER_POSITION_ATTRIB, "rawpos");
|
||||||
|
|
||||||
glBindAttribLocation(glprogid, SHADER_POSMTX_ATTRIB, "fposmtx");
|
glBindAttribLocation(glprogid, SHADER_POSMTX_ATTRIB, "posmtx");
|
||||||
|
|
||||||
glBindAttribLocation(glprogid, SHADER_COLOR0_ATTRIB, "color0");
|
glBindAttribLocation(glprogid, SHADER_COLOR0_ATTRIB, "color0");
|
||||||
glBindAttribLocation(glprogid, SHADER_COLOR1_ATTRIB, "color1");
|
glBindAttribLocation(glprogid, SHADER_COLOR1_ATTRIB, "color1");
|
||||||
|
|
|
@ -753,7 +753,7 @@ void VertexLoader::CompileVertexTranslator()
|
||||||
vtx_decl.posmtx.enable = true;
|
vtx_decl.posmtx.enable = true;
|
||||||
vtx_decl.posmtx.offset = nat_offset;
|
vtx_decl.posmtx.offset = nat_offset;
|
||||||
vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE;
|
vtx_decl.posmtx.type = VAR_UNSIGNED_BYTE;
|
||||||
vtx_decl.posmtx.integer = false;
|
vtx_decl.posmtx.integer = true;
|
||||||
nat_offset += 4;
|
nat_offset += 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -109,7 +109,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
||||||
{
|
{
|
||||||
out.Write("in float4 rawpos; // ATTR%d,\n", SHADER_POSITION_ATTRIB);
|
out.Write("in float4 rawpos; // ATTR%d,\n", SHADER_POSITION_ATTRIB);
|
||||||
if (components & VB_HAS_POSMTXIDX)
|
if (components & VB_HAS_POSMTXIDX)
|
||||||
out.Write("in float fposmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB);
|
out.Write("in int posmtx; // ATTR%d,\n", SHADER_POSMTX_ATTRIB);
|
||||||
if (components & VB_HAS_NRM0)
|
if (components & VB_HAS_NRM0)
|
||||||
out.Write("in float3 rawnorm0; // ATTR%d,\n", SHADER_NORM0_ATTRIB);
|
out.Write("in float3 rawnorm0; // ATTR%d,\n", SHADER_NORM0_ATTRIB);
|
||||||
if (components & VB_HAS_NRM1)
|
if (components & VB_HAS_NRM1)
|
||||||
|
@ -168,7 +168,7 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
||||||
out.Write(" float%d tex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i);
|
out.Write(" float%d tex%d : TEXCOORD%d,\n", hastexmtx ? 3 : 2, i, i);
|
||||||
}
|
}
|
||||||
if (components & VB_HAS_POSMTXIDX)
|
if (components & VB_HAS_POSMTXIDX)
|
||||||
out.Write(" float fposmtx : BLENDINDICES,\n");
|
out.Write(" int posmtx : BLENDINDICES,\n");
|
||||||
out.Write(" float4 rawpos : POSITION) {\n");
|
out.Write(" float4 rawpos : POSITION) {\n");
|
||||||
}
|
}
|
||||||
out.Write("VS_OUTPUT o;\n");
|
out.Write("VS_OUTPUT o;\n");
|
||||||
|
@ -176,8 +176,6 @@ static inline void GenerateVertexShader(T& out, u32 components, API_TYPE api_typ
|
||||||
// transforms
|
// transforms
|
||||||
if (components & VB_HAS_POSMTXIDX)
|
if (components & VB_HAS_POSMTXIDX)
|
||||||
{
|
{
|
||||||
out.Write("int posmtx = int(fposmtx * 255.0);\n"); // TODO: Ugly, should use an integer instead
|
|
||||||
|
|
||||||
if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) )
|
if (is_writing_shadercode && (DriverDetails::HasBug(DriverDetails::BUG_NODYNUBOACCESS) && !DriverDetails::HasBug(DriverDetails::BUG_ANNIHILATEDUBOS)) )
|
||||||
{
|
{
|
||||||
// This'll cause issues, but it can't be helped
|
// This'll cause issues, but it can't be helped
|
||||||
|
|
Loading…
Reference in New Issue