From 0ccf3f89d2e2389d433d1ab682ad04310a9b19ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cl=C3=A9ment=20Foucault?= Date: Thu, 6 Aug 2020 04:30:38 +0200 Subject: GPU: Move ghost default framebuffer getter to context creation --- intern/ghost/test/multitest/MultiTest.c | 9 +++------ source/blender/gpu/CMakeLists.txt | 1 + source/blender/gpu/GPU_context.h | 2 +- source/blender/gpu/intern/gpu_context.cc | 12 ++++++++++-- source/blender/windowmanager/intern/wm_playanim.c | 3 +-- source/blender/windowmanager/intern/wm_window.c | 3 +-- 6 files changed, 17 insertions(+), 13 deletions(-) diff --git a/intern/ghost/test/multitest/MultiTest.c b/intern/ghost/test/multitest/MultiTest.c index 5ddcb2470a8..cf7a06bf3e5 100644 --- a/intern/ghost/test/multitest/MultiTest.c +++ b/intern/ghost/test/multitest/MultiTest.c @@ -330,8 +330,7 @@ MainWindow *mainwindow_new(MultiTestApp *app) if (win) { MainWindow *mw = MEM_callocN(sizeof(*mw), "mainwindow_new"); - GLuint default_fb = GHOST_GetDefaultOpenGLFramebuffer(win); - mw->gpu_context = GPU_context_create(default_fb); + mw->gpu_context = GPU_context_create(win); GPU_init(); mw->app = app; @@ -587,8 +586,7 @@ LoggerWindow *loggerwindow_new(MultiTestApp *app) if (win) { LoggerWindow *lw = MEM_callocN(sizeof(*lw), "loggerwindow_new"); - GLuint default_fb = GHOST_GetDefaultOpenGLFramebuffer(win); - lw->gpu_context = GPU_context_create(default_fb); + lw->gpu_context = GPU_context_create(win); GPU_init(); int bbox[2][2]; @@ -788,8 +786,7 @@ ExtraWindow *extrawindow_new(MultiTestApp *app) if (win) { ExtraWindow *ew = MEM_callocN(sizeof(*ew), "mainwindow_new"); - GLuint default_fb = GHOST_GetDefaultOpenGLFramebuffer(win); - ew->gpu_context = GPU_context_create(default_fb); + ew->gpu_context = GPU_context_create(win); GPU_init(); ew->app = app; diff --git a/source/blender/gpu/CMakeLists.txt b/source/blender/gpu/CMakeLists.txt index 3ea18f72166..4e9b4a5b313 100644 --- a/source/blender/gpu/CMakeLists.txt +++ b/source/blender/gpu/CMakeLists.txt @@ -42,6 +42,7 @@ set(INC ../nodes ../nodes/intern + ../../../intern/ghost ../../../intern/glew-mx ../../../intern/guardedalloc ../../../intern/mantaflow/extern diff --git a/source/blender/gpu/GPU_context.h b/source/blender/gpu/GPU_context.h index 4f0edaf3ac8..0d9e1014803 100644 --- a/source/blender/gpu/GPU_context.h +++ b/source/blender/gpu/GPU_context.h @@ -35,7 +35,7 @@ extern "C" { typedef struct GPUContext GPUContext; -GPUContext *GPU_context_create(GLuint default_framebuffer); +GPUContext *GPU_context_create(void *ghost_window); void GPU_context_discard(GPUContext *); void GPU_context_active_set(GPUContext *); diff --git a/source/blender/gpu/intern/gpu_context.cc b/source/blender/gpu/intern/gpu_context.cc index e6356580ea3..c3c0863f6cd 100644 --- a/source/blender/gpu/intern/gpu_context.cc +++ b/source/blender/gpu/intern/gpu_context.cc @@ -34,6 +34,8 @@ #include "GPU_context.h" #include "GPU_framebuffer.h" +#include "GHOST_C-api.h" + #include "gpu_batch_private.h" #include "gpu_context_private.h" #include "gpu_matrix_private.h" @@ -138,12 +140,18 @@ static void orphans_clear(GPUContext *ctx) orphans_mutex.unlock(); } -GPUContext *GPU_context_create(GLuint default_framebuffer) +GPUContext *GPU_context_create(void *ghost_window) { /* BLI_assert(thread_is_main()); */ GPUContext *ctx = new GPUContext; glGenVertexArrays(1, &ctx->default_vao); - ctx->default_framebuffer = default_framebuffer; + if (ghost_window != NULL) { + ctx->default_framebuffer = GHOST_GetDefaultOpenGLFramebuffer((GHOST_WindowHandle)ghost_window); + } + else { + ctx->default_framebuffer = 0; + } + ctx->matrix_state = GPU_matrix_state_create(); GPU_context_active_set(ctx); return ctx; diff --git a/source/blender/windowmanager/intern/wm_playanim.c b/source/blender/windowmanager/intern/wm_playanim.c index d0a70596957..a0a21fadbbb 100644 --- a/source/blender/windowmanager/intern/wm_playanim.c +++ b/source/blender/windowmanager/intern/wm_playanim.c @@ -1293,8 +1293,7 @@ static char *wm_main_playanim_intern(int argc, const char **argv) // GHOST_ActivateWindowDrawingContext(g_WS.ghost_window); /* initialize OpenGL immediate mode */ - GLuint default_fb = GHOST_GetDefaultOpenGLFramebuffer(g_WS.ghost_window); - g_WS.gpu_context = GPU_context_create(default_fb); + g_WS.gpu_context = GPU_context_create(g_WS.ghost_window); GPU_init(); immActivate(); diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c index e0dcd746aea..47afa343394 100644 --- a/source/blender/windowmanager/intern/wm_window.c +++ b/source/blender/windowmanager/intern/wm_window.c @@ -615,8 +615,7 @@ static void wm_window_ghostwindow_add(wmWindowManager *wm, if (ghostwin) { GHOST_RectangleHandle bounds; - GLuint default_fb = GHOST_GetDefaultOpenGLFramebuffer(ghostwin); - win->gpuctx = GPU_context_create(default_fb); + win->gpuctx = GPU_context_create(ghostwin); /* needed so we can detect the graphics card below */ GPU_init(); -- cgit v1.2.3