Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClément Foucault <foucault.clem@gmail.com>2020-08-09 01:52:45 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-08-13 15:20:23 +0300
commit854c999d827cfb78938c3b4605707b891092d001 (patch)
tree6d066bbaa52689ddb6c5b4bcd692ab3e4da03dcb /source/blender/gpu/intern/gpu_shader.cc
parent186abf7d3bab9ed8b905c6914de02427bb2547cf (diff)
GPUShader: Change shader state tracking to be part of the GPUContext
This remove the use of batch->program and replace it with batch->shader. This will allow GL abstraction latter.
Diffstat (limited to 'source/blender/gpu/intern/gpu_shader.cc')
-rw-r--r--source/blender/gpu/intern/gpu_shader.cc16
1 files changed, 13 insertions, 3 deletions
diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc
index 03b7d5402f5..07b4139eadc 100644
--- a/source/blender/gpu/intern/gpu_shader.cc
+++ b/source/blender/gpu/intern/gpu_shader.cc
@@ -42,6 +42,7 @@
#include "GPU_texture.h"
#include "GPU_uniformbuffer.h"
+#include "gpu_context_private.hh"
#include "gpu_shader_private.h"
extern "C" char datatoc_gpu_shader_colorspace_lib_glsl[];
@@ -598,14 +599,23 @@ void GPU_shader_bind(GPUShader *shader)
{
BLI_assert(shader && shader->program);
- glUseProgram(shader->program);
- GPU_matrix_bind(shader->interface);
- GPU_shader_set_srgb_uniform(shader->interface);
+ GPUContext *ctx = GPU_context_active_get();
+
+ if (ctx->shader != shader) {
+ ctx->shader = shader;
+ glUseProgram(shader->program);
+ GPU_matrix_bind(shader->interface);
+ GPU_shader_set_srgb_uniform(shader->interface);
+ }
}
void GPU_shader_unbind(void)
{
+#ifndef NDEBUG
+ GPUContext *ctx = GPU_context_active_get();
+ ctx->shader = NULL;
glUseProgram(0);
+#endif
}
/** \} */