Blender V4.3
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
9#include "BLI_listbase.h"
10#ifndef NDEBUG
11# include "BLI_threads.h"
12#endif
13
14#include "GHOST_C-api.h"
15
16#include "GPU_context.hh"
17#include "GPU_framebuffer.hh"
18
19#include "MEM_guardedalloc.h"
20
21#include "WM_api.hh"
22#include "WM_types.hh"
23
24#include "wm_surface.hh"
25
26static ListBase global_surface_list = {nullptr, nullptr};
27static wmSurface *g_drawable = nullptr;
28
29void wm_surfaces_iter(bContext *C, void (*cb)(bContext *C, wmSurface *))
30{
31 /* Mutable iterator in case a surface is freed. */
33 cb(C, surf);
34 }
35}
36
38{
39 if (surface->do_depsgraph) {
40 surface->do_depsgraph(C);
41 }
42}
43
48
62
64{
65 BLI_assert(ELEM(g_drawable, nullptr, surface));
66
67 g_drawable = surface;
68 if (activate) {
69 if (surface->activate) {
70 surface->activate();
71 }
72 WM_system_gpu_context_activate(surface->system_gpu_context);
73 }
74
75 GPU_context_active_set(surface->blender_gpu_context);
76}
77
87
98
100{
102}
103
105{
107 /* Ensure GPU context is bound to free GPU resources. */
109 surface->free_data(surface);
111 MEM_freeN(surface);
112}
113
#define BLI_assert(a)
Definition BLI_assert.h:50
BLI_INLINE bool BLI_listbase_is_empty(const struct ListBase *lb)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void BLI_addtail(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:110
void BLI_remlink(struct ListBase *listbase, void *vlink) ATTR_NONNULL(1)
Definition listbase.cc:130
int BLI_thread_is_main(void)
Definition threads.cc:179
#define ELEM(...)
GHOST C-API function and type declarations.
void GPU_context_active_set(GPUContext *)
GPUFrameBuffer * GPU_framebuffer_active_get()
GPUFrameBuffer * GPU_framebuffer_back_get()
Read Guarded memory(de)allocation.
void activate(bool forceActivation=false) const
void MEM_freeN(void *vmemh)
Definition mallocn.cc:105
void(* activate)()
Definition wm_surface.hh:33
GHOST_ContextHandle system_gpu_context
Definition wm_surface.hh:21
void(* deactivate)()
Definition wm_surface.hh:35
void wm_surface_set_drawable(wmSurface *surface, bool activate)
Definition wm_surface.cc:63
static ListBase global_surface_list
Definition wm_surface.cc:26
void wm_surface_add(wmSurface *surface)
Definition wm_surface.cc:99
void wm_surface_remove(wmSurface *surface)
void wm_surfaces_free()
void wm_surfaces_do_depsgraph(bContext *C)
Definition wm_surface.cc:44
static void wm_surface_do_depsgraph_fn(bContext *C, wmSurface *surface)
Definition wm_surface.cc:37
static wmSurface * g_drawable
Definition wm_surface.cc:27
void wm_surface_reset_drawable()
Definition wm_surface.cc:88
void wm_surface_make_drawable(wmSurface *surface)
Definition wm_surface.cc:78
void wm_surface_clear_drawable()
Definition wm_surface.cc:49
void wm_surfaces_iter(bContext *C, void(*cb)(bContext *C, wmSurface *))
Definition wm_surface.cc:29
void WM_system_gpu_context_activate(void *context)
void WM_system_gpu_context_release(void *context)