Do not create CommandBuffers when Indirect Instancing Rendering is not available.
This commit is contained in:
parent
896f730827
commit
2da28b22b7
@ -455,6 +455,28 @@ void DrawCalls::parseSceneManager(core::list<scene::ISceneNode*> &List,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
DrawCalls::DrawCalls()
|
||||||
|
{
|
||||||
|
if(CVS->supportsIndirectInstancingRendering())
|
||||||
|
{
|
||||||
|
m_solid_cmd_buffer = new SolidCommandBuffer();
|
||||||
|
m_shadow_cmd_buffer = new ShadowCommandBuffer();
|
||||||
|
m_reflective_shadow_map_cmd_buffer = new ReflectiveShadowMapCommandBuffer();
|
||||||
|
m_glow_cmd_buffer = new GlowCommandBuffer();
|
||||||
|
}
|
||||||
|
} //DrawCalls
|
||||||
|
|
||||||
|
DrawCalls::~DrawCalls()
|
||||||
|
{
|
||||||
|
delete m_solid_cmd_buffer;
|
||||||
|
delete m_shadow_cmd_buffer;
|
||||||
|
delete m_reflective_shadow_map_cmd_buffer;
|
||||||
|
delete m_glow_cmd_buffer;
|
||||||
|
} //~DrawCalls
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
/** Prepare draw calls before scene rendering
|
/** Prepare draw calls before scene rendering
|
||||||
* \param[out] solid_poly_count Total number of polygons in objects
|
* \param[out] solid_poly_count Total number of polygons in objects
|
||||||
@ -549,26 +571,26 @@ void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices,
|
|||||||
{
|
{
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.fill(m_solid_pass_mesh);
|
m_solid_cmd_buffer->fill(m_solid_pass_mesh);
|
||||||
}
|
}
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
{
|
{
|
||||||
m_glow_cmd_buffer.fill(&m_glow_pass_mesh);
|
m_glow_cmd_buffer->fill(&m_glow_pass_mesh);
|
||||||
}
|
}
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
{
|
{
|
||||||
irr_driver->setPhase(SHADOW_PASS);
|
irr_driver->setPhase(SHADOW_PASS);
|
||||||
m_shadow_cmd_buffer.fill(m_shadow_pass_mesh);
|
m_shadow_cmd_buffer->fill(m_shadow_pass_mesh);
|
||||||
}
|
}
|
||||||
#pragma omp section
|
#pragma omp section
|
||||||
if (!shadow_matrices.isRSMMapAvail())
|
if (!shadow_matrices.isRSMMapAvail())
|
||||||
{
|
{
|
||||||
m_reflective_shadow_map_cmd_buffer.fill(m_reflective_shadow_map_mesh);
|
m_reflective_shadow_map_cmd_buffer->fill(m_reflective_shadow_map_mesh);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
PROFILER_POP_CPU_MARKER();
|
PROFILER_POP_CPU_MARKER();
|
||||||
solid_poly_count = m_solid_cmd_buffer.getPolyCount();
|
solid_poly_count = m_solid_cmd_buffer->getPolyCount();
|
||||||
shadow_poly_count = m_shadow_cmd_buffer.getPolyCount();
|
shadow_poly_count = m_shadow_cmd_buffer->getPolyCount();
|
||||||
|
|
||||||
if (CVS->supportsAsyncInstanceUpload())
|
if (CVS->supportsAsyncInstanceUpload())
|
||||||
glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
||||||
@ -605,14 +627,14 @@ void DrawCalls::renderParticlesList() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectSolidFirstPass() const
|
void DrawCalls::drawIndirectSolidFirstPass() const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<DefaultMaterial>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<DefaultMaterial>();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<AlphaRef>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<AlphaRef>();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<UnlitMat>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<UnlitMat>();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<SphereMap>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<SphereMap>();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<GrassMat>(m_wind_dir);
|
m_solid_cmd_buffer->drawIndirectFirstPass<GrassMat>(m_wind_dir);
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<DetailMat>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<DetailMat>();
|
||||||
m_solid_cmd_buffer.drawIndirectFirstPass<NormalMat>();
|
m_solid_cmd_buffer->drawIndirectFirstPass<NormalMat>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -621,14 +643,14 @@ void DrawCalls::drawIndirectSolidFirstPass() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawSolidFirstPass() const
|
void DrawCalls::multidrawSolidFirstPass() const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<DefaultMaterial>();
|
m_solid_cmd_buffer->multidrawFirstPass<DefaultMaterial>();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<AlphaRef>();
|
m_solid_cmd_buffer->multidrawFirstPass<AlphaRef>();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<SphereMap>();
|
m_solid_cmd_buffer->multidrawFirstPass<SphereMap>();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<UnlitMat>();
|
m_solid_cmd_buffer->multidrawFirstPass<UnlitMat>();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<GrassMat>(m_wind_dir);
|
m_solid_cmd_buffer->multidrawFirstPass<GrassMat>(m_wind_dir);
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<NormalMat>();
|
m_solid_cmd_buffer->multidrawFirstPass<NormalMat>();
|
||||||
m_solid_cmd_buffer.multidrawFirstPass<DetailMat>();
|
m_solid_cmd_buffer->multidrawFirstPass<DetailMat>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -640,14 +662,14 @@ void DrawCalls::multidrawSolidFirstPass() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled_tex) const
|
void DrawCalls::drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled_tex) const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<DefaultMaterial>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<DefaultMaterial>(prefilled_tex);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<AlphaRef>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<AlphaRef>(prefilled_tex);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<UnlitMat>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<UnlitMat>(prefilled_tex);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<SphereMap>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<SphereMap>(prefilled_tex);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<GrassMat>(prefilled_tex, m_wind_dir);
|
m_solid_cmd_buffer->drawIndirectSecondPass<GrassMat>(prefilled_tex, m_wind_dir);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<DetailMat>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<DetailMat>(prefilled_tex);
|
||||||
m_solid_cmd_buffer.drawIndirectSecondPass<NormalMat>(prefilled_tex);
|
m_solid_cmd_buffer->drawIndirectSecondPass<NormalMat>(prefilled_tex);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -658,14 +680,14 @@ void DrawCalls::drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawSolidSecondPass(const std::vector<uint64_t> &handles) const
|
void DrawCalls::multidrawSolidSecondPass(const std::vector<uint64_t> &handles) const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<DefaultMaterial>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<DefaultMaterial>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<AlphaRef>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<AlphaRef>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<SphereMap>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<SphereMap>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<UnlitMat>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<UnlitMat>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<NormalMat>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<NormalMat>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<DetailMat>(handles);
|
m_solid_cmd_buffer->multidraw2ndPass<DetailMat>(handles);
|
||||||
m_solid_cmd_buffer.multidraw2ndPass<GrassMat>(handles, m_wind_dir);
|
m_solid_cmd_buffer->multidraw2ndPass<GrassMat>(handles, m_wind_dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -675,13 +697,13 @@ void DrawCalls::multidrawSolidSecondPass(const std::vector<uint64_t> &handles) c
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectNormals() const
|
void DrawCalls::drawIndirectNormals() const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<DefaultMaterial>();
|
m_solid_cmd_buffer->drawIndirectNormals<DefaultMaterial>();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<AlphaRef>();
|
m_solid_cmd_buffer->drawIndirectNormals<AlphaRef>();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<UnlitMat>();
|
m_solid_cmd_buffer->drawIndirectNormals<UnlitMat>();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<SphereMap>();
|
m_solid_cmd_buffer->drawIndirectNormals<SphereMap>();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<DetailMat>();
|
m_solid_cmd_buffer->drawIndirectNormals<DetailMat>();
|
||||||
m_solid_cmd_buffer.drawIndirectNormals<NormalMat>();
|
m_solid_cmd_buffer->drawIndirectNormals<NormalMat>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -690,13 +712,13 @@ void DrawCalls::drawIndirectNormals() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawNormals() const
|
void DrawCalls::multidrawNormals() const
|
||||||
{
|
{
|
||||||
m_solid_cmd_buffer.bind();
|
m_solid_cmd_buffer->bind();
|
||||||
m_solid_cmd_buffer.multidrawNormals<DefaultMaterial>();
|
m_solid_cmd_buffer->multidrawNormals<DefaultMaterial>();
|
||||||
m_solid_cmd_buffer.multidrawNormals<AlphaRef>();
|
m_solid_cmd_buffer->multidrawNormals<AlphaRef>();
|
||||||
m_solid_cmd_buffer.multidrawNormals<UnlitMat>();
|
m_solid_cmd_buffer->multidrawNormals<UnlitMat>();
|
||||||
m_solid_cmd_buffer.multidrawNormals<SphereMap>();
|
m_solid_cmd_buffer->multidrawNormals<SphereMap>();
|
||||||
m_solid_cmd_buffer.multidrawNormals<DetailMat>();
|
m_solid_cmd_buffer->multidrawNormals<DetailMat>();
|
||||||
m_solid_cmd_buffer.multidrawNormals<NormalMat>();
|
m_solid_cmd_buffer->multidrawNormals<NormalMat>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -707,15 +729,15 @@ void DrawCalls::multidrawNormals() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectShadows(unsigned cascade) const
|
void DrawCalls::drawIndirectShadows(unsigned cascade) const
|
||||||
{
|
{
|
||||||
m_shadow_cmd_buffer.bind();
|
m_shadow_cmd_buffer->bind();
|
||||||
m_shadow_cmd_buffer.drawIndirect<DefaultMaterial>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<DefaultMaterial>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<DetailMat>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<DetailMat>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<AlphaRef>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<AlphaRef>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<UnlitMat>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<UnlitMat>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<GrassMat,irr::core::vector3df>(cascade, m_wind_dir);
|
m_shadow_cmd_buffer->drawIndirect<GrassMat,irr::core::vector3df>(cascade, m_wind_dir);
|
||||||
m_shadow_cmd_buffer.drawIndirect<NormalMat>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<NormalMat>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<SplattingMat>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<SplattingMat>(cascade);
|
||||||
m_shadow_cmd_buffer.drawIndirect<SphereMap>(cascade);
|
m_shadow_cmd_buffer->drawIndirect<SphereMap>(cascade);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -725,15 +747,15 @@ void DrawCalls::drawIndirectShadows(unsigned cascade) const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawShadows(unsigned cascade) const
|
void DrawCalls::multidrawShadows(unsigned cascade) const
|
||||||
{
|
{
|
||||||
m_shadow_cmd_buffer.bind();
|
m_shadow_cmd_buffer->bind();
|
||||||
m_shadow_cmd_buffer.multidrawShadow<DefaultMaterial>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<DefaultMaterial>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<DetailMat>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<DetailMat>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<NormalMat>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<NormalMat>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<AlphaRef>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<AlphaRef>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<UnlitMat>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<UnlitMat>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<GrassMat,irr::core::vector3df>(cascade, m_wind_dir);
|
m_shadow_cmd_buffer->multidrawShadow<GrassMat,irr::core::vector3df>(cascade, m_wind_dir);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<SplattingMat>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<SplattingMat>(cascade);
|
||||||
m_shadow_cmd_buffer.multidrawShadow<SphereMap>(cascade);
|
m_shadow_cmd_buffer->multidrawShadow<SphereMap>(cascade);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -744,12 +766,12 @@ void DrawCalls::multidrawShadows(unsigned cascade) const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const
|
void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const
|
||||||
{
|
{
|
||||||
m_reflective_shadow_map_cmd_buffer.bind();
|
m_reflective_shadow_map_cmd_buffer->bind();
|
||||||
m_reflective_shadow_map_cmd_buffer.drawIndirect<DefaultMaterial>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->drawIndirect<DefaultMaterial>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.drawIndirect<AlphaRef>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->drawIndirect<AlphaRef>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.drawIndirect<UnlitMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->drawIndirect<UnlitMat>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.drawIndirect<NormalMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->drawIndirect<NormalMat>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.drawIndirect<DetailMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->drawIndirect<DetailMat>(rsm_matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -759,12 +781,12 @@ void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const
|
void DrawCalls::multidrawReflectiveShadowMaps(const core::matrix4 &rsm_matrix) const
|
||||||
{
|
{
|
||||||
m_reflective_shadow_map_cmd_buffer.bind();
|
m_reflective_shadow_map_cmd_buffer->bind();
|
||||||
m_reflective_shadow_map_cmd_buffer.multidraw<DefaultMaterial>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->multidraw<DefaultMaterial>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.multidraw<NormalMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->multidraw<NormalMat>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.multidraw<AlphaRef>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->multidraw<AlphaRef>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.multidraw<UnlitMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->multidraw<UnlitMat>(rsm_matrix);
|
||||||
m_reflective_shadow_map_cmd_buffer.multidraw<DetailMat>(rsm_matrix);
|
m_reflective_shadow_map_cmd_buffer->multidraw<DetailMat>(rsm_matrix);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -775,8 +797,8 @@ void DrawCalls::multidrawReflectiveShadowMaps(const core::matrix4 &rsm_matrix) c
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::drawIndirectGlow() const
|
void DrawCalls::drawIndirectGlow() const
|
||||||
{
|
{
|
||||||
m_glow_cmd_buffer.bind();
|
m_glow_cmd_buffer->bind();
|
||||||
m_glow_cmd_buffer.drawIndirect();
|
m_glow_cmd_buffer->drawIndirect();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -785,6 +807,6 @@ void DrawCalls::drawIndirectGlow() const
|
|||||||
*/
|
*/
|
||||||
void DrawCalls::multidrawGlow() const
|
void DrawCalls::multidrawGlow() const
|
||||||
{
|
{
|
||||||
m_glow_cmd_buffer.bind();
|
m_glow_cmd_buffer->bind();
|
||||||
m_glow_cmd_buffer.multidraw();
|
m_glow_cmd_buffer->multidraw();
|
||||||
}
|
}
|
||||||
|
@ -43,10 +43,10 @@ private:
|
|||||||
MeshMap m_glow_pass_mesh;
|
MeshMap m_glow_pass_mesh;
|
||||||
|
|
||||||
/** meshes data in VRAM */
|
/** meshes data in VRAM */
|
||||||
SolidCommandBuffer m_solid_cmd_buffer;
|
SolidCommandBuffer *m_solid_cmd_buffer = NULL;
|
||||||
ShadowCommandBuffer m_shadow_cmd_buffer;
|
ShadowCommandBuffer *m_shadow_cmd_buffer = NULL;
|
||||||
ReflectiveShadowMapCommandBuffer m_reflective_shadow_map_cmd_buffer;
|
ReflectiveShadowMapCommandBuffer *m_reflective_shadow_map_cmd_buffer = NULL;
|
||||||
GlowCommandBuffer m_glow_cmd_buffer;
|
GlowCommandBuffer *m_glow_cmd_buffer = NULL;
|
||||||
|
|
||||||
void clearLists();
|
void clearLists();
|
||||||
|
|
||||||
@ -71,6 +71,9 @@ private:
|
|||||||
bool drawRSM);
|
bool drawRSM);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
DrawCalls();
|
||||||
|
~DrawCalls();
|
||||||
|
|
||||||
void prepareDrawCalls(ShadowMatrices& shadow_matrices,
|
void prepareDrawCalls(ShadowMatrices& shadow_matrices,
|
||||||
irr::scene::ICameraSceneNode *camnode,
|
irr::scene::ICameraSceneNode *camnode,
|
||||||
unsigned &solid_poly_count,
|
unsigned &solid_poly_count,
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
template<typename T, int ...List>
|
template<typename T, int ...List>
|
||||||
void renderMeshes1stPass(const DrawCalls& draw_calls)
|
void renderMeshes1stPass()
|
||||||
{
|
{
|
||||||
auto &meshes = T::List::getInstance()->SolidPass;
|
auto &meshes = T::List::getInstance()->SolidPass;
|
||||||
T::FirstPassShader::getInstance()->use();
|
T::FirstPassShader::getInstance()->use();
|
||||||
@ -137,14 +137,14 @@ void drawRSM(const core::matrix4 & rsm_matrix)
|
|||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
void GL3DrawPolicy::drawSolidFirstPass(const DrawCalls& draw_calls) const
|
void GL3DrawPolicy::drawSolidFirstPass(const DrawCalls& draw_calls) const
|
||||||
{
|
{
|
||||||
renderMeshes1stPass<DefaultMaterial, 2, 1>(draw_calls);
|
renderMeshes1stPass<DefaultMaterial, 2, 1>();
|
||||||
renderMeshes1stPass<SplattingMat, 2, 1>(draw_calls);
|
renderMeshes1stPass<SplattingMat, 2, 1>();
|
||||||
renderMeshes1stPass<UnlitMat, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<UnlitMat, 3, 2, 1>();
|
||||||
renderMeshes1stPass<AlphaRef, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<AlphaRef, 3, 2, 1>();
|
||||||
renderMeshes1stPass<GrassMat, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<GrassMat, 3, 2, 1>();
|
||||||
renderMeshes1stPass<NormalMat, 2, 1>(draw_calls);
|
renderMeshes1stPass<NormalMat, 2, 1>();
|
||||||
renderMeshes1stPass<SphereMap, 2, 1>(draw_calls);
|
renderMeshes1stPass<SphereMap, 2, 1>();
|
||||||
renderMeshes1stPass<DetailMat, 2, 1>(draw_calls);
|
renderMeshes1stPass<DetailMat, 2, 1>();
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@ -202,10 +202,10 @@ void IndirectDrawPolicy::drawSolidFirstPass(const DrawCalls& draw_calls) const
|
|||||||
{
|
{
|
||||||
//TODO: find a way to add TextureMarix in instanced shaders,
|
//TODO: find a way to add TextureMarix in instanced shaders,
|
||||||
//and remove these four lines
|
//and remove these four lines
|
||||||
renderMeshes1stPass<DefaultMaterial, 2, 1>(draw_calls);
|
renderMeshes1stPass<DefaultMaterial, 2, 1>();
|
||||||
renderMeshes1stPass<SplattingMat, 2, 1>(draw_calls);
|
renderMeshes1stPass<SplattingMat, 2, 1>();
|
||||||
renderMeshes1stPass<UnlitMat, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<UnlitMat, 3, 2, 1>();
|
||||||
renderMeshes1stPass<AlphaRef, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<AlphaRef, 3, 2, 1>();
|
||||||
|
|
||||||
draw_calls.drawIndirectSolidFirstPass();
|
draw_calls.drawIndirectSolidFirstPass();
|
||||||
}
|
}
|
||||||
@ -263,10 +263,10 @@ void MultidrawPolicy::drawSolidFirstPass(const DrawCalls& draw_calls) const
|
|||||||
{
|
{
|
||||||
//TODO: find a way to add TextureMarix in instanced shaders,
|
//TODO: find a way to add TextureMarix in instanced shaders,
|
||||||
//and remove these four lines
|
//and remove these four lines
|
||||||
renderMeshes1stPass<DefaultMaterial, 2, 1>(draw_calls);
|
renderMeshes1stPass<DefaultMaterial, 2, 1>();
|
||||||
renderMeshes1stPass<SplattingMat, 2, 1>(draw_calls);
|
renderMeshes1stPass<SplattingMat, 2, 1>();
|
||||||
renderMeshes1stPass<UnlitMat, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<UnlitMat, 3, 2, 1>();
|
||||||
renderMeshes1stPass<AlphaRef, 3, 2, 1>(draw_calls);
|
renderMeshes1stPass<AlphaRef, 3, 2, 1>();
|
||||||
|
|
||||||
draw_calls.multidrawSolidFirstPass();
|
draw_calls.multidrawSolidFirstPass();
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user