You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.5 KiB
91 lines
2.5 KiB
/*
|
|
* Copyright (C) 2016 The Android Open Source Project
|
|
*
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*/
|
|
|
|
#define _USE_MATH_DEFINES
|
|
#include <math.h>
|
|
#include "utils.h"
|
|
|
|
float DegToRad(float deg) {
|
|
return deg * (float)M_PI / 180.0f;
|
|
}
|
|
|
|
bool CompileShader(GLuint shader, const std::string& shader_string) {
|
|
std::string prefix = "#version 300 es\n";
|
|
std::string string_with_prefix = prefix + shader_string;
|
|
const char* shader_str[] = { string_with_prefix.data() };
|
|
glShaderSource(shader, 1, shader_str, NULL);
|
|
glCompileShader(shader);
|
|
|
|
GLint success;
|
|
GLchar infoLog[512];
|
|
glGetShaderiv(shader, GL_COMPILE_STATUS, &success);
|
|
if (!success)
|
|
{
|
|
glGetShaderInfoLog(shader, 512, NULL, infoLog);
|
|
LOGI("Shader Failed to compile: %s -- %s\n", *shader_str, infoLog);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool LinkProgram(GLuint program, GLuint vertex_shader, GLuint fragment_shader) {
|
|
glAttachShader(program, vertex_shader);
|
|
glAttachShader(program, fragment_shader);
|
|
glLinkProgram(program);
|
|
|
|
// Check for linking errors
|
|
GLint success;
|
|
GLchar infoLog[512];
|
|
glGetProgramiv(program, GL_LINK_STATUS, &success);
|
|
if (!success) {
|
|
glGetProgramInfoLog(program, 512, NULL, infoLog);
|
|
LOGE("Shader failed to link: %s\n", infoLog);
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
}
|
|
|
|
GLenum GLCheckError() {
|
|
return GLCheckErrorStr("");
|
|
}
|
|
|
|
GLenum GLCheckErrorStr(std::string msg) {
|
|
GLenum e = glGetError();
|
|
std::string str;
|
|
if (e != GL_NO_ERROR) {
|
|
switch (e) {
|
|
case GL_INVALID_ENUM:
|
|
str = "GL_INVALID_ENUM";
|
|
break;
|
|
case GL_INVALID_OPERATION:
|
|
str = "GL_INVALID_OPERATION";
|
|
break;
|
|
case GL_INVALID_VALUE:
|
|
str = "GL_INVALID_VALUE";
|
|
break;
|
|
case GL_OUT_OF_MEMORY:
|
|
str = "GL_OUT_OF_MEMORY";
|
|
break;
|
|
case GL_INVALID_FRAMEBUFFER_OPERATION:
|
|
str = "GL_INVALID_FRAMEBUFFER_OPERATION";
|
|
break;
|
|
}
|
|
LOGE("OpenGL error : %s : %s (%#08x)\n", msg.c_str(), str.c_str(), e);
|
|
}
|
|
return e;
|
|
}
|