| // 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 "examples/shadows/vfx/shader.h" |
| |
| #include <memory> |
| |
| #include "base/logging.h" |
| |
| namespace vfx { |
| |
| Shader::Shader(GLenum type, const std::string& source) |
| : type_(type), id_(glCreateShader(type)) { |
| const char* cstring = source.c_str(); |
| glShaderSource(id_, 1, &cstring, NULL); |
| glCompileShader(id_); |
| |
| GLint status = 0; |
| glGetShaderiv(id_, GL_COMPILE_STATUS, &status); |
| |
| if (!status) { |
| GLsizei expected_length = 0; |
| glGetShaderiv(id_, GL_INFO_LOG_LENGTH, &expected_length); |
| std::string error; |
| error.resize(expected_length); |
| GLsizei actual_length = 0; |
| glGetShaderInfoLog(id_, expected_length, &actual_length, &error[0]); |
| error.resize(actual_length); |
| LOG(FATAL) << "Compilation of shader failed: " << error; |
| glDeleteShader(id_); |
| id_ = 0; |
| } |
| } |
| |
| Shader::~Shader() { |
| if (id_) |
| glDeleteShader(id_); |
| id_ = 0; |
| } |
| |
| } // namespace vfx |