Files
renpy/module/glcompat.h
T
2019-09-01 22:00:57 -04:00

159 lines
4.0 KiB
C

/**
* This takes care of abstracting between OpenGL and OpenGL ES, by
* choosing the appropriate header file, and renaming various names
* in the ES case.
*/
#ifndef GL_COMPAT_H
#define GL_COMPAT_H
// Environ is defined on windows, but our GL code uses it as an
// identifier. So get rid of it here.
#undef environ
#if defined __APPLE__
#include "TargetConditionals.h"
#if TARGET_OS_IPHONE
#define IOS
#endif
#endif
#if defined ANDROID
#define RENPY_GLES_2
#elif defined ANGLE
#define RENPY_GLES_2
#elif defined IOS
#define RENPY_GLES_2
#elif defined EMSCRIPTEN
#define RENPY_GLES_2
#elif defined RASPBERRY_PI
#define RENPY_GLES_2
#else
#define RENPY_OPENGL
#endif
#if defined RENPY_GLES_2
#ifdef ANGLE
#include <EGL/egl.h>
#endif
#ifdef IOS
#include <OpenGLES/ES2/gl.h>
#else
#include <GLES2/gl2.h>
#endif
typedef GLuint GLhandleARB;
typedef GLchar GLcharARB;
#define GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_IMAGE_UNITS
#define GL_RENDERBUFFER_EXT GL_RENDERBUFFER
#define glGenRenderbuffersEXT glGenRenderbuffers
#define glBindRenderbufferEXT glBindRenderbuffer
#define glRenderbufferStorageEXT glRenderbufferStorage
#define glDeleteRenderbuffersEXT glDeleteRenderbuffers
#define GL_FRAMEBUFFER_EXT GL_FRAMEBUFFER
#define GL_FRAMEBUFFER_BINDING_EXT GL_FRAMEBUFFER_BINDING
#define GL_COLOR_ATTACHMENT0_EXT GL_COLOR_ATTACHMENT0
#define glBindFramebufferEXT glBindFramebuffer
#define glFramebufferTexture2DEXT glFramebufferTexture2D
#define glGenFramebuffersEXT glGenFramebuffers
#define glDeleteFramebuffersEXT glDeleteFramebuffers
#define glCheckFramebufferStatusEXT glCheckFramebufferStatus
#define glFramebufferRenderbufferEXT glFramebufferRenderbuffer
#define GL_OBJECT_INFO_LOG_LENGTH_ARB GL_INFO_LOG_LENGTH
#define GL_OBJECT_COMPILE_STATUS_ARB GL_COMPILE_STATUS
#define GL_VERTEX_SHADER_ARB GL_VERTEX_SHADER
#define GL_FRAGMENT_SHADER_ARB GL_FRAGMENT_SHADER
#define GL_OBJECT_LINK_STATUS_ARB GL_LINK_STATUS
#define glCreateShaderObjectARB glCreateShader
#define glShaderSourceARB glShaderSource
#define glCompileShaderARB glCompileShader
#define glCreateProgramObjectARB glCreateProgram
#define glAttachObjectARB glAttachShader
#define glLinkProgramARB glLinkProgram
#define glUseProgramObjectARB glUseProgram
#define glGetAttribLocationARB glGetAttribLocation
#define glGetUniformLocationARB glGetUniformLocation
#define glUniformMatrix4fvARB glUniformMatrix4fv
#define glUniform1iARB glUniform1i
#define glUniform1fARB glUniform1f
#define glUniform2fARB glUniform2f
#define glUniform4fARB glUniform4f
#define glVertexAttribPointerARB glVertexAttribPointer
#define glEnableVertexAttribArrayARB glEnableVertexAttribArray
#define glDisableVertexAttribArrayARB glDisableVertexAttribArray
#define RENPY_THIRD_TEXTURE 1
#endif
#if defined RENPY_GLES_1 || defined RENPY_GLES_2
typedef GLfloat GLdouble;
#define glewInit() (1)
#define GLEW_OK (1)
#define glewGetErrorString(x) ("Unknown Error")
#define glewIsSupported(x) (1)
#define glClipPlane glClipPlanef
// This isn't defined on GL ES, but that's okay, since we'll disable
// screenshots on Android/iOS.
#define GL_PACK_ROW_LENGTH 0
#define glClientActiveTextureARB glClientActiveTexture
#define glActiveTextureARB glActiveTexture
#define GL_BGRA GL_RGBA
#define GL_UNSIGNED_INT_8_8_8_8_REV GL_UNSIGNED_BYTE
#define GL_MAX_TEXTURE_UNITS GL_MAX_TEXTURE_IMAGE_UNITS
#endif
#if defined RENPY_OPENGL
#include <GL/glew.h>
#define RENPY_THIRD_TEXTURE 1
// These have to be written 2.0-style, since the ARB-style doesn't
// include the object type.
#undef GL_INFO_LOG_LENGTH
#define GL_INFO_LOG_LENGTH GL_OBJECT_INFO_LOG_LENGTH_ARB
#undef glDeleteShader
#define glDeleteShader glDeleteObjectARB
#undef glDeleteProgram
#define glDeleteProgram glDeleteObjectARB
#undef glGetShaderiv
#define glGetShaderiv glGetObjectParameterivARB
#undef glGetProgramiv
#define glGetProgramiv glGetObjectParameterivARB
#undef glGetShaderInfoLog
#define glGetShaderInfoLog glGetInfoLogARB
#undef glGetProgramInfoLog
#define glGetProgramInfoLog glGetInfoLogARB
#endif
#endif // GL_COMPAT_H