aboutsummaryrefslogtreecommitdiff
path: root/src/libui_sdl/libui/unix/area.c
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2019-05-26 00:52:11 +0200
committerGitHub <noreply@github.com>2019-05-26 00:52:11 +0200
commit23eccc943973e32a0c0bb367a4b2ba19d8e54030 (patch)
tree1bedf83ae85b51c5321d5f1d8bec4be311812152 /src/libui_sdl/libui/unix/area.c
parent99dbbb0b0464d91ed07ffd67c0b6ef83bc6a293e (diff)
parentebad773a3881f31ab668cc0cbea89cc34f5cd2b7 (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.c41
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;