mirror of
https://github.com/OpenSpace/OpenSpace.git
synced 2026-04-22 19:29:04 -05:00
Issue/525 (#593)
* Add initializeGL and deinitializeGL methods to OpenSpaceModule Call releaseAll from ProgramObjectManager in deinitializeGL to guard against errors when deinitializing assets * Change removeProgramObject function in RenderEngine to take a non-owning pointer instead of a reference to a unique pointer to make it compatible with the ProgramObjectManager Update Ghoul repository * Using ProgramObjectManager in more modules to reduce the number of programs compiled at startup
This commit is contained in:
@@ -24,6 +24,7 @@
|
||||
|
||||
#include <modules/base/rendering/renderablesphericalgrid.h>
|
||||
|
||||
#include <modules/base/basemodule.h>
|
||||
#include <openspace/engine/configurationmanager.h>
|
||||
#include <openspace/engine/openspaceengine.h>
|
||||
#include <openspace/rendering/renderengine.h>
|
||||
@@ -36,6 +37,8 @@
|
||||
#include <ghoul/opengl/programobject.h>
|
||||
|
||||
namespace {
|
||||
constexpr const char* ProgramName = "GridProgram";
|
||||
|
||||
static const openspace::properties::Property::PropertyInfo GridColorInfo = {
|
||||
"GridColor",
|
||||
"Grid Color",
|
||||
@@ -182,10 +185,15 @@ bool RenderableSphericalGrid::isReady() const {
|
||||
}
|
||||
|
||||
void RenderableSphericalGrid::initializeGL() {
|
||||
_gridProgram = OsEng.renderEngine().buildRenderProgram(
|
||||
"GridProgram",
|
||||
absPath("${MODULE_BASE}/shaders/grid_vs.glsl"),
|
||||
absPath("${MODULE_BASE}/shaders/grid_fs.glsl")
|
||||
_gridProgram = BaseModule::ProgramObjectManager.requestProgramObject(
|
||||
ProgramName,
|
||||
[]() -> std::unique_ptr<ghoul::opengl::ProgramObject> {
|
||||
return OsEng.renderEngine().buildRenderProgram(
|
||||
ProgramName,
|
||||
absPath("${MODULE_BASE}/shaders/grid_vs.glsl"),
|
||||
absPath("${MODULE_BASE}/shaders/grid_fs.glsl")
|
||||
);
|
||||
}
|
||||
);
|
||||
|
||||
glGenVertexArrays(1, &_vaoID);
|
||||
@@ -208,6 +216,14 @@ void RenderableSphericalGrid::deinitializeGL() {
|
||||
|
||||
glDeleteBuffers(1, &_iBufferID);
|
||||
_iBufferID = 0;
|
||||
|
||||
BaseModule::ProgramObjectManager.releaseProgramObject(
|
||||
ProgramName,
|
||||
[](ghoul::opengl::ProgramObject* p) {
|
||||
OsEng.renderEngine().removeRenderProgram(p);
|
||||
}
|
||||
);
|
||||
_gridProgram = nullptr;
|
||||
}
|
||||
|
||||
void RenderableSphericalGrid::render(const RenderData& data, RendererTasks&){
|
||||
|
||||
Reference in New Issue
Block a user