src/glcontext.c

Wed, 02 Jul 2025 23:21:17 +0200

author
Mike Becker <universe@uap-core.de>
date
Wed, 02 Jul 2025 23:21:17 +0200
changeset 174
0009b982bc7d
parent 149
560772519ff9
permissions
-rw-r--r--

resolve TODOs regarding input.h

a) mouse position must be integer, because it can be negative (though rarely)
b) we should not trade "access complexity" for space in the scancodes array

44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 * Copyright 2023 Mike Becker. All rights reserved.
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
4 *
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 * Redistribution and use in source and binary forms, with or without
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * modification, are permitted provided that the following conditions are met:
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 *
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 * 1. Redistributions of source code must retain the above copyright
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * notice, this list of conditions and the following disclaimer.
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 *
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 * 2. Redistributions in binary form must reproduce the above copyright
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * notice, this list of conditions and the following disclaimer in the
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * documentation and/or other materials provided with the distribution.
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 *
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * POSSIBILITY OF SUCH DAMAGE.
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 */
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 #include "ascension/glcontext.h"
142
27c9bbd765d0 fix includes in glcontext.c
Mike Becker <universe@uap-core.de>
parents: 139
diff changeset
29 #include "ascension/shader.h"
106
895f92cff6b8 bring back error.h to reduce compile dependencies
Mike Becker <universe@uap-core.de>
parents: 105
diff changeset
30 #include "ascension/error.h"
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32 #include <GL/glew.h>
110
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
33 #include <cx/array_list.h>
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
34
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35 static void asc_gl_debug_callback(
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 GLenum source, GLenum type, GLuint id, GLenum severity,
149
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
37 GLsizei length, const GLchar *message,
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
38 __attribute__((__unused__)) const void *userParam
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
39 ) {
92
78ce93fb46e5 apply new logging macros
Mike Becker <universe@uap-core.de>
parents: 90
diff changeset
40 if (type == GL_DEBUG_TYPE_ERROR) {
78ce93fb46e5 apply new logging macros
Mike Becker <universe@uap-core.de>
parents: 90
diff changeset
41 asc_error("OpenGL source = %d, id = %u, type = %d, severity= %d, message = %.*s",
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
42 source, id, type, severity, length, message);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
43 } else {
92
78ce93fb46e5 apply new logging macros
Mike Becker <universe@uap-core.de>
parents: 90
diff changeset
44 asc_dprintf("OpenGL source = %d, id = %u, type = %d, severity= %d, message = %.*s",
78ce93fb46e5 apply new logging macros
Mike Becker <universe@uap-core.de>
parents: 90
diff changeset
45 source, id, type, severity, length, message);
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
46 }
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
47 }
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
48
110
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
49 struct asc_gl_context_cleanup_data {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
50 int type;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
51 union {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
52 void(*f1)(void);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
53 void(*f2)(void*);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
54 void(*f3)(void*, void*);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
55 };
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
56 void *memory;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
57 void *additional_data;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
58 };
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
59
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
60 static void asc_gl_context_cleanup(struct asc_gl_context_cleanup_data *data) {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
61 switch (data->type) {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
62 case 1:
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
63 data->f1();
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
64 break;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
65 case 2:
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
66 data->f2(data->memory);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
67 break;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
68 default:
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
69 data->f3(data->memory, data->additional_data);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
70 break;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
71 }
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
72 }
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
73
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
74 bool asc_gl_context_initialize(
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
75 AscGLContext *ctx,
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
76 SDL_Window *window,
149
560772519ff9 resolve east-west conflict
Mike Becker <universe@uap-core.de>
parents: 144
diff changeset
77 const AscGLContextSettings *settings
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
78 ) {
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
79 SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
80 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, settings->gl_major_version);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
81 SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, settings->gl_minor_version);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
82 SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, settings->depth_size);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
83 SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
84 ctx->glctx = SDL_GL_CreateContext(window);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
85 if (ctx->glctx == NULL) return false;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
86 ctx->window = window;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
87
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
88 glewExperimental = GL_TRUE;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
89 GLenum err = glewInit();
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
90 if (err == GLEW_OK) {
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
91 SDL_GL_SetSwapInterval(settings->vsync);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
92
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
93 glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
94 glEnable(GL_DEBUG_OUTPUT);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
95 glDebugMessageCallback(asc_gl_debug_callback, NULL);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
96
139
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
97 // Create the cleanup functions array
110
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
98 ctx->cleanup_funcs = cxArrayListCreateSimple(sizeof(struct asc_gl_context_cleanup_data), 8);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
99 cxDefineDestructor(ctx->cleanup_funcs, asc_gl_context_cleanup);
93
52611a99e574 add memory pool to gl context
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
100
139
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
101 // Create the shaders array
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
102 ctx->shaders = cxArrayListCreateSimple(CX_STORE_POINTERS, 32);
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
103 cxDefineDestructor(ctx->shaders, asc_shader_free);
144
43636d6a6e25 do not try to use one distinct render group for each different shader
Mike Becker <universe@uap-core.de>
parents: 142
diff changeset
104 ctx->active_program = 0;
139
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
105
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
106 return true;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
107 } else {
92
78ce93fb46e5 apply new logging macros
Mike Becker <universe@uap-core.de>
parents: 90
diff changeset
108 asc_error("glewInit failed: %s", glewGetErrorString(err));
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
109 SDL_GL_DeleteContext(ctx->glctx);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
110 return false;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
111 }
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
112 }
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
113
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
114 void asc_gl_context_destroy(AscGLContext *ctx) {
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
115 if (ctx->glctx == NULL) return;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
116 SDL_GL_MakeCurrent(ctx->window, ctx->glctx);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
117
139
5d655459db85 refactor shader management - resolves #684
Mike Becker <universe@uap-core.de>
parents: 137
diff changeset
118 cxListFree(ctx->shaders);
110
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
119 cxListFree(ctx->cleanup_funcs);
44
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
120
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
121 // destroy the GL context and the window
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
122 SDL_GL_DeleteContext(ctx->glctx);
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
123 ctx->glctx = NULL;
b3da4096c607 create own compilation unit for GL context - fixes shader not being created per context
Mike Becker <universe@uap-core.de>
parents:
diff changeset
124 }
110
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
125
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
126 void asc_gl_context_add_cleanup_func(AscGLContext *ctx, void(*func)(void)) {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
127 struct asc_gl_context_cleanup_data *data = cxListEmplace(ctx->cleanup_funcs);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
128 data->type = 1;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
129 data->f1 = func;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
130 }
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
131
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
132 void asc_gl_context_add_cleanup_func2(AscGLContext *ctx, void(*func)(void*), void *memory) {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
133 struct asc_gl_context_cleanup_data *data = cxListEmplace(ctx->cleanup_funcs);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
134 data->type = 2;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
135 data->f2 = func;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
136 data->memory = memory;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
137 }
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
138
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
139 void asc_gl_context_add_cleanup_func3(AscGLContext *ctx, void(*func)(void*,void*), void *memory, void *additional_data) {
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
140 struct asc_gl_context_cleanup_data *data = cxListEmplace(ctx->cleanup_funcs);
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
141 data->type = 3;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
142 data->f3 = func;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
143 data->memory = memory;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
144 data->additional_data = additional_data;
29f8d0d586f8 replace mempool with custom cleanup functions
Mike Becker <universe@uap-core.de>
parents: 106
diff changeset
145 }

mercurial