1 #pragma once
2 
3 #include "ppsspp_config.h"
4 
5 #if PPSSPP_PLATFORM(IOS)
6 #include <OpenGLES/ES3/gl.h>
7 #include <OpenGLES/ES3/glext.h>
8 #elif defined(USING_GLES2)
9 #include <GLES2/gl2.h>
10 #include <GLES2/gl2ext.h>
11 #define GL_BGRA_EXT 0x80E1
12 #else // OpenGL
13 #include "GL/glew.h"
14 #if defined(__APPLE__)
15 #include <OpenGL/gl.h>
16 #else
17 #include <GL/gl.h>
18 #endif
19 #endif
20 
21 #ifdef USING_GLES2
22 // Support OpenGL ES 3.0
23 // This uses the "DYNAMIC" approach from the gles3jni NDK sample.
24 #include "Common/GPU/OpenGL/gl3stub.h"
25 #endif
26 
27 
28 #ifdef USING_GLES2
29 
30 #ifndef GL_MIN_EXT
31 #define GL_MIN_EXT 0x8007
32 #endif
33 
34 #ifndef GL_MAX_EXT
35 #define GL_MAX_EXT 0x8008
36 #endif
37 
38 #if defined(__ANDROID__)
39 #include <EGL/egl.h>
40 // Additional extensions not included in GLES2/gl2ext.h from the NDK
41 
42 typedef uint64_t EGLuint64NV;
43 typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC) (void);
44 typedef EGLuint64NV(EGLAPIENTRYP PFNEGLGETSYSTEMTIMENVPROC) (void);
45 extern PFNEGLGETSYSTEMTIMEFREQUENCYNVPROC eglGetSystemTimeFrequencyNV;
46 extern PFNEGLGETSYSTEMTIMENVPROC eglGetSystemTimeNV;
47 
48 typedef GLvoid* (GL_APIENTRYP PFNGLMAPBUFFERPROC) (GLenum target, GLenum access);
49 extern PFNGLMAPBUFFERPROC glMapBuffer;
50 
51 typedef void (EGLAPIENTRYP PFNGLDRAWTEXTURENVPROC) (GLuint texture, GLuint sampler, GLfloat x0, GLfloat y0, GLfloat x1, GLfloat y1, GLfloat z, GLfloat s0, GLfloat t0, GLfloat s1, GLfloat t1);
52 extern PFNGLDRAWTEXTURENVPROC glDrawTextureNV;
53 #if !PPSSPP_ARCH(ARM64)
54 typedef void (EGLAPIENTRYP PFNGLBLITFRAMEBUFFERNVPROC) (
55 	GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1,
56 	GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1,
57 	GLbitfield mask, GLenum filter);
58 #endif
59 extern PFNGLBLITFRAMEBUFFERNVPROC glBlitFramebufferNV;
60 
61 #if PPSSPP_PLATFORM(IOS)
62 extern PFNGLDISCARDFRAMEBUFFEREXTPROC glDiscardFramebufferEXT;
63 extern PFNGLGENVERTEXARRAYSOESPROC glGenVertexArraysOES;
64 extern PFNGLBINDVERTEXARRAYOESPROC glBindVertexArrayOES;
65 extern PFNGLDELETEVERTEXARRAYSOESPROC glDeleteVertexArraysOES;
66 extern PFNGLISVERTEXARRAYOESPROC glIsVertexArrayOES;
67 
68 // Rename standard functions to the OES version.
69 #define glGenVertexArrays glGenVertexArraysOES
70 #define glBindVertexArray glBindVertexArrayOES
71 #define glDeleteVertexArrays glDeleteVertexArraysOES
72 #define glIsVertexArray glIsVertexArrayOES
73 #endif
74 
75 #endif
76 
77 #ifndef GL_READ_FRAMEBUFFER
78 #define GL_READ_FRAMEBUFFER GL_FRAMEBUFFER
79 #define GL_DRAW_FRAMEBUFFER GL_FRAMEBUFFER
80 #endif
81 #ifndef GL_DEPTH_COMPONENT24
82 #define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT24_OES
83 #endif
84 
85 #ifndef GL_RGBA8
86 #define GL_RGBA8 GL_RGBA
87 #endif
88 
89 #endif /* EGL_NV_system_time */
90 
91 #ifndef GL_DEPTH24_STENCIL8_OES
92 #define GL_DEPTH24_STENCIL8_OES 0x88F0
93 #endif
94