mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-01-05 19:19:39 -06:00
Make use of UniformCache in many Renderables and switch from setUniform(const std::string&, ...) to setUniform(GLint, ...) in those cases
This commit is contained in:
@@ -188,6 +188,25 @@ void RenderableModelProjection::initializeGL() {
|
||||
absPath("${MODULE_SPACECRAFTINSTRUMENTS}/shaders/renderableModel_fs.glsl")
|
||||
);
|
||||
|
||||
_mainUniformCache.performShading = _programObject->uniformLocation("_performShading");
|
||||
_mainUniformCache.directionToSunViewSpace = _programObject->uniformLocation(
|
||||
"directionToSunViewSpace"
|
||||
);
|
||||
_mainUniformCache.modelViewTransform = _programObject->uniformLocation(
|
||||
"modelViewTransform"
|
||||
);
|
||||
_mainUniformCache.projectionTransform = _programObject->uniformLocation(
|
||||
"projectionTransform"
|
||||
);
|
||||
_mainUniformCache.projectionFading = _programObject->uniformLocation(
|
||||
"_projectionFading"
|
||||
);
|
||||
_mainUniformCache.baseTexture = _programObject->uniformLocation(
|
||||
"baseTexture"
|
||||
);
|
||||
_mainUniformCache.projectionTexture = _programObject->uniformLocation(
|
||||
"projectionTexture"
|
||||
);
|
||||
|
||||
_fboProgramObject = ghoul::opengl::ProgramObject::Build(
|
||||
"ProjectionPass",
|
||||
@@ -198,9 +217,17 @@ void RenderableModelProjection::initializeGL() {
|
||||
"${MODULE_SPACECRAFTINSTRUMENTS}/shaders/renderableModelProjection_fs.glsl"
|
||||
)
|
||||
);
|
||||
_fboProgramObject->setIgnoreUniformLocationError(
|
||||
ghoul::opengl::ProgramObject::IgnoreError::Yes
|
||||
|
||||
_fboUniformCache.projectionTexture = _fboProgramObject->uniformLocation(
|
||||
"projectionTexture"
|
||||
);
|
||||
_fboUniformCache.needShadowMap = _fboProgramObject->uniformLocation("needShadowMap");
|
||||
_fboUniformCache.ProjectorMatrix = _fboProgramObject->uniformLocation(
|
||||
"ProjectorMatrix"
|
||||
);
|
||||
_fboUniformCache.ModelTransform = _fboProgramObject->uniformLocation("ModelTransform");
|
||||
_fboUniformCache.boresight = _fboProgramObject->uniformLocation("boresight");
|
||||
|
||||
|
||||
_depthFboProgramObject = ghoul::opengl::ProgramObject::Build(
|
||||
"DepthPass",
|
||||
@@ -208,6 +235,13 @@ void RenderableModelProjection::initializeGL() {
|
||||
absPath("${MODULE_SPACECRAFTINSTRUMENTS}/shaders/renderableModelDepth_fs.glsl")
|
||||
);
|
||||
|
||||
_depthFboUniformCache.ProjectorMatrix = _depthFboProgramObject->uniformLocation(
|
||||
"ProjectorMatrix"
|
||||
);
|
||||
_depthFboUniformCache.ModelTransform = _depthFboProgramObject->uniformLocation(
|
||||
"ModelTransform"
|
||||
);
|
||||
|
||||
|
||||
loadTextures();
|
||||
_projectionComponent.initializeGL();
|
||||
@@ -267,26 +301,34 @@ void RenderableModelProjection::render(const RenderData& data, RendererTasks&) {
|
||||
data.camera.combinedViewMatrix()
|
||||
) * directionToSun;
|
||||
|
||||
_programObject->setUniform("_performShading", _performShading);
|
||||
_programObject->setUniform("directionToSunViewSpace", directionToSunViewSpace);
|
||||
_programObject->setUniform("modelViewTransform", glm::mat4(modelViewTransform));
|
||||
_programObject->setUniform("projectionTransform", data.camera.projectionMatrix());
|
||||
_programObject->setUniform(_mainUniformCache.performShading, _performShading);
|
||||
_programObject->setUniform(
|
||||
"_projectionFading",
|
||||
_mainUniformCache.directionToSunViewSpace,
|
||||
directionToSunViewSpace
|
||||
);
|
||||
_programObject->setUniform(
|
||||
_mainUniformCache.modelViewTransform,
|
||||
glm::mat4(modelViewTransform)
|
||||
);
|
||||
_programObject->setUniform(
|
||||
_mainUniformCache.projectionTransform,
|
||||
data.camera.projectionMatrix()
|
||||
);
|
||||
_programObject->setUniform(
|
||||
_mainUniformCache.projectionFading,
|
||||
_projectionComponent.projectionFading()
|
||||
);
|
||||
|
||||
|
||||
_geometry->setUniforms(*_programObject);
|
||||
|
||||
ghoul::opengl::TextureUnit unit[2];
|
||||
unit[0].activate();
|
||||
_baseTexture->bind();
|
||||
_programObject->setUniform("baseTexture", unit[0]);
|
||||
_programObject->setUniform(_mainUniformCache.baseTexture, unit[0]);
|
||||
|
||||
unit[1].activate();
|
||||
_projectionComponent.projectionTexture().bind();
|
||||
_programObject->setUniform("projectionTexture", unit[1]);
|
||||
_programObject->setUniform(_mainUniformCache.projectionTexture, unit[1]);
|
||||
|
||||
_geometry->render();
|
||||
|
||||
@@ -296,16 +338,59 @@ void RenderableModelProjection::render(const RenderData& data, RendererTasks&) {
|
||||
void RenderableModelProjection::update(const UpdateData& data) {
|
||||
if (_programObject->isDirty()) {
|
||||
_programObject->rebuildFromFile();
|
||||
|
||||
_mainUniformCache.performShading = _programObject->uniformLocation(
|
||||
"_performShading"
|
||||
);
|
||||
_mainUniformCache.directionToSunViewSpace = _programObject->uniformLocation(
|
||||
"directionToSunViewSpace"
|
||||
);
|
||||
_mainUniformCache.modelViewTransform = _programObject->uniformLocation(
|
||||
"modelViewTransform"
|
||||
);
|
||||
_mainUniformCache.projectionTransform = _programObject->uniformLocation(
|
||||
"projectionTransform"
|
||||
);
|
||||
_mainUniformCache.projectionFading = _programObject->uniformLocation(
|
||||
"_projectionFading"
|
||||
);
|
||||
_mainUniformCache.baseTexture = _programObject->uniformLocation(
|
||||
"baseTexture"
|
||||
);
|
||||
_mainUniformCache.projectionTexture = _programObject->uniformLocation(
|
||||
"projectionTexture"
|
||||
);
|
||||
}
|
||||
|
||||
if (_fboProgramObject->isDirty()) {
|
||||
_fboProgramObject->rebuildFromFile();
|
||||
|
||||
_fboUniformCache.projectionTexture = _fboProgramObject->uniformLocation(
|
||||
"projectionTexture"
|
||||
);
|
||||
_fboUniformCache.needShadowMap = _fboProgramObject->uniformLocation(
|
||||
"needShadowMap"
|
||||
);
|
||||
_fboUniformCache.ProjectorMatrix = _fboProgramObject->uniformLocation(
|
||||
"ProjectorMatrix"
|
||||
);
|
||||
_fboUniformCache.ModelTransform = _fboProgramObject->uniformLocation(
|
||||
"ModelTransform"
|
||||
);
|
||||
_fboUniformCache.boresight = _fboProgramObject->uniformLocation("boresight");
|
||||
}
|
||||
|
||||
_projectionComponent.update();
|
||||
|
||||
if (_depthFboProgramObject->isDirty()) {
|
||||
_depthFboProgramObject->rebuildFromFile();
|
||||
|
||||
_depthFboUniformCache.ProjectorMatrix = _depthFboProgramObject->uniformLocation(
|
||||
"ProjectorMatrix"
|
||||
);
|
||||
_depthFboUniformCache.ModelTransform = _depthFboProgramObject->uniformLocation(
|
||||
"ModelTransform"
|
||||
);
|
||||
}
|
||||
|
||||
_time = data.time.j2000Seconds();
|
||||
@@ -336,8 +421,14 @@ void RenderableModelProjection::imageProjectGPU(
|
||||
if (_projectionComponent.needsShadowMap()) {
|
||||
_projectionComponent.depthMapRenderBegin();
|
||||
_depthFboProgramObject->activate();
|
||||
_depthFboProgramObject->setUniform("ProjectorMatrix", _projectorMatrix);
|
||||
_depthFboProgramObject->setUniform("ModelTransform", _transform);
|
||||
_depthFboProgramObject->setUniform(
|
||||
_depthFboUniformCache.ProjectorMatrix,
|
||||
_projectorMatrix
|
||||
);
|
||||
_depthFboProgramObject->setUniform(
|
||||
_depthFboUniformCache.ModelTransform,
|
||||
_transform
|
||||
);
|
||||
_geometry->setUniforms(*_fboProgramObject);
|
||||
|
||||
_geometry->render();
|
||||
@@ -352,9 +443,12 @@ void RenderableModelProjection::imageProjectGPU(
|
||||
ghoul::opengl::TextureUnit unitFbo;
|
||||
unitFbo.activate();
|
||||
projectionTexture->bind();
|
||||
_fboProgramObject->setUniform("projectionTexture", unitFbo);
|
||||
_fboProgramObject->setUniform(_fboUniformCache.projectionTexture, unitFbo);
|
||||
|
||||
_fboProgramObject->setUniform("needShadowMap", _projectionComponent.needsShadowMap());
|
||||
_fboProgramObject->setUniform(
|
||||
_fboUniformCache.needShadowMap,
|
||||
_projectionComponent.needsShadowMap()
|
||||
);
|
||||
|
||||
ghoul::opengl::TextureUnit unitDepthFbo;
|
||||
if (_projectionComponent.needsShadowMap()) {
|
||||
@@ -363,9 +457,9 @@ void RenderableModelProjection::imageProjectGPU(
|
||||
_fboProgramObject->setUniform("depthTexture", unitDepthFbo);
|
||||
}
|
||||
|
||||
_fboProgramObject->setUniform("ProjectorMatrix", _projectorMatrix);
|
||||
_fboProgramObject->setUniform("ModelTransform", _transform);
|
||||
_fboProgramObject->setUniform("boresight", _boresight);
|
||||
_fboProgramObject->setUniform(_fboUniformCache.ProjectorMatrix, _projectorMatrix);
|
||||
_fboProgramObject->setUniform(_fboUniformCache.ModelTransform, _transform);
|
||||
_fboProgramObject->setUniform(_fboUniformCache.boresight, _boresight);
|
||||
|
||||
_geometry->setUniforms(*_fboProgramObject);
|
||||
_geometry->render();
|
||||
|
||||
Reference in New Issue
Block a user