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 |