1 /* Copyright (C) 2010-2018 The RetroArch team
3 * ---------------------------------------------------------------------------------------
4 * The following license statement only applies to this libretro SDK code part (glsm.h).
5 * ---------------------------------------------------------------------------------------
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:
13 * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
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.
23 #ifndef LIBRETRO_SDK_GLSM_H
24 #define LIBRETRO_SDK_GLSM_H
26 #include <retro_common_api.h>
30 #include <glsym/rglgen_headers.h>
35 typedef double GLdouble;
36 typedef double GLclampd;
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
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
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
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
80 #define GL_ALPHA_TEST 0x0BC0
83 #ifndef GL_CLIP_DISTANCE0
84 #define GL_CLIP_DISTANCE0 0x3000
93 SGL_POLYGON_OFFSET_FILL,
99 #if !defined(HAVE_OPENGLES)
104 SGL_SAMPLE_ALPHA_TO_COVERAGE,
106 #ifndef HAVE_OPENGLES
115 GLSM_CTL_STATE_SETUP,
117 GLSM_CTL_STATE_UNBIND,
118 GLSM_CTL_STATE_CONTEXT_RESET,
119 GLSM_CTL_STATE_CONTEXT_DESTROY,
120 GLSM_CTL_STATE_CONTEXT_INIT,
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
129 typedef bool (*glsm_imm_vbo_draw)(void *);
130 typedef bool (*glsm_imm_vbo_disable)(void *);
131 typedef bool (*glsm_framebuffer_lock)(void *);
133 typedef struct glsm_ctx_proc_address
135 retro_get_proc_address_t addr;
136 } glsm_ctx_proc_address_t;
138 typedef struct glsm_ctx_params
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;
149 enum retro_hw_context_type context_type;
152 GLuint glsm_get_current_framebuffer(void);
154 bool glsm_ctl(enum glsm_state_ctl state, void *data);