blob: 0089e35f8c29e6b378f6b2f3f114be6ad78e91c3 [file] [log] [blame]
// 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/program.h"
#include "base/logging.h"
#include "examples/shadows/vfx/shader.h"
namespace vfx {
Program::Program(Shader* vertex_shader, Shader* fragment_shader)
: id_(glCreateProgram()) {
DCHECK(vertex_shader->type() == GL_VERTEX_SHADER);
DCHECK(fragment_shader->type() == GL_FRAGMENT_SHADER);
glAttachShader(id_, vertex_shader->id());
glAttachShader(id_, fragment_shader->id());
glLinkProgram(id_);
GLint status = 0;
glGetProgramiv(id_, GL_LINK_STATUS, &status);
if (!status) {
GLsizei expected_length = 0;
glGetProgramiv(id_, GL_INFO_LOG_LENGTH, &expected_length);
std::string error;
error.resize(expected_length);
GLsizei actual_length = 0;
glGetProgramInfoLog(id_, expected_length, &actual_length, &error[0]);
error.resize(actual_length);
LOG(FATAL) << "Linking program failed: " << error;
glDeleteProgram(id_);
id_ = 0;
}
}
Program::~Program() {
if (id_)
glDeleteProgram(id_);
id_ = 0;
}
} // namespace vfx