OLD | NEW |
| (Empty) |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "gpu/demos/app_framework/gles2_utils.h" | |
6 | |
7 namespace { | |
8 static const int kInfoBufferLength = 1024; | |
9 } // namespace | |
10 | |
11 namespace gpu_demos { | |
12 namespace gles2_utils { | |
13 | |
14 GLuint LoadShader(GLenum type, const char* shader_src) { | |
15 GLuint shader = glCreateShader(type); | |
16 if (shader == 0) return 0; | |
17 | |
18 // Load the shader source | |
19 glShaderSource(shader, 1, &shader_src, NULL); | |
20 // Compile the shader | |
21 glCompileShader(shader); | |
22 // Check the compile status | |
23 GLint value; | |
24 glGetShaderiv(shader, GL_COMPILE_STATUS, &value); | |
25 if (value == 0) { | |
26 char buffer[kInfoBufferLength]; | |
27 GLsizei length; | |
28 glGetShaderInfoLog(shader, sizeof(buffer), &length, buffer); | |
29 std::string log(buffer, length); | |
30 DLOG(ERROR) << "Error compiling shader:" << log; | |
31 glDeleteShader(shader); | |
32 shader = 0; | |
33 } | |
34 return shader; | |
35 } | |
36 | |
37 GLuint LoadProgram(const char* v_shader_src, const char* f_shader_src) { | |
38 GLuint v_shader = LoadShader(GL_VERTEX_SHADER, v_shader_src); | |
39 if (v_shader == 0) return 0; | |
40 | |
41 GLuint f_shader = LoadShader(GL_FRAGMENT_SHADER, f_shader_src); | |
42 if (f_shader == 0) return 0; | |
43 | |
44 // Create the program object | |
45 GLuint program_object = glCreateProgram(); | |
46 if (program_object == 0) return 0; | |
47 | |
48 // Link the program and check status. | |
49 glAttachShader(program_object, v_shader); | |
50 glAttachShader(program_object, f_shader); | |
51 glLinkProgram(program_object); | |
52 GLint linked = 0; | |
53 glGetProgramiv(program_object, GL_LINK_STATUS, &linked); | |
54 if (linked == 0) { | |
55 char buffer[kInfoBufferLength]; | |
56 GLsizei length; | |
57 glGetProgramInfoLog(program_object, sizeof(buffer), &length, buffer); | |
58 std::string log(buffer, length); | |
59 DLOG(ERROR) << "Error linking program:" << log; | |
60 glDeleteProgram(program_object); | |
61 program_object = 0; | |
62 } | |
63 return program_object; | |
64 } | |
65 | |
66 } // namespace gles2_utils | |
67 } // namespace gpu_demos | |
OLD | NEW |