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:
@@ -329,22 +329,28 @@ void GPU_apply_state(void)
|
|||||||
|
|
||||||
void GPU_bgl_start(void)
|
void GPU_bgl_start(void)
|
||||||
{
|
{
|
||||||
StateManager &state_manager = *(Context::get()->state_manager);
|
Context *ctx = Context::get();
|
||||||
if (state_manager.use_bgl == false) {
|
if (ctx && ctx->state_manager) {
|
||||||
/* Expected by many addons (see T80169, T81289).
|
StateManager &state_manager = *(Context::get()->state_manager);
|
||||||
* This will reset the blend function. */
|
if (state_manager.use_bgl == false) {
|
||||||
GPU_blend(GPU_BLEND_NONE);
|
/* Expected by many addons (see T80169, T81289).
|
||||||
state_manager.apply_state();
|
* This will reset the blend function. */
|
||||||
state_manager.use_bgl = true;
|
GPU_blend(GPU_BLEND_NONE);
|
||||||
|
state_manager.apply_state();
|
||||||
|
state_manager.use_bgl = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GPU_bgl_end(void)
|
void GPU_bgl_end(void)
|
||||||
{
|
{
|
||||||
StateManager &state_manager = *(Context::get()->state_manager);
|
Context *ctx = Context::get();
|
||||||
state_manager.use_bgl = false;
|
if (ctx && ctx->state_manager) {
|
||||||
/* Resync state tracking. */
|
StateManager &state_manager = *ctx->state_manager;
|
||||||
state_manager.force_state();
|
state_manager.use_bgl = false;
|
||||||
|
/* Resync state tracking. */
|
||||||
|
state_manager.force_state();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GPU_bgl_get(void)
|
bool GPU_bgl_get(void)
|
||||||
|
|||||||
@@ -35,6 +35,8 @@
|
|||||||
#include "RNA_access.h"
|
#include "RNA_access.h"
|
||||||
#include "RNA_types.h"
|
#include "RNA_types.h"
|
||||||
|
|
||||||
|
#include "GPU_state.h"
|
||||||
|
|
||||||
#include "bpy.h"
|
#include "bpy.h"
|
||||||
#include "bpy_app.h"
|
#include "bpy_app.h"
|
||||||
#include "bpy_capi_utils.h"
|
#include "bpy_capi_utils.h"
|
||||||
@@ -330,6 +332,9 @@ static PyMethodDef meth_bpy_escape_identifier = {
|
|||||||
static PyObject *bpy_import_test(const char *modname)
|
static PyObject *bpy_import_test(const char *modname)
|
||||||
{
|
{
|
||||||
PyObject *mod = PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0);
|
PyObject *mod = PyImport_ImportModuleLevel(modname, NULL, NULL, NULL, 0);
|
||||||
|
|
||||||
|
GPU_bgl_end();
|
||||||
|
|
||||||
if (mod) {
|
if (mod) {
|
||||||
Py_DECREF(mod);
|
Py_DECREF(mod);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user