| OLD | NEW |
| (Empty) |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | |
| 2 // for details. All rights reserved. Use of this source code is governed by a | |
| 3 // BSD-style license that can be found in the LICENSE file. | |
| 4 | |
| 5 #include "embedders/openglui/common/gl_graphics_handler.h" | |
| 6 #include "embedders/openglui/common/log.h" | |
| 7 | |
| 8 extern void CheckGLError(const char *function); | |
| 9 | |
| 10 void GLGraphicsHandler::SetViewport(int left, int top, int width, int height) { | |
| 11 glViewport(left, top, width, height); | |
| 12 CheckGLError("glViewPort"); | |
| 13 } | |
| 14 | |
| 15 int GLGraphicsHandler::BuildProgram(const char* vertexShaderSource, | |
| 16 const char* fragmentShaderSource) const { | |
| 17 int vertexShader = BuildShader(vertexShaderSource, GL_VERTEX_SHADER); | |
| 18 int fragmentShader = BuildShader(fragmentShaderSource, GL_FRAGMENT_SHADER); | |
| 19 if (vertexShader < 0 || fragmentShader < 0) { | |
| 20 return -1; | |
| 21 } | |
| 22 | |
| 23 GLuint programHandle = glCreateProgram(); | |
| 24 glAttachShader(programHandle, static_cast<GLuint>(vertexShader)); | |
| 25 glAttachShader(programHandle, static_cast<GLuint>(fragmentShader)); | |
| 26 glLinkProgram(programHandle); | |
| 27 | |
| 28 GLint linkSuccess; | |
| 29 glGetProgramiv(programHandle, GL_LINK_STATUS, &linkSuccess); | |
| 30 if (linkSuccess == GL_FALSE) { | |
| 31 GLint infoLogLength; | |
| 32 glGetProgramiv(programHandle, GL_INFO_LOG_LENGTH, &infoLogLength); | |
| 33 GLchar* strInfoLog = new GLchar[infoLogLength + 1]; | |
| 34 glGetProgramInfoLog(programHandle, infoLogLength, NULL, strInfoLog); | |
| 35 strInfoLog[infoLogLength] = 0; | |
| 36 LOGE("Link failed: %s", strInfoLog); | |
| 37 delete[] strInfoLog; | |
| 38 return -1; | |
| 39 } | |
| 40 return static_cast<int>(programHandle); | |
| 41 } | |
| 42 | |
| 43 int GLGraphicsHandler::BuildShader(const char* source, | |
| 44 GLenum shaderType) const { | |
| 45 GLuint shaderHandle = glCreateShader(shaderType); | |
| 46 glShaderSource(shaderHandle, 1, &source, NULL); | |
| 47 glCompileShader(shaderHandle); | |
| 48 | |
| 49 GLint compileSuccess; | |
| 50 glGetShaderiv(shaderHandle, GL_COMPILE_STATUS, &compileSuccess); | |
| 51 | |
| 52 if (compileSuccess == GL_FALSE) { | |
| 53 GLint infoLogLength = 0; | |
| 54 glGetShaderiv(shaderHandle, GL_INFO_LOG_LENGTH, &infoLogLength); | |
| 55 GLchar* strInfoLog = new GLchar[infoLogLength + 1]; | |
| 56 glGetShaderInfoLog(shaderHandle, infoLogLength, NULL, strInfoLog); | |
| 57 strInfoLog[infoLogLength] = 0; | |
| 58 LOGE("Shader compile failed: %s", strInfoLog); | |
| 59 delete [] strInfoLog; | |
| 60 return -1; | |
| 61 } | |
| 62 return static_cast<int>(shaderHandle); | |
| 63 } | |
| 64 | |
| OLD | NEW |