diff options
author | Arisotura <thetotalworm@gmail.com> | 2019-05-26 00:52:11 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-05-26 00:52:11 +0200 |
commit | 23eccc943973e32a0c0bb367a4b2ba19d8e54030 (patch) | |
tree | 1bedf83ae85b51c5321d5f1d8bec4be311812152 /src/libui_sdl/libui/unix/area.c | |
parent | 99dbbb0b0464d91ed07ffd67c0b6ef83bc6a293e (diff) | |
parent | ebad773a3881f31ab668cc0cbea89cc34f5cd2b7 (diff) |
Merge pull request #412 from PoroCYon/master
Make OpenGL renderer work on Linux
Diffstat (limited to 'src/libui_sdl/libui/unix/area.c')
-rw-r--r-- | src/libui_sdl/libui/unix/area.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/src/libui_sdl/libui/unix/area.c b/src/libui_sdl/libui/unix/area.c index 2da9bab..e518ae5 100644 --- a/src/libui_sdl/libui/unix/area.c +++ b/src/libui_sdl/libui/unix/area.c @@ -38,7 +38,10 @@ struct uiArea { GtkWidget *areaWidget; GtkDrawingArea *drawingArea; + GtkGLArea *glArea; areaWidget *area; + + GdkGLContext *glContext; int bgR, bgG, bgB; @@ -730,6 +733,44 @@ uiArea *uiNewArea(uiAreaHandler *ah) return a; } +uiArea *uiNewGLArea(uiAreaHandler *ah, const unsigned int* req_versions) +{ + uiArea *a; + + uiUnixNewControl(uiArea, a); + + a->ah = ah; + a->scrolling = FALSE; + + GtkGLArea* gla = (GtkGLArea*)gtk_gl_area_new(); + GdkGLContext* ctx = NULL; + + for (int i = 0; req_versions[i] && !ctx; i++) { + int major = uiGLVerMajor(req_versions[i]); + int minor = uiGLVerMinor(req_versions[i]); + gtk_gl_area_set_required_version(gla, major, minor); + ctx = createGLContext(gla, major, minor); + } + + a->glContext = ctx; + a->areaWidget = GTK_WIDGET(g_object_new(areaWidgetType, "libui-area", + a, NULL)); + a->glArea = gla; + a->area = areaWidget(a->areaWidget); + + a->widget = a->areaWidget; + + uiAreaSetBackgroundColor(a, -1, -1, -1); + + return a; +} + +uiGLContext *uiAreaGetGLContext(uiArea* a) +{ + if (!a) return NULL; + return a->glContext; +} + uiArea *uiNewScrollingArea(uiAreaHandler *ah, int width, int height) { uiArea *a; |