summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Franzke <benjaminfranzke@googlemail.com>2010-12-08 00:57:58 +0100
committerBenjamin Franzke <benjaminfranzke@googlemail.com>2012-02-28 08:29:09 +0100
commit53d82587fc031d2847f993fdd4d2dfd3fe565f00 (patch)
tree7bf93c545c36331a52255983d7e04ea5baad11ed
parentbbc736a4e86bf6a9c50167d61f3e858415c13701 (diff)
wayland: Add support for a depth buffer
-rw-r--r--src/video/wayland/SDL_waylandgl.c19
-rw-r--r--src/video/wayland/SDL_waylandwindow.c3
-rw-r--r--src/video/wayland/SDL_waylandwindow.h4
3 files changed, 18 insertions, 8 deletions
diff --git a/src/video/wayland/SDL_waylandgl.c b/src/video/wayland/SDL_waylandgl.c
index dac3a9d7..6006c531 100644
--- a/src/video/wayland/SDL_waylandgl.c
+++ b/src/video/wayland/SDL_waylandgl.c
@@ -14,7 +14,7 @@ void Wayland_GL_SwapWindow(_THIS, SDL_Window * window)
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT,
- data->rbo[data->current]);
+ data->color_rbo[data->current]);
wl_surface_attach(data->surface,
data->buffer[data->current ^ 1]);
@@ -36,13 +36,22 @@ Wayland_GL_MakeCurrent(_THIS, SDL_Window *window, SDL_GLContext context)
return -1;
}
-
glGenFramebuffers(1, &data->fbo);
glBindFramebuffer(GL_FRAMEBUFFER_EXT, data->fbo);
- glGenRenderbuffers(2, wind->rbo);
+ glGenRenderbuffers(1, &wind->depth_rbo);
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, wind->depth_rbo);
+ glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER_EXT,
+ GL_DEPTH_ATTACHMENT_EXT,
+ GL_RENDERBUFFER_EXT,
+ wind->depth_rbo);
+ glRenderbufferStorage(GL_RENDERBUFFER_EXT,
+ GL_DEPTH_COMPONENT,
+ wind->sdlwindow->w, wind->sdlwindow->h);
+
+ glGenRenderbuffers(2, wind->color_rbo);
for (i = 0; i < 2; ++i) {
- glBindRenderbuffer(GL_RENDERBUFFER_EXT, wind->rbo[i]);
+ glBindRenderbuffer(GL_RENDERBUFFER_EXT, wind->color_rbo[i]);
glEGLImageTargetRenderbufferStorageOES(GL_RENDERBUFFER_EXT,
wind->image[i]);
}
@@ -51,7 +60,7 @@ Wayland_GL_MakeCurrent(_THIS, SDL_Window *window, SDL_GLContext context)
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER_EXT,
GL_COLOR_ATTACHMENT0_EXT,
GL_RENDERBUFFER_EXT,
- wind->rbo[wind->current]);
+ wind->color_rbo[wind->current]);
printf("framebuffer complete: %d\n",
glCheckFramebufferStatus(GL_FRAMEBUFFER_EXT) == GL_FRAMEBUFFER_COMPLETE);
diff --git a/src/video/wayland/SDL_waylandwindow.c b/src/video/wayland/SDL_waylandwindow.c
index f0cefd72..80b6376b 100644
--- a/src/video/wayland/SDL_waylandwindow.c
+++ b/src/video/wayland/SDL_waylandwindow.c
@@ -95,7 +95,8 @@ void Wayland_DestroyWindow(_THIS, SDL_Window * window)
if (data) {
d = data->waylandData;
- glDeleteRenderbuffers(2, data->rbo);
+ glDeleteRenderbuffers(1, &data->depth_rbo);
+ glDeleteRenderbuffers(2, data->color_rbo);
for (i = 0; i < 2; ++i) {
wl_buffer_destroy(data->buffer[i]);
eglDestroyImageKHR(d->edpy, data->image[i]);
diff --git a/src/video/wayland/SDL_waylandwindow.h b/src/video/wayland/SDL_waylandwindow.h
index 05295048..88cd6b37 100644
--- a/src/video/wayland/SDL_waylandwindow.h
+++ b/src/video/wayland/SDL_waylandwindow.h
@@ -15,8 +15,8 @@ typedef struct
struct wl_buffer *buffer[2];
EGLImageKHR image[2];
- GLuint rbo[2];
- uint32_t fb_id[2];
+ GLuint color_rbo[2];
+ GLuint depth_rbo;
uint32_t current;
struct SDL_WaylandInput *keyboard_device;