git subrepo clone https://github.com/libretro/libretro-common.git deps/libretro-common
[pcsx_rearmed.git] / deps / libretro-common / include / glsm / glsm.h
CommitLineData
3719602c
PC
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
32RETRO_BEGIN_DECLS
33
34#ifdef HAVE_OPENGLES2
35typedef double GLdouble;
36typedef 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
89enum
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
112enum 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
129typedef bool (*glsm_imm_vbo_draw)(void *);
130typedef bool (*glsm_imm_vbo_disable)(void *);
131typedef bool (*glsm_framebuffer_lock)(void *);
132
133typedef struct glsm_ctx_proc_address
134{
135 retro_get_proc_address_t addr;
136} glsm_ctx_proc_address_t;
137
138typedef 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
152GLuint glsm_get_current_framebuffer(void);
153
154bool glsm_ctl(enum glsm_state_ctl state, void *data);
155
156RETRO_END_DECLS
157
158#endif