diff options
| author | Kristian Høgsberg <krh@bitplanet.net> | 2010-06-14 21:03:11 -0400 |
|---|---|---|
| committer | Kristian Høgsberg <krh@bitplanet.net> | 2010-06-14 21:03:11 -0400 |
| commit | a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a (patch) | |
| tree | e00f44bc067fc3ae0876a6ddc2a63828a0b7313d /compositor.c | |
| parent | Implement resizing from all sides (diff) | |
| download | wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar.gz wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar.bz2 wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar.lz wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar.xz wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.tar.zst wayland-a946821b4fa9e6ebf380aa3f2ca76ca5e48bd27a.zip | |
Propagate shader compile/link errors
And silence the no-error case.
Diffstat (limited to 'compositor.c')
| -rw-r--r-- | compositor.c | 32 |
1 files changed, 24 insertions, 8 deletions
diff --git a/compositor.c b/compositor.c index 310ee02..6b31b48 100644 --- a/compositor.c +++ b/compositor.c @@ -801,27 +801,36 @@ static const char fragment_shader[] = " gl_FragColor = texture2D(tex, v_texcoord)\n;" "}\n"; -static void +static int init_shaders(struct wlsc_compositor *ec) { GLuint v, f, program; const char *p; char msg[512]; GLfloat vertices[4 * 5]; + GLint status; p = vertex_shader; v = glCreateShader(GL_VERTEX_SHADER); glShaderSource(v, 1, &p, NULL); glCompileShader(v); - glGetShaderInfoLog(v, sizeof msg, NULL, msg); - printf("vertex shader info: %s\n", msg); + glGetShaderiv(v, GL_COMPILE_STATUS, &status); + if (!status) { + glGetShaderInfoLog(v, sizeof msg, NULL, msg); + fprintf(stderr, "vertex shader info: %s\n", msg); + return -1; + } p = fragment_shader; f = glCreateShader(GL_FRAGMENT_SHADER); glShaderSource(f, 1, &p, NULL); glCompileShader(f); - glGetShaderInfoLog(f, sizeof msg, NULL, msg); - printf("fragment shader info: %s\n", msg); + glGetShaderiv(f, GL_COMPILE_STATUS, &status); + if (!status) { + glGetShaderInfoLog(f, sizeof msg, NULL, msg); + fprintf(stderr, "fragment shader info: %s\n", msg); + return -1; + } program = glCreateProgram(); glAttachShader(program, v); @@ -830,8 +839,12 @@ init_shaders(struct wlsc_compositor *ec) glBindAttribLocation(program, 1, "texcoord"); glLinkProgram(program); - glGetProgramInfoLog(program, sizeof msg, NULL, msg); - printf("info: %s\n", msg); + glGetProgramiv(program, GL_LINK_STATUS, &status); + if (!status) { + glGetProgramInfoLog(program, sizeof msg, NULL, msg); + fprintf(stderr, "link info: %s\n", msg); + return -1; + } glUseProgram(program); ec->proj_uniform = glGetUniformLocation(program, "proj"); @@ -864,6 +877,8 @@ init_shaders(struct wlsc_compositor *ec) glGenBuffers(1, &ec->vbo); glBindBuffer(GL_ARRAY_BUFFER, ec->vbo); glBufferData(GL_ARRAY_BUFFER, sizeof vertices, vertices, GL_STATIC_DRAW); + + return 0; } static const struct wl_interface visual_interface = { @@ -938,7 +953,8 @@ wlsc_compositor_init(struct wlsc_compositor *ec, struct wl_display *display) glGenFramebuffers(1, &ec->fbo); glBindFramebuffer(GL_FRAMEBUFFER, ec->fbo); glActiveTexture(GL_TEXTURE0); - init_shaders(ec); + if (init_shaders(ec) < 0) + return -1; loop = wl_display_get_event_loop(ec->wl_display); ec->timer_source = wl_event_loop_add_timer(loop, repaint, ec); |
