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 |