Blender V5.0
wm_surface.cc
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2023 Blender Authors
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
8
9#include "BLI_listbase.h"
10#ifndef NDEBUG
11# include "BLI_threads.h"
12#endif
13
14#include "GPU_context.hh"
15#include "GPU_framebuffer.hh"
16
17#include "MEM_guardedalloc.h"
18
19#include "WM_api.hh"
20#include "WM_types.hh"
21
22#include "wm_surface.hh"
23
24static ListBase global_surface_list = {nullptr, nullptr};
25static wmSurface *g_drawable = nullptr;
26
28{
29 /* Mutable iterator in case a surface is freed. */
31 cb(C, surf);
32 }
33}
34
36{
37 if (surface->do_depsgraph) {
38 surface->do_depsgraph(C);
39 }
40}
41
46
48{
49 if (g_drawable) {
50 WM_system_gpu_context_release(g_drawable->system_gpu_context);
52
53 if (g_drawable->deactivate) {
54 g_drawable->deactivate();
55 }
56
57 g_drawable = nullptr;
58 }
59}
60
62{
63 BLI_assert(ELEM(g_drawable, nullptr, surface));
64
65 g_drawable = surface;
66 if (activate) {
67 if (surface->activate) {
68 surface->activate();
69 }
71 }
72
74}
75
85
96
98{
100}
101
103{
105 /* Ensure GPU context is bound to free GPU resources. */
107 surface->free_data(surface);
109 MEM_freeN(surface);
110}
111
#define BLI_assert(a)
Definition BLI_assert.h:46
BLI_INLINE bool BLI_listbase_is_empty(const ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:111
void BLI_remlink(ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:131
int BLI_thread_is_main(void)
Definition threads.cc:179
#define ELEM(...)
void GPU_context_active_set(GPUContext *)
blender::gpu::FrameBuffer * GPU_framebuffer_back_get()
blender::gpu::FrameBuffer * GPU_framebuffer_active_get()
Read Guarded memory(de)allocation.
#define C
Definition RandGen.cpp:29
void activate(bool forceActivation=false) const
void MEM_freeN(void *vmemh)
Definition mallocn.cc:113
void(* activate)()
Definition wm_surface.hh:35
GPUContext * blender_gpu_context
Definition wm_surface.hh:24
GHOST_ContextHandle system_gpu_context
Definition wm_surface.hh:23
void(* do_depsgraph)(bContext *C)
Definition wm_surface.hh:30
void(* free_data)(wmSurface *)
Definition wm_surface.hh:32
void wm_surface_set_drawable(wmSurface *surface, bool activate)
Definition wm_surface.cc:61
static ListBase global_surface_list
Definition wm_surface.cc:24
void wm_surface_add(wmSurface *surface)
Definition wm_surface.cc:97
void wm_surface_remove(wmSurface *surface)
void wm_surfaces_free()
void wm_surfaces_do_depsgraph(bContext *C)
Definition wm_surface.cc:42
static void wm_surface_do_depsgraph_fn(bContext *C, wmSurface *surface)
Definition wm_surface.cc:35
static wmSurface * g_drawable
Definition wm_surface.cc:25
void wm_surface_reset_drawable()
Definition wm_surface.cc:86
void wm_surface_make_drawable(wmSurface *surface)
Definition wm_surface.cc:76
void wm_surface_clear_drawable()
Definition wm_surface.cc:47
void wm_surfaces_iter(bContext *C, void(*cb)(bContext *C, wmSurface *))
Definition wm_surface.cc:27
void WM_system_gpu_context_activate(void *context)
void WM_system_gpu_context_release(void *context)