src/ascension/glcontext.h

changeset 110
29f8d0d586f8
parent 93
52611a99e574
equal deleted inserted replaced
109:08548799ae4a 110:29f8d0d586f8
28 #ifndef ASCENSION_GLCONTEXT_H 28 #ifndef ASCENSION_GLCONTEXT_H
29 #define ASCENSION_GLCONTEXT_H 29 #define ASCENSION_GLCONTEXT_H
30 30
31 #include <SDL2/SDL.h> 31 #include <SDL2/SDL.h>
32 32
33 #include <cx/list.h>
34
33 #include "primitives.h" 35 #include "primitives.h"
34 #include "shader.h" 36 #include "shader.h"
35 #include "texture.h" 37 #include "texture.h"
36
37 #include <cx/mempool.h>
38 38
39 typedef struct AscGLContextSettings { 39 typedef struct AscGLContextSettings {
40 int gl_major_version; 40 int gl_major_version;
41 int gl_minor_version; 41 int gl_minor_version;
42 int vsync; 42 int vsync;
58 ASC_TEXTURE_RECT_COUNT 58 ASC_TEXTURE_RECT_COUNT
59 }; 59 };
60 60
61 typedef struct AscGLContext { 61 typedef struct AscGLContext {
62 SDL_Window *window; 62 SDL_Window *window;
63 CxMempool *mpool;
64 SDL_GLContext glctx; 63 SDL_GLContext glctx;
64 CxList *cleanup_funcs;
65 AscMesh primitives[ASC_PRIMITIVE_COUNT]; 65 AscMesh primitives[ASC_PRIMITIVE_COUNT];
66 AscTexture textures_2d[ASC_TEXTURE_2D_COUNT]; 66 AscTexture textures_2d[ASC_TEXTURE_2D_COUNT];
67 AscTexture textures_rect[ASC_TEXTURE_RECT_COUNT]; 67 AscTexture textures_rect[ASC_TEXTURE_RECT_COUNT];
68 struct { 68 struct {
69 AscShaderSprite sprite; 69 AscShaderSprite sprite;
70 } shader; 70 } shader;
71 } AscGLContext; 71 } AscGLContext;
72 72
73 #define asc_active_glctx (&asc_active_window->glctx) 73 #define asc_active_glctx (&asc_active_window->glctx)
74 #define asc_active_glctx_mpool asc_active_window->glctx.mpool
75 #define ASC_PRIMITIVE_PLANE (&asc_active_glctx->primitives[ASC_PRIMITIVE_PLANE_IDX]) 74 #define ASC_PRIMITIVE_PLANE (&asc_active_glctx->primitives[ASC_PRIMITIVE_PLANE_IDX])
76 #define ASC_TEXTURE_2D_EMPTY_1X1 (&asc_active_glctx->textures_2d[ASC_TEXTURE_2D_EMPTY_1X1_IDX]) 75 #define ASC_TEXTURE_2D_EMPTY_1X1 (&asc_active_glctx->textures_2d[ASC_TEXTURE_2D_EMPTY_1X1_IDX])
77 #define ASC_TEXTURE_RECT_EMPTY_1X1 (&asc_active_glctx->textures_rect[ASC_TEXTURE_RECT_EMPTY_1X1_IDX]) 76 #define ASC_TEXTURE_RECT_EMPTY_1X1 (&asc_active_glctx->textures_rect[ASC_TEXTURE_RECT_EMPTY_1X1_IDX])
78 #define ASC_SHADER_SPRITE (&asc_active_glctx->shader.sprite) 77 #define ASC_SHADER_SPRITE (&asc_active_glctx->shader.sprite)
79 78
90 __attribute__((__nonnull__)) 89 __attribute__((__nonnull__))
91 static inline void asc_gl_context_activate(AscGLContext *ctx) { 90 static inline void asc_gl_context_activate(AscGLContext *ctx) {
92 SDL_GL_MakeCurrent(ctx->window, ctx->glctx); 91 SDL_GL_MakeCurrent(ctx->window, ctx->glctx);
93 } 92 }
94 93
94 void asc_gl_context_add_cleanup_func(AscGLContext *ctx, void(*func)(void));
95 void asc_gl_context_add_cleanup_func2(AscGLContext *ctx, void(*func)(void*), void *memory);
96 void asc_gl_context_add_cleanup_func3(AscGLContext *ctx, void(*func)(void*,void*), void *memory, void *additional_data);
97
95 #endif //ASCENSION_GLCONTEXT_H 98 #endif //ASCENSION_GLCONTEXT_H

mercurial