Fix #2676 by moving rsm matrix to be assigned lastly
This commit is contained in:
parent
decaac85d9
commit
3e938a79be
@ -109,49 +109,6 @@ void renderShadow(unsigned cascade)
|
|||||||
} // for i
|
} // for i
|
||||||
} // renderShadow
|
} // renderShadow
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
template<typename T, typename...uniforms>
|
|
||||||
void draw_rsm(const T *Shader, const GLMesh *mesh, uniforms... Args)
|
|
||||||
{
|
|
||||||
irr_driver->increaseObjectCount();
|
|
||||||
Shader->setUniforms(Args...);
|
|
||||||
glDrawElementsBaseVertex(mesh->PrimitiveType,
|
|
||||||
(int)mesh->IndexCount,
|
|
||||||
mesh->IndexType,
|
|
||||||
(GLvoid *)mesh->vaoOffset,
|
|
||||||
(int)mesh->vaoBaseVertex);
|
|
||||||
|
|
||||||
} // draw_rsm
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
template<int...List>
|
|
||||||
struct rsm_custom_unroll_args;
|
|
||||||
|
|
||||||
template<>
|
|
||||||
struct rsm_custom_unroll_args<>
|
|
||||||
{
|
|
||||||
template<typename T, typename ...TupleTypes, typename ...Args>
|
|
||||||
static void exec(const core::matrix4 &rsm_matrix,
|
|
||||||
const STK::Tuple<TupleTypes...> &t, Args... args)
|
|
||||||
{
|
|
||||||
draw_rsm<T>(T::getInstance(), STK::tuple_get<0>(t), rsm_matrix, args...);
|
|
||||||
}
|
|
||||||
}; // rsm_custom_unroll_args
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
template<int N, int...List>
|
|
||||||
struct rsm_custom_unroll_args<N, List...>
|
|
||||||
{
|
|
||||||
template<typename T, typename ...TupleTypes, typename ...Args>
|
|
||||||
static void exec(const core::matrix4 &rsm_matrix,
|
|
||||||
const STK::Tuple<TupleTypes...> &t, Args... args)
|
|
||||||
{
|
|
||||||
rsm_custom_unroll_args<List...>::template
|
|
||||||
exec<T>(rsm_matrix, t, STK::tuple_get<N>(t), args...);
|
|
||||||
}
|
|
||||||
}; // rsm_custom_unroll_args
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, int... Selector>
|
template<typename T, int... Selector>
|
||||||
void drawRSM(const core::matrix4 & rsm_matrix)
|
void drawRSM(const core::matrix4 & rsm_matrix)
|
||||||
@ -170,9 +127,7 @@ void drawRSM(const core::matrix4 & rsm_matrix)
|
|||||||
HandleExpander<typename T::RSMShader>::template expand(mesh->TextureHandles, T::RSMTextures);
|
HandleExpander<typename T::RSMShader>::template expand(mesh->TextureHandles, T::RSMTextures);
|
||||||
else
|
else
|
||||||
TexExpander<typename T::RSMShader>::template expandTex(*mesh, T::RSMTextures);
|
TexExpander<typename T::RSMShader>::template expandTex(*mesh, T::RSMTextures);
|
||||||
//FIXME
|
CustomUnrollArgs<Selector...>::template drawMesh<typename T::RSMShader>(t.at(i), rsm_matrix);
|
||||||
//CustomUnrollArgs<Selector...>::template drawMesh<typename T::RSMShader>(t.at(i), rsm_matrix);
|
|
||||||
rsm_custom_unroll_args<Selector...>::template exec<typename T::RSMShader>(rsm_matrix, t.at(i));
|
|
||||||
}
|
}
|
||||||
} // drawRSM
|
} // drawRSM
|
||||||
|
|
||||||
|
@ -77,7 +77,6 @@ struct CustomUnrollArgs<>
|
|||||||
} // drawMesh
|
} // drawMesh
|
||||||
}; // CustomUnrollArgs
|
}; // CustomUnrollArgs
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Variadic template to implement TexExpander*/
|
/** Variadic template to implement TexExpander*/
|
||||||
template<typename T, int N>
|
template<typename T, int N>
|
||||||
|
@ -181,7 +181,7 @@ public:
|
|||||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "rsm.vert",
|
loadProgram(OBJECT, GL_VERTEX_SHADER, "rsm.vert",
|
||||||
GL_FRAGMENT_SHADER, "rsm.frag");
|
GL_FRAGMENT_SHADER, "rsm.frag");
|
||||||
|
|
||||||
assignUniforms("RSMMatrix", "ModelMatrix", "TextureMatrix");
|
assignUniforms("ModelMatrix", "TextureMatrix", "RSMMatrix");
|
||||||
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
assignSamplerNames(0, "tex", ST_TRILINEAR_ANISOTROPIC_FILTERED);
|
||||||
} // CRSMShader
|
} // CRSMShader
|
||||||
}; // CRSMShader
|
}; // CRSMShader
|
||||||
@ -197,7 +197,7 @@ public:
|
|||||||
loadProgram(OBJECT, GL_VERTEX_SHADER, "rsm.vert",
|
loadProgram(OBJECT, GL_VERTEX_SHADER, "rsm.vert",
|
||||||
GL_FRAGMENT_SHADER, "splatting_rsm.frag");
|
GL_FRAGMENT_SHADER, "splatting_rsm.frag");
|
||||||
|
|
||||||
assignUniforms("RSMMatrix", "ModelMatrix");
|
assignUniforms("ModelMatrix", "RSMMatrix");
|
||||||
assignSamplerNames(0, "tex_layout", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
assignSamplerNames(0, "tex_layout", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
1, "tex_detail0", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
1, "tex_detail0", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
2, "tex_detail1", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
2, "tex_detail1", ST_TRILINEAR_ANISOTROPIC_FILTERED,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user