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.
This commit is contained in:
parent
6624c4c225
commit
fafc1fbd7f
Notes:
blender-bot
2023-05-22 12:40:41 +02:00
Referenced by issue #80107, Inconsistency in selecting occluded objects with Box selection
|
@ -2409,24 +2409,22 @@ void DRW_draw_select_loop(struct Depsgraph *depsgraph,
|
|||
|
||||
DRW_hair_update();
|
||||
|
||||
DRW_state_lock(DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_ALWAYS | DRW_STATE_DEPTH_LESS_EQUAL |
|
||||
DRW_STATE_DEPTH_EQUAL | DRW_STATE_DEPTH_GREATER | DRW_STATE_DEPTH_ALWAYS);
|
||||
|
||||
/* Only 1-2 passes. */
|
||||
while (true) {
|
||||
if (!select_pass_fn(DRW_SELECT_PASS_PRE, select_pass_user_data)) {
|
||||
break;
|
||||
}
|
||||
DRW_state_lock(DRW_STATE_WRITE_DEPTH | DRW_STATE_DEPTH_TEST_ENABLED);
|
||||
|
||||
drw_engines_draw_scene();
|
||||
|
||||
DRW_state_lock(0);
|
||||
|
||||
if (!select_pass_fn(DRW_SELECT_PASS_POST, select_pass_user_data)) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
DRW_state_lock(0);
|
||||
|
||||
DRW_state_reset();
|
||||
drw_engines_disable();
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue