OLD | NEW |
| (Empty) |
1 // Copyright 2016 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 "remoting/client/gl_helpers.h" | |
6 | |
7 #include "base/logging.h" | |
8 | |
9 namespace remoting { | |
10 | |
11 GLuint CompileShader(GLenum shader_type, const char* shader_source) { | |
12 GLuint shader = glCreateShader(shader_type); | |
13 | |
14 if (shader != 0) { | |
15 int shader_source_length = strlen(shader_source); | |
16 // Pass in the shader source. | |
17 glShaderSource(shader, 1, &shader_source, &shader_source_length); | |
18 | |
19 // Compile the shader. | |
20 glCompileShader(shader); | |
21 | |
22 // Get the compilation status. | |
23 GLint compile_status; | |
24 glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status); | |
25 | |
26 // If the compilation failed, delete the shader. | |
27 if (compile_status == GL_FALSE) { | |
28 LOG(ERROR) << "Error compiling shader: \n" << shader_source; | |
29 glDeleteShader(shader); | |
30 shader = 0; | |
31 } | |
32 } | |
33 | |
34 if (shader == 0) { | |
35 LOG(FATAL) << "Error creating shader."; | |
36 } | |
37 | |
38 return shader; | |
39 } | |
40 | |
41 GLuint CreateProgram(GLuint vertex_shader, GLuint fragment_shader) { | |
42 GLuint program = glCreateProgram(); | |
43 | |
44 if (program != 0) { | |
45 glAttachShader(program, vertex_shader); | |
46 glAttachShader(program, fragment_shader); | |
47 glLinkProgram(program); | |
48 | |
49 // Get the link status. | |
50 GLint link_status; | |
51 glGetProgramiv(program, GL_LINK_STATUS, &link_status); | |
52 // If the link failed, delete the program. | |
53 if (link_status == GL_FALSE) { | |
54 LOG(ERROR) << "Error compiling program."; | |
55 glDeleteProgram(program); | |
56 program = 0; | |
57 } | |
58 } | |
59 | |
60 if (program == 0) { | |
61 LOG(FATAL) << "Error creating program."; | |
62 } | |
63 | |
64 return program; | |
65 } | |
66 | |
67 GLuint CreateTexture() { | |
68 GLuint texture; | |
69 glGenTextures(1, &texture); | |
70 if (texture == 0) { | |
71 LOG(FATAL) << "Error creating texture."; | |
72 } | |
73 return texture; | |
74 } | |
75 | |
76 GLuint CreateBuffer(const void* data, int size) { | |
77 GLuint buffer; | |
78 glGenBuffers(1, &buffer); | |
79 glBindBuffer(GL_ARRAY_BUFFER, buffer); | |
80 glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW); | |
81 glBindBuffer(GL_ARRAY_BUFFER, 0); | |
82 return buffer; | |
83 } | |
84 | |
85 } // namespace remoting | |
OLD | NEW |