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:
Diffstat (limited to 'source/blender/gpu/intern/gpu_shader.cc')
-rw-r--r--source/blender/gpu/intern/gpu_shader.cc24
1 files changed, 20 insertions, 4 deletions
diff --git a/source/blender/gpu/intern/gpu_shader.cc b/source/blender/gpu/intern/gpu_shader.cc
index bb657ff1645..aea27756708 100644
--- a/source/blender/gpu/intern/gpu_shader.cc
+++ b/source/blender/gpu/intern/gpu_shader.cc
@@ -57,6 +57,8 @@ static CLG_LogRef LOG = {"gpu.shader"};
using namespace blender;
using namespace blender::gpu;
+static bool gpu_shader_srgb_uniform_dirty_get();
+
/* -------------------------------------------------------------------- */
/** \name Debug functions
* \{ */
@@ -501,9 +503,13 @@ void GPU_shader_bind(GPUShader *gpu_shader)
GPU_matrix_bind(gpu_shader);
GPU_shader_set_srgb_uniform(gpu_shader);
}
-
- if (GPU_matrix_dirty_get()) {
- GPU_matrix_bind(gpu_shader);
+ else {
+ if (gpu_shader_srgb_uniform_dirty_get()) {
+ GPU_shader_set_srgb_uniform(gpu_shader);
+ }
+ if (GPU_matrix_dirty_get()) {
+ GPU_matrix_bind(gpu_shader);
+ }
}
}
@@ -715,6 +721,12 @@ void GPU_shader_uniform_4fv_array(GPUShader *sh, const char *name, int len, cons
* \{ */
static int g_shader_builtin_srgb_transform = 0;
+static bool g_shader_builtin_srgb_is_dirty = false;
+
+static bool gpu_shader_srgb_uniform_dirty_get()
+{
+ return g_shader_builtin_srgb_is_dirty;
+}
void GPU_shader_set_srgb_uniform(GPUShader *shader)
{
@@ -722,11 +734,15 @@ void GPU_shader_set_srgb_uniform(GPUShader *shader)
if (loc != -1) {
GPU_shader_uniform_vector_int(shader, loc, 1, 1, &g_shader_builtin_srgb_transform);
}
+ g_shader_builtin_srgb_is_dirty = false;
}
void GPU_shader_set_framebuffer_srgb_target(int use_srgb_to_linear)
{
- g_shader_builtin_srgb_transform = use_srgb_to_linear;
+ if (g_shader_builtin_srgb_transform != use_srgb_to_linear) {
+ g_shader_builtin_srgb_transform = use_srgb_to_linear;
+ g_shader_builtin_srgb_is_dirty = true;
+ }
}
/** \} */