Improved interfaces

This commit is contained in:
Elderme 2015-11-22 16:13:34 +01:00
parent be1178871b
commit b4d39f7d85
7 changed files with 20 additions and 28 deletions

View File

@ -49,7 +49,7 @@ public:
virtual void render(float dt) = 0; virtual void render(float dt) = 0;
virtual void renderScene(irr::scene::ICameraSceneNode * const camnode, virtual void renderScene(irr::scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows, const std::vector<GlowData>& glows,
float dt, bool hasShadows, bool forceRTT) = 0; float dt, bool hasShadows, bool forceRTT) = 0;
virtual void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode, virtual void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode,

View File

@ -542,6 +542,7 @@ void DrawCalls::renderParticlesList() const
*/ */
void DrawCalls::drawIndirectSolidFirstPass() const void DrawCalls::drawIndirectSolidFirstPass() const
{ {
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>();
@ -557,6 +558,7 @@ void DrawCalls::drawIndirectSolidFirstPass() const
*/ */
void DrawCalls::multidrawSolidFirstPass() const void DrawCalls::multidrawSolidFirstPass() const
{ {
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>();
@ -569,6 +571,7 @@ 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.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);
@ -581,6 +584,7 @@ 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.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);
@ -593,6 +597,7 @@ 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.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>();
@ -604,6 +609,7 @@ void DrawCalls::drawIndirectNormals() const
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void DrawCalls::multidrawNormals() const void DrawCalls::multidrawNormals() const
{ {
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>();
@ -615,17 +621,19 @@ 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.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>(windDir, cascade); m_shadow_cmd_buffer.drawIndirect<GrassMat,irr::core::vector3df>(windDir, cascade);
m_shadow_cmd_buffer.drawIndirect<NormalMat>(cascade); m_shadow_cmd_buffer.drawIndirect<NormalMat>(cascade);
m_shadow_cmd_buffer.drawIndirect<SplattingMat>(cascade);
} }
void DrawCalls::multidrawShadows(unsigned cascade) const void DrawCalls::multidrawShadows(unsigned cascade) const
{ {
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);
@ -637,6 +645,7 @@ 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.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);
@ -647,6 +656,7 @@ 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.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);
@ -657,11 +667,13 @@ 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.drawIndirect(); m_glow_cmd_buffer.drawIndirect();
} }
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void DrawCalls::multidrawGlow() const void DrawCalls::multidrawGlow() const
{ {
m_glow_cmd_buffer.bind();
m_glow_cmd_buffer.multidraw(); m_glow_cmd_buffer.multidraw();
} }

View File

@ -48,8 +48,7 @@ private:
ShadowCommandBuffer m_shadow_cmd_buffer; ShadowCommandBuffer m_shadow_cmd_buffer;
ReflectiveShadowMapCommandBuffer m_reflective_shadow_map_cmd_buffer; ReflectiveShadowMapCommandBuffer m_reflective_shadow_map_cmd_buffer;
GlowCommandBuffer m_glow_cmd_buffer; GlowCommandBuffer m_glow_cmd_buffer;
irr::core::vector3df windDir; //TODO: same member in geometry_passes irr::core::vector3df windDir; //TODO: same member in geometry_passes
MeshMap m_solid_pass_mesh [Material::SHADERTYPE_COUNT] ; MeshMap m_solid_pass_mesh [Material::SHADERTYPE_COUNT] ;
@ -88,11 +87,6 @@ public:
void renderBillboardList() const; void renderBillboardList() const;
void renderParticlesList() const; void renderParticlesList() const;
inline void bindSolidCmd() const { m_solid_cmd_buffer.bind(); }
inline void bindShadowCmd() const { m_shadow_cmd_buffer.bind(); }
inline void bindReflectiveShadowMapsCmd() const { m_reflective_shadow_map_cmd_buffer.bind(); }
inline void bindGlowCmd() const { m_glow_cmd_buffer.bind(); }
void drawIndirectSolidFirstPass() const; void drawIndirectSolidFirstPass() const;
void multidrawSolidFirstPass() const; void multidrawSolidFirstPass() const;
void drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled_tex) const; void drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled_tex) const;

View File

@ -26,7 +26,7 @@ public:
void render(float dt); void render(float dt);
void renderScene(irr::scene::ICameraSceneNode * const camnode, void renderScene(irr::scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows, const std::vector<GlowData>& glows,
float dt, bool hasShadows, bool forceRTT){} float dt, bool hasShadows, bool forceRTT){}
void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode, void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode,
float dt){} float dt){}

View File

@ -176,9 +176,6 @@ void GeometryPasses::renderSolidFirstPass(const DrawCalls& draw_calls)
{ {
m_wind_dir = getWindDir(); //TODO: why this function instead of Wind::getWind()? m_wind_dir = getWindDir(); //TODO: why this function instead of Wind::getWind()?
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindSolidCmd();
{ {
ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS1)); ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS1));
irr_driver->setPhase(SOLID_NORMAL_AND_DEPTH_PASS); irr_driver->setPhase(SOLID_NORMAL_AND_DEPTH_PASS);
@ -279,9 +276,6 @@ void GeometryPasses::renderSolidSecondPass( const DrawCalls& draw_calls,
if (!glIsTextureHandleResidentARB(DepthHandle)) if (!glIsTextureHandleResidentARB(DepthHandle))
glMakeTextureHandleResidentARB(DepthHandle); glMakeTextureHandleResidentARB(DepthHandle);
} }
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindSolidCmd();
{ {
ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS2)); ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS2));
@ -344,7 +338,7 @@ void GeometryPasses::renderNormalsVisualisation(const DrawCalls& draw_calls)
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
void GeometryPasses::renderGlow(const DrawCalls& draw_calls, std::vector<GlowData>& glows) void GeometryPasses::renderGlow(const DrawCalls& draw_calls, const std::vector<GlowData>& glows)
{ {
irr_driver->getSceneManager()->setCurrentRendertime(scene::ESNRP_SOLID); irr_driver->getSceneManager()->setCurrentRendertime(scene::ESNRP_SOLID);
irr_driver->getRTT()->getFBO(FBO_TMP1_WITH_DS).bind(); irr_driver->getRTT()->getFBO(FBO_TMP1_WITH_DS).bind();
@ -377,7 +371,6 @@ void GeometryPasses::renderGlow(const DrawCalls& draw_calls, std::vector<GlowDat
if (CVS->supportsIndirectInstancingRendering()) if (CVS->supportsIndirectInstancingRendering())
{ {
draw_calls.bindGlowCmd();
if (CVS->isAZDOEnabled()) if (CVS->isAZDOEnabled())
{ {
draw_calls.multidrawGlow(); draw_calls.multidrawGlow();
@ -632,16 +625,12 @@ void GeometryPasses::renderShadows(const DrawCalls& draw_calls,
renderShadow<DefaultMaterial, 1>(cascade); renderShadow<DefaultMaterial, 1>(cascade);
renderShadow<SphereMap, 1>(cascade); renderShadow<SphereMap, 1>(cascade);
renderShadow<DetailMat, 1>(cascade); renderShadow<DetailMat, 1>(cascade);
renderShadow<SplattingMat, 1>(cascade); //renderShadow<SplattingMat, 1>(cascade);
renderShadow<NormalMat, 1>(cascade); renderShadow<NormalMat, 1>(cascade);
renderShadow<AlphaRef, 1>(cascade); renderShadow<AlphaRef, 1>(cascade);
renderShadow<UnlitMat, 1>(cascade); renderShadow<UnlitMat, 1>(cascade);
renderShadow<GrassMat, 3, 1>(cascade); renderShadow<GrassMat, 3, 1>(cascade);
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindShadowCmd();
if (CVS->isAZDOEnabled()) if (CVS->isAZDOEnabled())
{ {
draw_calls.multidrawShadows(cascade); draw_calls.multidrawShadows(cascade);
@ -716,9 +705,6 @@ void GeometryPasses::renderReflectiveShadowMap(const DrawCalls& draw_calls,
drawRSM<DetailMat, 3, 1>(rsm_matrix); drawRSM<DetailMat, 3, 1>(rsm_matrix);
drawRSM<SplattingMat, 1>(rsm_matrix); drawRSM<SplattingMat, 1>(rsm_matrix);
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindReflectiveShadowMapsCmd();
if (CVS->isAZDOEnabled()) if (CVS->isAZDOEnabled())
{ {
draw_calls.multidrawReflectiveShadowMaps(rsm_matrix); draw_calls.multidrawReflectiveShadowMaps(rsm_matrix);

View File

@ -160,7 +160,7 @@ void ShaderBasedRenderer::computeMatrixesAndCameras(scene::ICameraSceneNode *con
// ============================================================================ // ============================================================================
void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode, void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows, const std::vector<GlowData>& glows,
float dt, float dt,
bool hasShadow, bool hasShadow,
bool forceRTT) bool forceRTT)

View File

@ -53,7 +53,7 @@ private:
void prepareDrawCalls(scene::ICameraSceneNode *camnode); void prepareDrawCalls(scene::ICameraSceneNode *camnode);
void renderScene(irr::scene::ICameraSceneNode * const camnode, void renderScene(irr::scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows, const std::vector<GlowData>& glows,
float dt, bool hasShadows, bool forceRTT); float dt, bool hasShadows, bool forceRTT);
void renderParticles(); void renderParticles();