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-09-12 18:29:37 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-09-12 18:29:37 +0300
commitbf3f4da9472516be12dcc69740fa69b6d72f1274 (patch)
tree8e8eaaee61d0570026c46eeeb8ea882146b04ca7 /source/blender/gpu/opengl
parent6bc0a8424e9b794accf70534ed55478337f0e3e3 (diff)
GPU: Fix wrong state before python callbacks
This was caused by a missing state apply. We force the GPUState to be set after the callbacks to avoid desync between our state tracker and the real gl state. This fixes some issues but a better general fix for all BGL would be better. This fix T80297 2.91 texture alpha is not transparent
Diffstat (limited to 'source/blender/gpu/opengl')
-rw-r--r--source/blender/gpu/opengl/gl_state.cc11
-rw-r--r--source/blender/gpu/opengl/gl_state.hh1
2 files changed, 12 insertions, 0 deletions
diff --git a/source/blender/gpu/opengl/gl_state.cc b/source/blender/gpu/opengl/gl_state.cc
index 3c577bf1ccd..cd24fa0e0e4 100644
--- a/source/blender/gpu/opengl/gl_state.cc
+++ b/source/blender/gpu/opengl/gl_state.cc
@@ -80,6 +80,17 @@ void GLStateManager::apply_state(void)
active_fb->apply_state();
};
+void GLStateManager::force_state(void)
+{
+ /* Little exception for clip distances since they need to keep the old count correct. */
+ uint32_t clip_distances = current_.clip_distances;
+ current_ = ~this->state;
+ current_.clip_distances = clip_distances;
+ current_mutable_ = ~this->mutable_state;
+ this->set_state(this->state);
+ this->set_mutable_state(this->mutable_state);
+};
+
void GLStateManager::set_state(const GPUState &state)
{
GPUState changed = state ^ current_;
diff --git a/source/blender/gpu/opengl/gl_state.hh b/source/blender/gpu/opengl/gl_state.hh
index b98c4b300f3..cab654006c6 100644
--- a/source/blender/gpu/opengl/gl_state.hh
+++ b/source/blender/gpu/opengl/gl_state.hh
@@ -72,6 +72,7 @@ class GLStateManager : public StateManager {
GLStateManager();
void apply_state(void) override;
+ void force_state(void) override;
void issue_barrier(eGPUBarrier barrier_bits) override;