// Copyright (c) 2013 The Chromium OS 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 "base/bind.h" #include "glinterfacetest.h" namespace glbench { namespace { // Basic shader code. const char* kVertexShader = "attribute vec4 c;" "void main() {" " gl_Position = c;" "}"; const char* kFragmentShader = "uniform vec4 color;" "void main() {" " gl_FragColor = color;" "}"; // Vertex arrays used to draw a diamond. const GLfloat kVertices[] = { 1.0, 0.0, 0.0, -1.0, -1.0, 0.0, 0.0, 1.0 }; const GLushort kIndices[] = { 0, 1, 2, 0, 2, 3 }; } // namespace void GLInterfaceTest::SetupGLRendering() { vertex_buffer_object_ = SetupVBO(GL_ARRAY_BUFFER, sizeof(kVertices), kVertices); shader_program_ = InitShaderProgram(kVertexShader, kFragmentShader); attribute_index_ = glGetAttribLocation(shader_program_, "c"); glVertexAttribPointer(attribute_index_, 2, GL_FLOAT, GL_FALSE, 0, NULL); glEnableVertexAttribArray(attribute_index_); GLint color_uniform = glGetUniformLocation(shader_program_, "color"); const GLfloat white[4] = {1.0f, 1.0f, 1.0f, 1.0f}; glUniform4fv(color_uniform, 1, white); num_indices_ = arraysize(kIndices); index_buffer_object_ = SetupVBO(GL_ELEMENT_ARRAY_BUFFER, sizeof(kIndices), kIndices); } void GLInterfaceTest::CleanupGLRendering() { glDisableVertexAttribArray(attribute_index_); glDeleteProgram(shader_program_); glDeleteBuffers(1, &index_buffer_object_); glDeleteBuffers(1, &vertex_buffer_object_); } bool GLInterfaceTest::Run() { const std::string test_name_base = std::string(Name()) + "_"; // Run test without GL commands. render_func_.Reset(); RunTest(this, (test_name_base + "nogl").c_str(), 1.0, g_width, g_height, false); // Run main test with simple GL commands. SetupGLRendering(); render_func_ = base::Bind(&GLInterfaceTest::RenderGLSimple, base::Unretained(this)); RunTest(this, (test_name_base + "glsimple").c_str(), 1.0, g_width, g_height, false); CleanupGLRendering(); // TODO(sque): Run with complex GL commands. See crosbug.com/36746. return true; } void GLInterfaceTest::RenderGLSimple() { glDrawElements(GL_TRIANGLES, num_indices_, GL_UNSIGNED_SHORT, 0); } } // namespace glbench