| Index: remoting/client/gl_helpers.cc
|
| diff --git a/remoting/client/gl_helpers.cc b/remoting/client/gl_helpers.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..5cd1863ea1994a0f2a35b9dbc2c75f33f8fce144
|
| --- /dev/null
|
| +++ b/remoting/client/gl_helpers.cc
|
| @@ -0,0 +1,85 @@
|
| +// Copyright 2016 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "remoting/client/gl_helpers.h"
|
| +
|
| +#include "base/logging.h"
|
| +
|
| +namespace remoting {
|
| +
|
| +GLuint CompileShader(GLenum shader_type, const char* shader_source) {
|
| + GLuint shader = glCreateShader(shader_type);
|
| +
|
| + if (shader != 0) {
|
| + int shader_source_length = strlen(shader_source);
|
| + // Pass in the shader source.
|
| + glShaderSource(shader, 1, &shader_source, &shader_source_length);
|
| +
|
| + // Compile the shader.
|
| + glCompileShader(shader);
|
| +
|
| + // Get the compilation status.
|
| + GLint compile_status;
|
| + glGetShaderiv(shader, GL_COMPILE_STATUS, &compile_status);
|
| +
|
| + // If the compilation failed, delete the shader.
|
| + if (compile_status == GL_FALSE) {
|
| + LOG(ERROR) << "Error compiling shader: \n" << shader_source;
|
| + glDeleteShader(shader);
|
| + shader = 0;
|
| + }
|
| + }
|
| +
|
| + if (shader == 0) {
|
| + LOG(FATAL) << "Error creating shader.";
|
| + }
|
| +
|
| + return shader;
|
| +}
|
| +
|
| +GLuint CreateProgram(GLuint vertex_shader, GLuint fragment_shader) {
|
| + GLuint program = glCreateProgram();
|
| +
|
| + if (program != 0) {
|
| + glAttachShader(program, vertex_shader);
|
| + glAttachShader(program, fragment_shader);
|
| + glLinkProgram(program);
|
| +
|
| + // Get the link status.
|
| + GLint link_status;
|
| + glGetProgramiv(program, GL_LINK_STATUS, &link_status);
|
| + // If the link failed, delete the program.
|
| + if (link_status == GL_FALSE) {
|
| + LOG(ERROR) << "Error compiling program.";
|
| + glDeleteProgram(program);
|
| + program = 0;
|
| + }
|
| + }
|
| +
|
| + if (program == 0) {
|
| + LOG(FATAL) << "Error creating program.";
|
| + }
|
| +
|
| + return program;
|
| +}
|
| +
|
| +GLuint CreateTexture() {
|
| + GLuint texture;
|
| + glGenTextures(1, &texture);
|
| + if (texture == 0) {
|
| + LOG(FATAL) << "Error creating texture.";
|
| + }
|
| + return texture;
|
| +}
|
| +
|
| +GLuint CreateBuffer(const void* data, int size) {
|
| + GLuint buffer;
|
| + glGenBuffers(1, &buffer);
|
| + glBindBuffer(GL_ARRAY_BUFFER, buffer);
|
| + glBufferData(GL_ARRAY_BUFFER, size, data, GL_STATIC_DRAW);
|
| + glBindBuffer(GL_ARRAY_BUFFER, 0);
|
| + return buffer;
|
| +}
|
| +
|
| +} // namespace remoting
|
|
|