Revert "BGL: Workaround broken bgl usage caused by GPU refactor"
This reverts commit f12b0373f3
.
This commit is contained in:
parent
479dc766b5
commit
f23bf4cb10
Notes:
blender-bot
2023-02-14 09:38:57 +01:00
Referenced by commit d39043b5ae
, Revert "Revert "BGL: Workaround broken bgl usage caused by GPU refactor""
|
@ -281,7 +281,7 @@ void ED_region_draw_cb_draw(const bContext *C, ARegion *region, int type)
|
|||
}
|
||||
if (has_drawn_something) {
|
||||
/* This is needed until we get rid of BGL which can change the states we are tracking. */
|
||||
GPU_bgl_end();
|
||||
GPU_force_state();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -161,10 +161,7 @@ float GPU_line_width_get(void);
|
|||
void GPU_flush(void);
|
||||
void GPU_finish(void);
|
||||
void GPU_apply_state(void);
|
||||
|
||||
void GPU_bgl_start(void);
|
||||
void GPU_bgl_end(void);
|
||||
bool GPU_bgl_get(void);
|
||||
void GPU_force_state(void);
|
||||
|
||||
void GPU_memory_barrier(eGPUBarrier barrier);
|
||||
|
||||
|
|
|
@ -317,39 +317,10 @@ void GPU_apply_state(void)
|
|||
Context::get()->state_manager->apply_state();
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/** \name BGL workaround
|
||||
*
|
||||
* bgl makes direct GL calls that makes our state tracking out of date.
|
||||
* This flag make it so that the pyGPU calls will not override the state set by
|
||||
* bgl functions.
|
||||
* \{ */
|
||||
|
||||
void GPU_bgl_start(void)
|
||||
/* Will set all the states regardless of the current ones. */
|
||||
void GPU_force_state(void)
|
||||
{
|
||||
StateManager &state_manager = *(Context::get()->state_manager);
|
||||
if (state_manager.use_bgl == false) {
|
||||
/* Expected by many addons (see T80169, T81289).
|
||||
* This will reset the blend function. */
|
||||
GPU_blend(GPU_BLEND_NONE);
|
||||
state_manager.apply_state();
|
||||
state_manager.use_bgl = true;
|
||||
}
|
||||
}
|
||||
|
||||
void GPU_bgl_end(void)
|
||||
{
|
||||
StateManager &state_manager = *(Context::get()->state_manager);
|
||||
state_manager.use_bgl = false;
|
||||
/* Resync state tracking. */
|
||||
state_manager.force_state();
|
||||
}
|
||||
|
||||
bool GPU_bgl_get(void)
|
||||
{
|
||||
return Context::get()->state_manager->use_bgl;
|
||||
Context::get()->state_manager->force_state();
|
||||
}
|
||||
|
||||
/** \} */
|
||||
|
|
|
@ -153,7 +153,6 @@ class StateManager {
|
|||
public:
|
||||
GPUState state;
|
||||
GPUStateMutable mutable_state;
|
||||
bool use_bgl = false;
|
||||
|
||||
public:
|
||||
StateManager();
|
||||
|
|
|
@ -200,7 +200,7 @@ void check_gl_error(const char *info)
|
|||
|
||||
void check_gl_resources(const char *info)
|
||||
{
|
||||
if (!(G.debug & G_DEBUG_GPU) || GPU_bgl_get()) {
|
||||
if (!(G.debug & G_DEBUG_GPU)) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -73,17 +73,13 @@ GLStateManager::GLStateManager(void) : StateManager()
|
|||
|
||||
void GLStateManager::apply_state(void)
|
||||
{
|
||||
if (!this->use_bgl) {
|
||||
this->set_state(this->state);
|
||||
this->set_mutable_state(this->mutable_state);
|
||||
this->texture_bind_apply();
|
||||
this->image_bind_apply();
|
||||
}
|
||||
/* This is needed by gpu_py_offscreen. */
|
||||
this->set_state(this->state);
|
||||
this->set_mutable_state(this->mutable_state);
|
||||
this->texture_bind_apply();
|
||||
this->image_bind_apply();
|
||||
active_fb->apply_state();
|
||||
};
|
||||
|
||||
/* Will set all the states regardless of the current ones. */
|
||||
void GLStateManager::force_state(void)
|
||||
{
|
||||
/* Little exception for clip distances since they need to keep the old count correct. */
|
||||
|
|
|
@ -29,8 +29,6 @@
|
|||
#include "BLI_utildefines.h"
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "GPU_state.h"
|
||||
|
||||
#include "../generic/py_capi_utils.h"
|
||||
|
||||
#include "glew-mx.h"
|
||||
|
@ -1111,7 +1109,6 @@ static PyObject *Buffer_repr(Buffer *self)
|
|||
if (!PyArg_ParseTuple(args, arg_str arg_list, arg_ref arg_list)) { \
|
||||
return NULL; \
|
||||
} \
|
||||
GPU_bgl_start(); \
|
||||
ret_set_##ret gl##funcname(arg_var arg_list); \
|
||||
ret_ret_##ret; \
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue