BACKENDS: OPENGL: Hide active pipeline and activate it as needed

This removes the idea of global pipeline.
The activePipeline is kept for pipeline lifecycle management only.
This commit is contained in:
Le Philousophe 2022-10-31 11:54:14 +01:00
parent 239c115249
commit 6632e909da
10 changed files with 70 additions and 70 deletions

View file

@ -27,11 +27,19 @@ namespace OpenGL {
Pipeline *Pipeline::activePipeline = nullptr;
Pipeline::Pipeline()
: _activeFramebuffer(nullptr), _isActive(false) {
: _activeFramebuffer(nullptr) {
}
void Pipeline::activate() {
_isActive = true;
if (activePipeline == this) {
return;
}
if (activePipeline) {
activePipeline->deactivate();
}
activePipeline = this;
if (_activeFramebuffer) {
_activeFramebuffer->activate(this);
@ -41,41 +49,29 @@ void Pipeline::activate() {
}
void Pipeline::deactivate() {
assert(isActive());
deactivateInternal();
if (_activeFramebuffer) {
_activeFramebuffer->deactivate();
}
_isActive = false;
activePipeline = nullptr;
}
Framebuffer *Pipeline::setFramebuffer(Framebuffer *framebuffer) {
Framebuffer *oldFramebuffer = _activeFramebuffer;
if (_isActive && oldFramebuffer) {
if (isActive() && oldFramebuffer) {
oldFramebuffer->deactivate();
}
_activeFramebuffer = framebuffer;
if (_isActive && _activeFramebuffer) {
if (isActive() && _activeFramebuffer) {
_activeFramebuffer->activate(this);
}
return oldFramebuffer;
}
Pipeline *Pipeline::setPipeline(Pipeline *pipeline) {
Pipeline *oldPipeline = activePipeline;
if (oldPipeline) {
oldPipeline->deactivate();
}
activePipeline = pipeline;
if (activePipeline) {
activePipeline->activate();
}
return oldPipeline;
}
} // End of namespace OpenGL