Fixed poly count
This commit is contained in:
@@ -195,3 +195,10 @@ void AbstractRenderer::drawJoint(bool drawline, bool drawname,
|
||||
|
||||
#endif //DEBUG
|
||||
|
||||
AbstractRenderer::AbstractRenderer()
|
||||
{
|
||||
resetObjectCount();
|
||||
resetPolyCount();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -28,6 +28,15 @@
|
||||
|
||||
class RenderTarget;
|
||||
|
||||
enum STKRenderingPass
|
||||
{
|
||||
SOLID_NORMAL_AND_DEPTH_PASS,
|
||||
SOLID_LIT_PASS,
|
||||
TRANSPARENT_PASS,
|
||||
GLOW_PASS,
|
||||
SHADOW_PASS,
|
||||
PASS_COUNT,
|
||||
};
|
||||
|
||||
struct GlowData {
|
||||
irr::scene::ISceneNode * node;
|
||||
@@ -45,6 +54,10 @@ class AbstractRenderer
|
||||
protected:
|
||||
irr::core::vector2df m_current_screen_size;
|
||||
|
||||
/** Performance stats */
|
||||
unsigned m_object_count[PASS_COUNT];
|
||||
unsigned m_poly_count [PASS_COUNT];
|
||||
|
||||
#ifdef DEBUG
|
||||
void drawDebugMeshes() const;
|
||||
|
||||
@@ -56,6 +69,7 @@ protected:
|
||||
void renderSkybox(const irr::scene::ICameraSceneNode *camera) const;
|
||||
|
||||
public:
|
||||
AbstractRenderer();
|
||||
virtual ~AbstractRenderer(){}
|
||||
|
||||
virtual void onLoadWorld() = 0;
|
||||
@@ -98,6 +112,14 @@ public:
|
||||
*/
|
||||
virtual std::unique_ptr<RenderTarget> createRenderTarget(const irr::core::dimension2du &dimension,
|
||||
const std::string &name) = 0;
|
||||
|
||||
void resetObjectCount() { memset(m_object_count, 0, sizeof(m_object_count));}
|
||||
void resetPolyCount() { memset(m_poly_count, 0, sizeof(m_poly_count)); }
|
||||
void incObjectCount(STKRenderingPass phase) { m_object_count[phase]++; }
|
||||
|
||||
unsigned getObjectCount(STKRenderingPass pass) const { return m_object_count[pass]; }
|
||||
unsigned getPolyCount(STKRenderingPass pass) const { return m_poly_count [pass]; }
|
||||
|
||||
};
|
||||
|
||||
#endif //HEADER_ABSTRACT_RENDERER_HPP
|
||||
|
||||
@@ -403,7 +403,10 @@ void DrawCalls::parseSceneManager(core::list<scene::ISceneNode*> &List,
|
||||
}
|
||||
|
||||
|
||||
void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices, scene::ICameraSceneNode *camnode)
|
||||
void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices,
|
||||
scene::ICameraSceneNode *camnode,
|
||||
unsigned &solid_poly_count,
|
||||
unsigned &shadow_poly_count)
|
||||
{
|
||||
windDir = getWindDir();
|
||||
clearLists();
|
||||
@@ -509,10 +512,8 @@ void DrawCalls::prepareDrawCalls( ShadowMatrices& shadow_matrices, scene::ICamer
|
||||
}
|
||||
}
|
||||
PROFILER_POP_CPU_MARKER();
|
||||
//poly_count[SOLID_NORMAL_AND_DEPTH_PASS] += SolidPoly;
|
||||
//poly_count[SHADOW_PASS] += ShadowPoly;
|
||||
//TODO: return polycount and update it in renderer class
|
||||
|
||||
solid_poly_count = m_solid_cmd_buffer.getPolyCount();
|
||||
shadow_poly_count = m_shadow_cmd_buffer.getPolyCount();
|
||||
|
||||
if (CVS->supportsAsyncInstanceUpload())
|
||||
glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
|
||||
|
||||
@@ -30,14 +30,9 @@
|
||||
|
||||
|
||||
class DrawCalls
|
||||
{
|
||||
public:
|
||||
|
||||
|
||||
GLsync m_sync = 0; //TODO: make it private. Should it be in shader_based_renderer?
|
||||
|
||||
|
||||
{
|
||||
private:
|
||||
GLsync m_sync = 0;
|
||||
|
||||
std::vector<irr::scene::ISceneNode *> m_immediate_draw_list;
|
||||
std::vector<STKBillboard *> m_billboard_list;
|
||||
@@ -60,31 +55,36 @@ private:
|
||||
void clearLists();
|
||||
|
||||
void handleSTKCommon(scene::ISceneNode *Node,
|
||||
std::vector<scene::ISceneNode *> *ImmediateDraw,
|
||||
const scene::ICameraSceneNode *cam,
|
||||
scene::ICameraSceneNode *shadowcam[4],
|
||||
const scene::ICameraSceneNode *rsmcam,
|
||||
bool &culledforcam,
|
||||
bool culledforshadowcam[4],
|
||||
bool &culledforrsm,
|
||||
bool drawRSM);
|
||||
std::vector<scene::ISceneNode *> *ImmediateDraw,
|
||||
const scene::ICameraSceneNode *cam,
|
||||
scene::ICameraSceneNode *shadowcam[4],
|
||||
const scene::ICameraSceneNode *rsmcam,
|
||||
bool &culledforcam,
|
||||
bool culledforshadowcam[4],
|
||||
bool &culledforrsm,
|
||||
bool drawRSM);
|
||||
|
||||
void parseSceneManager(core::list<scene::ISceneNode*> &List,
|
||||
std::vector<scene::ISceneNode *> *ImmediateDraw,
|
||||
const scene::ICameraSceneNode* cam,
|
||||
scene::ICameraSceneNode *shadow_cam[4],const scene::ICameraSceneNode *rsmcam,
|
||||
scene::ICameraSceneNode *shadow_cam[4],
|
||||
const scene::ICameraSceneNode *rsmcam,
|
||||
bool culledforcam,
|
||||
bool culledforshadowcam[4],
|
||||
bool culledforrsm,
|
||||
bool drawRSM);
|
||||
|
||||
|
||||
public:
|
||||
void prepareDrawCalls(ShadowMatrices& shadow_matrices, irr::scene::ICameraSceneNode *camnode);
|
||||
void prepareDrawCalls(ShadowMatrices& shadow_matrices,
|
||||
irr::scene::ICameraSceneNode *camnode,
|
||||
unsigned &solid_poly_count,
|
||||
unsigned &shadow_poly_count);
|
||||
|
||||
void setFenceSync() { m_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0); }
|
||||
|
||||
void renderImmediateDrawList() const;
|
||||
void renderBillboardList() const;
|
||||
void renderParticlesList() const;
|
||||
void renderBillboardList() const;
|
||||
void renderParticlesList() const;
|
||||
|
||||
void drawIndirectSolidFirstPass() const;
|
||||
void multidrawSolidFirstPass() const;
|
||||
|
||||
@@ -37,7 +37,7 @@ void FixedPipelineRenderer::onUnloadWorld()
|
||||
}
|
||||
|
||||
void FixedPipelineRenderer::render(float dt)
|
||||
{
|
||||
{
|
||||
World *world = World::getWorld(); // Never NULL.
|
||||
|
||||
irr_driver->getVideoDriver()->beginScene(/*backBuffer clear*/ true,
|
||||
@@ -112,4 +112,3 @@ std::unique_ptr<RenderTarget> FixedPipelineRenderer::createRenderTarget(const ir
|
||||
{
|
||||
return std::unique_ptr<RenderTarget>(new GL1RenderTarget(dimension, name));
|
||||
}
|
||||
|
||||
|
||||
@@ -39,7 +39,6 @@ public:
|
||||
|
||||
std::unique_ptr<RenderTarget> createRenderTarget(const irr::core::dimension2du &dimension,
|
||||
const std::string &name);
|
||||
|
||||
};
|
||||
|
||||
#endif //HEADER_FIXED_PIPELINE_RENDERER_HPP
|
||||
|
||||
@@ -129,7 +129,6 @@ IrrDriver::IrrDriver()
|
||||
m_lightviz = m_shadowviz = m_distortviz = m_rsm = m_rh = m_gi = false;
|
||||
m_boundingboxesviz = false;
|
||||
m_last_light_bucket_distance = 0;
|
||||
memset(object_count, 0, sizeof(object_count));
|
||||
} // IrrDriver
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@@ -171,12 +170,7 @@ STKRenderingPass IrrDriver::getPhase() const
|
||||
|
||||
void IrrDriver::IncreaseObjectCount()
|
||||
{
|
||||
object_count[m_phase]++;
|
||||
}
|
||||
|
||||
void IrrDriver::IncreasePolyCount(unsigned Polys)
|
||||
{
|
||||
poly_count[m_phase] += Polys;
|
||||
m_renderer->incObjectCount(m_phase);
|
||||
}
|
||||
|
||||
core::array<video::IRenderTarget> &IrrDriver::getMainSetup()
|
||||
@@ -1842,26 +1836,21 @@ void IrrDriver::displayFPS()
|
||||
if (low > kilotris) low = kilotris;
|
||||
if (high < kilotris) high = kilotris;
|
||||
|
||||
core::stringw fpsString;
|
||||
core::stringw fps_string;
|
||||
|
||||
if (UserConfigParams::m_artist_debug_mode)
|
||||
if ((UserConfigParams::m_artist_debug_mode)&&(CVS->isGLSL()))
|
||||
{
|
||||
fpsString = _("FPS: %d/%d/%d - PolyCount: %d Solid, "
|
||||
fps_string = _("FPS: %d/%d/%d - PolyCount: %d Solid, "
|
||||
"%d Shadows - LightDist : %d",
|
||||
min, fps, max, poly_count[SOLID_NORMAL_AND_DEPTH_PASS],
|
||||
poly_count[SHADOW_PASS], m_last_light_bucket_distance);
|
||||
poly_count[SOLID_NORMAL_AND_DEPTH_PASS] = 0;
|
||||
poly_count[SHADOW_PASS] = 0;
|
||||
object_count[SOLID_NORMAL_AND_DEPTH_PASS] = 0;
|
||||
object_count[SOLID_NORMAL_AND_DEPTH_PASS] = 0;
|
||||
object_count[TRANSPARENT_PASS] = 0;
|
||||
min, fps, max, m_renderer->getPolyCount(SOLID_NORMAL_AND_DEPTH_PASS),
|
||||
m_renderer->getPolyCount(SHADOW_PASS), m_last_light_bucket_distance);
|
||||
}
|
||||
else
|
||||
fpsString = _("FPS: %d/%d/%d - %d KTris", min, fps, max, (int)roundf(kilotris));
|
||||
fps_string = _("FPS: %d/%d/%d - %d KTris", min, fps, max, (int)roundf(kilotris));
|
||||
|
||||
static video::SColor fpsColor = video::SColor(255, 0, 0, 0);
|
||||
|
||||
font->draw( fpsString.c_str(), position, fpsColor, false );
|
||||
font->draw( fps_string.c_str(), position, fpsColor, false );
|
||||
} // updateFPS
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
||||
@@ -71,17 +71,6 @@ class ShadowImportance;
|
||||
class ShadowMatrices;
|
||||
class RenderTarget;
|
||||
|
||||
enum STKRenderingPass
|
||||
{
|
||||
SOLID_NORMAL_AND_DEPTH_PASS,
|
||||
SOLID_LIT_PASS,
|
||||
TRANSPARENT_PASS,
|
||||
GLOW_PASS,
|
||||
SHADOW_PASS,
|
||||
PASS_COUNT,
|
||||
};
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* \brief class that creates the irrLicht device and offers higher-level
|
||||
@@ -181,10 +170,8 @@ private:
|
||||
bool m_lightviz;
|
||||
bool m_distortviz;
|
||||
bool m_boundingboxesviz;
|
||||
/** Performance stats */
|
||||
|
||||
unsigned m_last_light_bucket_distance;
|
||||
unsigned object_count[PASS_COUNT];
|
||||
unsigned poly_count[PASS_COUNT];
|
||||
u32 m_renderpass;
|
||||
class STKMeshSceneNode *m_sun_interposer;
|
||||
core::vector3df m_sun_direction;
|
||||
@@ -222,7 +209,6 @@ public:
|
||||
void setPhase(STKRenderingPass);
|
||||
STKRenderingPass getPhase() const;
|
||||
void IncreaseObjectCount();
|
||||
void IncreasePolyCount(unsigned);
|
||||
core::array<video::IRenderTarget> &getMainSetup();
|
||||
void updateConfigIfRelevant();
|
||||
void setAllMaterialFlags(scene::IMesh *mesh) const;
|
||||
|
||||
@@ -263,8 +263,13 @@ void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode,
|
||||
irr_driver->getSceneManager()->setActiveCamera(camnode);
|
||||
|
||||
PROFILER_PUSH_CPU_MARKER("- Draw Call Generation", 0xFF, 0xFF, 0xFF);
|
||||
m_draw_calls.prepareDrawCalls(m_shadow_matrices, camnode);
|
||||
unsigned solid_poly_count;
|
||||
unsigned shadow_poly_count;
|
||||
m_draw_calls.prepareDrawCalls(m_shadow_matrices, camnode, solid_poly_count, shadow_poly_count);
|
||||
m_poly_count[SOLID_NORMAL_AND_DEPTH_PASS] += solid_poly_count;
|
||||
m_poly_count[SHADOW_PASS] += shadow_poly_count;
|
||||
PROFILER_POP_CPU_MARKER();
|
||||
|
||||
// Shadows
|
||||
{
|
||||
// To avoid wrong culling, use the largest view possible
|
||||
@@ -296,7 +301,6 @@ void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode,
|
||||
|
||||
}
|
||||
|
||||
|
||||
PROFILER_PUSH_CPU_MARKER("- Solid Pass 1", 0xFF, 0x00, 0x00);
|
||||
glDepthMask(GL_TRUE);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
@@ -481,7 +485,7 @@ void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode,
|
||||
PROFILER_POP_CPU_MARKER();
|
||||
}
|
||||
|
||||
m_draw_calls.m_sync = glFenceSync(GL_SYNC_GPU_COMMANDS_COMPLETE, 0);
|
||||
m_draw_calls.setFenceSync();
|
||||
|
||||
// Render particles
|
||||
{
|
||||
@@ -623,7 +627,7 @@ ShaderBasedRenderer::ShaderBasedRenderer()
|
||||
else
|
||||
m_geometry_passes = new GeometryPasses<GL3DrawPolicy>();
|
||||
|
||||
m_post_processing = new PostProcessing(irr_driver->getVideoDriver());
|
||||
m_post_processing = new PostProcessing(irr_driver->getVideoDriver());
|
||||
}
|
||||
|
||||
ShaderBasedRenderer::~ShaderBasedRenderer()
|
||||
@@ -740,6 +744,9 @@ void ShaderBasedRenderer::clearGlowingNodes()
|
||||
|
||||
void ShaderBasedRenderer::render(float dt)
|
||||
{
|
||||
resetObjectCount();
|
||||
resetPolyCount();
|
||||
|
||||
BoundingBoxes.clear(); //TODO: what is it doing here?
|
||||
|
||||
compressPowerUpTextures(); //TODO: is it useful every frame?
|
||||
@@ -904,4 +911,3 @@ void ShaderBasedRenderer::renderToTexture(GL3RenderTarget *render_target,
|
||||
irr_driver->getSceneManager()->setActiveCamera(NULL);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ private:
|
||||
Skybox *m_skybox;
|
||||
SphericalHarmonics *m_spherical_harmonics;
|
||||
|
||||
//GLsync m_sync; //TODO
|
||||
DrawCalls m_draw_calls;
|
||||
AbstractGeometryPasses *m_geometry_passes;
|
||||
LightingPasses m_lighting_passes;
|
||||
@@ -127,6 +126,7 @@ public:
|
||||
void renderToTexture(GL3RenderTarget *render_target,
|
||||
irr::scene::ICameraSceneNode* camera,
|
||||
float dt);
|
||||
|
||||
};
|
||||
|
||||
#endif //HEADER_SHADER_BASED_RENDERER_HPP
|
||||
|
||||
Reference in New Issue
Block a user