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:
Clément Foucault 2020-10-09 16:33:24 +02:00
parent d39043b5ae
commit 14c53c5018
2 changed files with 22 additions and 11 deletions

View File

@ -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)

View File

@ -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);
}