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-16 02:32:04 +0300
committerClément Foucault <foucault.clem@gmail.com>2020-09-16 02:40:45 +0300
commitfafc1fbd7fb36e284fbcbd8aa9060dd96c48d4e6 (patch)
tree8d40b3b4b9c1138f800c2640866f17ce8e8a6fd4 /source/blender/draw/intern/draw_manager_exec.c
parent6624c4c225142742082c2d89f3f72ee937616864 (diff)
Fix T80107 Selection: Regression in Box selection
The Draw State now needs to be in sync with what the selection code set. We query the state just before locking it.
Diffstat (limited to 'source/blender/draw/intern/draw_manager_exec.c')
-rw-r--r--source/blender/draw/intern/draw_manager_exec.c32
1 files changed, 32 insertions, 0 deletions
diff --git a/source/blender/draw/intern/draw_manager_exec.c b/source/blender/draw/intern/draw_manager_exec.c
index 84f618c1c15..444ecbc1e54 100644
--- a/source/blender/draw/intern/draw_manager_exec.c
+++ b/source/blender/draw/intern/draw_manager_exec.c
@@ -294,6 +294,38 @@ static void drw_state_validate(void)
void DRW_state_lock(DRWState state)
{
DST.state_lock = state;
+
+ /* We must get the current state to avoid overriding it. */
+ /* Not complete, but that just what we need for now. */
+ if (state & DRW_STATE_WRITE_DEPTH) {
+ SET_FLAG_FROM_TEST(DST.state, GPU_depth_mask_get(), DRW_STATE_WRITE_DEPTH);
+ }
+ if (state & DRW_STATE_DEPTH_TEST_ENABLED) {
+ DST.state &= ~DRW_STATE_DEPTH_TEST_ENABLED;
+
+ switch (GPU_depth_test_get()) {
+ case GPU_DEPTH_ALWAYS:
+ DST.state |= DRW_STATE_DEPTH_ALWAYS;
+ break;
+ case GPU_DEPTH_LESS:
+ DST.state |= DRW_STATE_DEPTH_LESS;
+ break;
+ case GPU_DEPTH_LESS_EQUAL:
+ DST.state |= DRW_STATE_DEPTH_LESS_EQUAL;
+ break;
+ case GPU_DEPTH_EQUAL:
+ DST.state |= DRW_STATE_DEPTH_EQUAL;
+ break;
+ case GPU_DEPTH_GREATER:
+ DST.state |= DRW_STATE_DEPTH_GREATER;
+ break;
+ case GPU_DEPTH_GREATER_EQUAL:
+ DST.state |= DRW_STATE_DEPTH_GREATER_EQUAL;
+ break;
+ default:
+ break;
+ }
+ }
}
void DRW_state_reset(void)