git subrepo clone https://github.com/libretro/libretro-common.git deps/libretro-common
[pcsx_rearmed.git] / deps / libretro-common / include / glsm / glsm.h
1 /* Copyright (C) 2010-2018 The RetroArch team
2  *
3  * ---------------------------------------------------------------------------------------
4  * The following license statement only applies to this libretro SDK code part (glsm.h).
5  * ---------------------------------------------------------------------------------------
6  *
7  * Permission is hereby granted, free of charge,
8  * to any person obtaining a copy of this software and associated documentation files (the "Software"),
9  * to deal in the Software without restriction, including without limitation the rights to
10  * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software,
11  * and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
16  * INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18  * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
19  * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21  */
22
23 #ifndef LIBRETRO_SDK_GLSM_H
24 #define LIBRETRO_SDK_GLSM_H
25
26 #include <retro_common_api.h>
27
28 #include <boolean.h>
29 #include <libretro.h>
30 #include <glsym/rglgen_headers.h>
31
32 RETRO_BEGIN_DECLS
33
34 #ifdef HAVE_OPENGLES2
35 typedef double GLdouble;
36 typedef double GLclampd;
37 #endif
38
39 #if defined(HAVE_OPENGLES2)
40 #define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER
41 #define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
42 #define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT
43 #define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT
44 #elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__)))
45 #define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_EXT
46 #define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_EXT
47 #define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_EXT
48 #define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_EXT
49 #elif defined(HAVE_PSGL)
50 #define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER_OES
51 #define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_SCE
52 #define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT_OES
53 #define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT_OES
54 #else
55 #define RARCH_GL_RENDERBUFFER GL_RENDERBUFFER
56 #define RARCH_GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8
57 #define RARCH_GL_DEPTH_ATTACHMENT GL_DEPTH_ATTACHMENT
58 #define RARCH_GL_STENCIL_ATTACHMENT GL_STENCIL_ATTACHMENT
59 #endif
60
61 #if defined(HAVE_PSGL)
62 #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_OES
63 #define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_OES
64 #define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT
65 #elif (defined(__MACH__) && (defined(__ppc__) || defined(__ppc64__)))
66 #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER_EXT
67 #define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE_EXT
68 #define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0_EXT
69 #else
70 #define RARCH_GL_FRAMEBUFFER GL_FRAMEBUFFER
71 #define RARCH_GL_FRAMEBUFFER_COMPLETE GL_FRAMEBUFFER_COMPLETE
72 #define RARCH_GL_COLOR_ATTACHMENT0 GL_COLOR_ATTACHMENT0
73 #endif
74
75 #ifndef GL_FOG
76 #define GL_FOG 0x0B60
77 #endif
78
79 #ifndef GL_ALPHA_TEST
80 #define GL_ALPHA_TEST 0x0BC0
81 #endif
82
83 #ifndef GL_CLIP_DISTANCE0
84 #define GL_CLIP_DISTANCE0 0x3000
85 #endif
86
87 #define MAX_ATTRIB 8
88
89 enum
90 {
91    SGL_DEPTH_TEST             = 0,
92    SGL_BLEND,
93    SGL_POLYGON_OFFSET_FILL,
94    SGL_FOG,
95    SGL_CULL_FACE,
96    SGL_ALPHA_TEST,
97    SGL_SCISSOR_TEST,
98    SGL_STENCIL_TEST,
99 #if !defined(HAVE_OPENGLES)
100    SGL_DEPTH_CLAMP,
101    SGL_CLIP_DISTANCE0,
102 #endif
103    SGL_DITHER,
104    SGL_SAMPLE_ALPHA_TO_COVERAGE,
105    SGL_SAMPLE_COVERAGE,
106 #ifndef HAVE_OPENGLES
107    SGL_COLOR_LOGIC_OP,
108 #endif
109    SGL_CAP_MAX
110 };
111
112 enum glsm_state_ctl
113 {
114    GLSM_CTL_NONE = 0,
115    GLSM_CTL_STATE_SETUP,
116    GLSM_CTL_STATE_BIND,
117    GLSM_CTL_STATE_UNBIND,
118    GLSM_CTL_STATE_CONTEXT_RESET,
119    GLSM_CTL_STATE_CONTEXT_DESTROY,
120    GLSM_CTL_STATE_CONTEXT_INIT,
121    GLSM_CTL_IS_IMM_VBO,
122    GLSM_CTL_SET_IMM_VBO,
123    GLSM_CTL_UNSET_IMM_VBO,
124    GLSM_CTL_IMM_VBO_DISABLE,
125    GLSM_CTL_IMM_VBO_DRAW,
126    GLSM_CTL_PROC_ADDRESS_GET
127 };
128
129 typedef bool (*glsm_imm_vbo_draw)(void *);
130 typedef bool (*glsm_imm_vbo_disable)(void *);
131 typedef bool (*glsm_framebuffer_lock)(void *);
132
133 typedef struct glsm_ctx_proc_address
134 {
135    retro_get_proc_address_t addr;
136 } glsm_ctx_proc_address_t;
137
138 typedef struct glsm_ctx_params
139 {
140    glsm_framebuffer_lock    framebuffer_lock;
141    glsm_imm_vbo_draw        imm_vbo_draw;
142    glsm_imm_vbo_disable     imm_vbo_disable;
143    retro_hw_context_reset_t context_reset;
144    retro_hw_context_reset_t context_destroy;
145    retro_environment_t environ_cb;
146    bool stencil;
147    unsigned major;
148    unsigned minor;
149    enum retro_hw_context_type context_type;
150 } glsm_ctx_params_t;
151
152 GLuint glsm_get_current_framebuffer(void);
153
154 bool glsm_ctl(enum glsm_state_ctl state, void *data);
155
156 RETRO_END_DECLS
157
158 #endif