Do not upload UBO data when UBO are disabled by graphics restriction
This commit is contained in:
parent
cc43879308
commit
d7ebde2e68
@ -199,6 +199,8 @@ void ShaderBasedRenderer::updateLightsInfo(scene::ICameraSceneNode * const camno
|
||||
*/
|
||||
void ShaderBasedRenderer::uploadLightingData() const
|
||||
{
|
||||
assert(CVS->isARBUniformBufferObjectUsable());
|
||||
|
||||
float Lighting[36];
|
||||
|
||||
core::vector3df sun_direction = irr_driver->getSunDirection();
|
||||
@ -266,9 +268,12 @@ void ShaderBasedRenderer::renderScene(scene::ICameraSceneNode * const camnode,
|
||||
float dt,
|
||||
bool hasShadow,
|
||||
bool forceRTT)
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 0, SharedGPUObjects::getViewProjectionMatricesUBO());
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 1, SharedGPUObjects::getLightingDataUBO());
|
||||
{
|
||||
if(CVS->isARBUniformBufferObjectUsable())
|
||||
{
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 0, SharedGPUObjects::getViewProjectionMatricesUBO());
|
||||
glBindBufferBase(GL_UNIFORM_BUFFER, 1, SharedGPUObjects::getLightingDataUBO());
|
||||
}
|
||||
irr_driver->getSceneManager()->setActiveCamera(camnode);
|
||||
|
||||
PROFILER_PUSH_CPU_MARKER("- Draw Call Generation", 0xFF, 0xFF, 0xFF);
|
||||
@ -832,7 +837,8 @@ void ShaderBasedRenderer::render(float dt)
|
||||
PROFILER_PUSH_CPU_MARKER("UBO upload", 0x0, 0xFF, 0x0);
|
||||
computeMatrixesAndCameras(camnode, viewport.LowerRightCorner.X - viewport.UpperLeftCorner.X, viewport.LowerRightCorner.Y - viewport.UpperLeftCorner.Y);
|
||||
m_shadow_matrices.updateSunOrthoMatrices();
|
||||
uploadLightingData();
|
||||
if(CVS->isARBUniformBufferObjectUsable())
|
||||
uploadLightingData();
|
||||
PROFILER_POP_CPU_MARKER();
|
||||
renderScene(camnode, dt, track->hasShadows(), false);
|
||||
|
||||
@ -855,14 +861,17 @@ void ShaderBasedRenderer::render(float dt)
|
||||
|
||||
} // for i<world->getNumKarts()
|
||||
|
||||
// Use full screen size
|
||||
float tmp[2];
|
||||
tmp[0] = float(irr_driver->getActualScreenSize().Width);
|
||||
tmp[1] = float(irr_driver->getActualScreenSize().Height);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER,
|
||||
SharedGPUObjects::getViewProjectionMatricesUBO());
|
||||
glBufferSubData(GL_UNIFORM_BUFFER, (16 * 9) * sizeof(float),
|
||||
2 * sizeof(float), tmp);
|
||||
if(CVS->isARBUniformBufferObjectUsable())
|
||||
{
|
||||
// Use full screen size
|
||||
float tmp[2];
|
||||
tmp[0] = float(irr_driver->getActualScreenSize().Width);
|
||||
tmp[1] = float(irr_driver->getActualScreenSize().Height);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER,
|
||||
SharedGPUObjects::getViewProjectionMatricesUBO());
|
||||
glBufferSubData(GL_UNIFORM_BUFFER, (16 * 9) * sizeof(float),
|
||||
2 * sizeof(float), tmp);
|
||||
}
|
||||
|
||||
glBindVertexArray(0);
|
||||
glBindBuffer(GL_ARRAY_BUFFER, 0);
|
||||
@ -936,7 +945,9 @@ void ShaderBasedRenderer::renderToTexture(GL3RenderTarget *render_target,
|
||||
|
||||
computeMatrixesAndCameras(camera, width, height);
|
||||
updateLightsInfo(camera, dt);
|
||||
uploadLightingData();
|
||||
if(CVS->isARBUniformBufferObjectUsable())
|
||||
uploadLightingData();
|
||||
|
||||
renderScene(camera, dt, false, true);
|
||||
m_post_processing->render(camera, false, m_rtts, render_target);
|
||||
|
||||
|
@ -449,6 +449,9 @@ void ShadowMatrices::computeMatrixesAndCameras(scene::ICameraSceneNode *const ca
|
||||
16 * sizeof(float));
|
||||
}
|
||||
|
||||
if(!CVS->isARBUniformBufferObjectUsable())
|
||||
return;
|
||||
|
||||
tmp[144] = float(width);
|
||||
tmp[145] = float(height);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER,
|
||||
|
@ -16,6 +16,7 @@
|
||||
// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||
|
||||
#include "graphics/shared_gpu_objects.hpp"
|
||||
#include "graphics/central_settings.hpp"
|
||||
|
||||
GLuint SharedGPUObjects::m_billboard_vbo;
|
||||
GLuint SharedGPUObjects::m_sky_tri_vbo;
|
||||
@ -147,6 +148,7 @@ void SharedGPUObjects::initFrustrumVBO()
|
||||
// ----------------------------------------------------------------------------
|
||||
void SharedGPUObjects::initShadowVPMUBO()
|
||||
{
|
||||
assert(CVS->isARBUniformBufferObjectUsable());
|
||||
glGenBuffers(1, &m_View_projection_matrices_ubo);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, m_View_projection_matrices_ubo);
|
||||
glBufferData(GL_UNIFORM_BUFFER, (16 * 9 + 2) * sizeof(float), 0,
|
||||
@ -157,6 +159,7 @@ void SharedGPUObjects::initShadowVPMUBO()
|
||||
// ----------------------------------------------------------------------------
|
||||
void SharedGPUObjects::initLightingDataUBO()
|
||||
{
|
||||
assert(CVS->isARBUniformBufferObjectUsable());
|
||||
glGenBuffers(1, &m_lighting_data_ubo);
|
||||
glBindBuffer(GL_UNIFORM_BUFFER, m_lighting_data_ubo);
|
||||
glBufferData(GL_UNIFORM_BUFFER, 36 * sizeof(float), 0, GL_STREAM_DRAW);
|
||||
@ -190,9 +193,13 @@ void SharedGPUObjects::init()
|
||||
initBillboardVBO();
|
||||
initSkyTriVBO();
|
||||
initFrustrumVBO();
|
||||
initShadowVPMUBO();
|
||||
initLightingDataUBO();
|
||||
initParticleQuadVBO();
|
||||
|
||||
if(CVS->isARBUniformBufferObjectUsable())
|
||||
{
|
||||
initShadowVPMUBO();
|
||||
initLightingDataUBO();
|
||||
}
|
||||
|
||||
m_has_been_initialised = true;
|
||||
} // SharedGPUObjects
|
||||
@ -205,4 +212,4 @@ void SharedGPUObjects::init()
|
||||
void SharedGPUObjects::reset()
|
||||
{
|
||||
m_has_been_initialised = false;
|
||||
} // reset
|
||||
} // reset
|
||||
|
Loading…
x
Reference in New Issue
Block a user