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 159