BGL: fix issues with addons using BGL at startup
This was an issue for Cycles. This also makes the `GPU_bgl*` functions less fragile by checking for null pointers.
This commit is contained in:
parent
d39043b5ae
commit
14c53c5018
|
@ -329,22 +329,28 @@ void GPU_apply_state(void)
|
|||
|
||||
void GPU_bgl_start(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;
|
||||
Context *ctx = Context::get();
|
||||
if (ctx && ctx->state_manager) {
|
||||
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();
|
||||
Context *ctx = Context::get();
|
||||
if (ctx && ctx->state_manager) {
|
||||
StateManager &state_manager = *ctx->state_manager;
|
||||
state_manager.use_bgl = false;
|
||||
/* Resync state tracking. */
|
||||
state_manager.force_state();
|
||||
}
|
||||
}
|
||||
|
||||
bool GPU_bgl_get(void)
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
#include "RNA_access.h"
|
||||
#include "RNA_types.h"
|
||||
|
||||
#include "GPU_state.h"
|
||||
|
||||
#include "bpy.h"
|
||||
#include "bpy_app.h"
|
||||
#include "bpy_capi_utils.h"
|
||||
|
@ -330,6 +332,9 @@ static PyMethodDef meth_bpy_escape_identifier = {
|
|||
static PyObject *bpy_import_test(const char *modname)
|
||||
{
|
||||
PyObject *mod = PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0);
|
||||
|
||||
GPU_bgl_end();
|
||||
|
||||
if (mod) {
|
||||
Py_DECREF(mod);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue