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 renderScene(irr::scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows,
const std::vector<GlowData>& glows,
float dt, bool hasShadows, bool forceRTT) = 0;
virtual void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode,

View File

@ -542,6 +542,7 @@ void DrawCalls::renderParticlesList() const
*/
void DrawCalls::drawIndirectSolidFirstPass() const
{
m_solid_cmd_buffer.bind();
m_solid_cmd_buffer.drawIndirectFirstPass<DefaultMaterial>();
m_solid_cmd_buffer.drawIndirectFirstPass<AlphaRef>();
m_solid_cmd_buffer.drawIndirectFirstPass<UnlitMat>();
@ -557,6 +558,7 @@ void DrawCalls::drawIndirectSolidFirstPass() const
*/
void DrawCalls::multidrawSolidFirstPass() const
{
m_solid_cmd_buffer.bind();
m_solid_cmd_buffer.multidrawFirstPass<DefaultMaterial>();
m_solid_cmd_buffer.multidrawFirstPass<AlphaRef>();
m_solid_cmd_buffer.multidrawFirstPass<SphereMap>();
@ -569,6 +571,7 @@ void DrawCalls::multidrawSolidFirstPass() 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<AlphaRef>(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
{
m_solid_cmd_buffer.bind();
m_solid_cmd_buffer.multidraw2ndPass<DefaultMaterial>(handles);
m_solid_cmd_buffer.multidraw2ndPass<AlphaRef>(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
{
m_solid_cmd_buffer.bind();
m_solid_cmd_buffer.drawIndirectNormals<DefaultMaterial>();
m_solid_cmd_buffer.drawIndirectNormals<AlphaRef>();
m_solid_cmd_buffer.drawIndirectNormals<UnlitMat>();
@ -604,6 +609,7 @@ void DrawCalls::drawIndirectNormals() const
// ----------------------------------------------------------------------------
void DrawCalls::multidrawNormals() const
{
m_solid_cmd_buffer.bind();
m_solid_cmd_buffer.multidrawNormals<DefaultMaterial>();
m_solid_cmd_buffer.multidrawNormals<AlphaRef>();
m_solid_cmd_buffer.multidrawNormals<UnlitMat>();
@ -615,17 +621,19 @@ void DrawCalls::multidrawNormals() const
// ----------------------------------------------------------------------------
void DrawCalls::drawIndirectShadows(unsigned cascade) const
{
m_shadow_cmd_buffer.bind();
m_shadow_cmd_buffer.drawIndirect<DefaultMaterial>(cascade);
m_shadow_cmd_buffer.drawIndirect<DetailMat>(cascade);
m_shadow_cmd_buffer.drawIndirect<AlphaRef>(cascade);
m_shadow_cmd_buffer.drawIndirect<UnlitMat>(cascade);
m_shadow_cmd_buffer.drawIndirect<GrassMat,irr::core::vector3df>(windDir, cascade);
m_shadow_cmd_buffer.drawIndirect<NormalMat>(cascade);
m_shadow_cmd_buffer.drawIndirect<SplattingMat>(cascade);
}
void DrawCalls::multidrawShadows(unsigned cascade) const
{
m_shadow_cmd_buffer.bind();
m_shadow_cmd_buffer.multidrawShadow<DefaultMaterial>(cascade);
m_shadow_cmd_buffer.multidrawShadow<DetailMat>(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
{
m_reflective_shadow_map_cmd_buffer.bind();
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<UnlitMat>(rsm_matrix);
@ -647,6 +656,7 @@ void DrawCalls::drawIndirectReflectiveShadowMaps(const core::matrix4 &rsm_matrix
// ----------------------------------------------------------------------------
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<NormalMat>(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
{
m_glow_cmd_buffer.bind();
m_glow_cmd_buffer.drawIndirect();
}
// ----------------------------------------------------------------------------
void DrawCalls::multidrawGlow() const
{
m_glow_cmd_buffer.bind();
m_glow_cmd_buffer.multidraw();
}

View File

@ -48,8 +48,7 @@ private:
ShadowCommandBuffer m_shadow_cmd_buffer;
ReflectiveShadowMapCommandBuffer m_reflective_shadow_map_cmd_buffer;
GlowCommandBuffer m_glow_cmd_buffer;
irr::core::vector3df windDir; //TODO: same member in geometry_passes
MeshMap m_solid_pass_mesh [Material::SHADERTYPE_COUNT] ;
@ -88,11 +87,6 @@ public:
void renderBillboardList() 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 multidrawSolidFirstPass() const;
void drawIndirectSolidSecondPass(const std::vector<GLuint> &prefilled_tex) const;

View File

@ -26,7 +26,7 @@ public:
void render(float dt);
void renderScene(irr::scene::ICameraSceneNode * const camnode,
std::vector<GlowData>& glows,
const std::vector<GlowData>& glows,
float dt, bool hasShadows, bool forceRTT){}
void updateLightsInfo(irr::scene::ICameraSceneNode * const camnode,
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()?
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindSolidCmd();
{
ScopedGPUTimer Timer(irr_driver->getGPUTimer(Q_SOLID_PASS1));
irr_driver->setPhase(SOLID_NORMAL_AND_DEPTH_PASS);
@ -279,9 +276,6 @@ void GeometryPasses::renderSolidSecondPass( const DrawCalls& draw_calls,
if (!glIsTextureHandleResidentARB(DepthHandle))
glMakeTextureHandleResidentARB(DepthHandle);
}
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindSolidCmd();
{
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->getRTT()->getFBO(FBO_TMP1_WITH_DS).bind();
@ -377,7 +371,6 @@ void GeometryPasses::renderGlow(const DrawCalls& draw_calls, std::vector<GlowDat
if (CVS->supportsIndirectInstancingRendering())
{
draw_calls.bindGlowCmd();
if (CVS->isAZDOEnabled())
{
draw_calls.multidrawGlow();
@ -632,16 +625,12 @@ void GeometryPasses::renderShadows(const DrawCalls& draw_calls,
renderShadow<DefaultMaterial, 1>(cascade);
renderShadow<SphereMap, 1>(cascade);
renderShadow<DetailMat, 1>(cascade);
renderShadow<SplattingMat, 1>(cascade);
//renderShadow<SplattingMat, 1>(cascade);
renderShadow<NormalMat, 1>(cascade);
renderShadow<AlphaRef, 1>(cascade);
renderShadow<UnlitMat, 1>(cascade);
renderShadow<GrassMat, 3, 1>(cascade);
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindShadowCmd();
if (CVS->isAZDOEnabled())
{
draw_calls.multidrawShadows(cascade);
@ -716,9 +705,6 @@ void GeometryPasses::renderReflectiveShadowMap(const DrawCalls& draw_calls,
drawRSM<DetailMat, 3, 1>(rsm_matrix);
drawRSM<SplattingMat, 1>(rsm_matrix);
if (CVS->supportsIndirectInstancingRendering())
draw_calls.bindReflectiveShadowMapsCmd();
if (CVS->isAZDOEnabled())
{
draw_calls.multidrawReflectiveShadowMaps(rsm_matrix);

View File

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

View File

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