SDL_local.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. #ifndef SDL_LOCAL_H
  2. #define SDL_LOCAL_H
  3. #include <stdbool.h>
  4. #include <limits.h>
  5. #include "SDL2/SDL.h"
  6. #include "SDL2/SDL_opengl.h"
  7. #include "SDL2/SDL_thread.h"
  8. #ifdef MAX_PATH
  9. // Do Nothing
  10. #elif PATH_MAX
  11. #define MAX_PATH PATH_MAX
  12. #else
  13. #define MAX_PATH 256
  14. #endif
  15. void SDL_PrintStackTrace();
  16. void SDL_PathFullName(char* dst, const char* path);
  17. void SDL_PathFileName(char* dst, const char* path);
  18. void SDL_PathFileExtension(char* dst, const char* path);
  19. void SDL_PathFileLocation(char* dst, const char* path);
  20. void SDL_PathRelative(char* dst, const char* path);
  21. void SDL_PathForwardSlashes(char* path);
  22. void SDL_PathJoin(char* dst, char* fst, char* snd);
  23. bool SDL_PathIsFile(char* path);
  24. bool SDL_PathIsDirectory(char* path);
  25. void SDL_PathParentDirectory(char* dst, const char* path);
  26. char* SDL_GetWorkingDir();
  27. int SDL_SetWorkingDir(char* dir);
  28. const char* SDL_GL_FrameBufferErrorString(GLenum error);
  29. const char* SDL_GL_ErrorString(GLenum error);
  30. void SDL_GL_PrintInfo();
  31. void SDL_GL_PrintExtensions();
  32. void SDL_GL_LoadExtensions();
  33. bool SDL_GL_ExtensionPresent(char* name);
  34. bool SDL_GL_ExtensionFunctionLoaded(void* function);
  35. #ifndef GLchar
  36. #define GLchar char
  37. #endif
  38. #ifndef GLsizeiptr
  39. #define GLsizeiptr size_t
  40. #endif
  41. typedef GLuint (APIENTRY * GLCREATESHADERFN)( GLenum type );
  42. typedef GLuint (APIENTRY * GLCREATEPROGRAMFN)( void );
  43. typedef void (APIENTRY * GLSHADERSOURCEFN)( GLuint shader, GLsizei count, const GLchar** string, const GLint* length );
  44. typedef void (APIENTRY * GLCOMPILESHADERFN)( GLuint shader );
  45. typedef void (APIENTRY * GLGETSHADERINFOLOGFN)( GLuint shader, GLsizei bufsize,GLsizei* length, GLchar* infolog );
  46. typedef void (APIENTRY * GLATTACHSHADERFN)( GLuint program, GLuint shader );
  47. typedef void (APIENTRY * GLLINKPROGRAMFN)( GLuint program );
  48. typedef void (APIENTRY * GLGETPROGRAMINFOLOGFN)( GLuint program, GLsizei bufsize,GLsizei* length, GLchar* infolog );
  49. typedef GLboolean (APIENTRY * GLISPROGRAMFN)( GLuint program );
  50. typedef GLboolean (APIENTRY * GLISSHADERFN)( GLuint shader );
  51. typedef void (APIENTRY * GLGETATTACHEDSHADERSFN)(GLuint program, GLsizei maxCount, GLsizei* count, GLuint* shaders);
  52. typedef GLint (APIENTRY * GLGETUNIFORMLOCATIONFN)( GLuint program, const GLchar* name );
  53. typedef void (APIENTRY * GLACTIVETEXTUREFN)( GLenum texture );
  54. typedef void (APIENTRY * GLUNIFORM1FFN)( GLint location, GLfloat x );
  55. typedef void (APIENTRY * GLUNIFORM1IFN)( GLint location, GLint x );
  56. typedef void (APIENTRY * GLDELETESHADERFN)( GLuint shader );
  57. typedef void (APIENTRY * GLDELETEPROGRAMFN)( GLuint program );
  58. typedef void (APIENTRY * GLUSEPROGRAMFN)( GLuint program );
  59. typedef void (APIENTRY * GLVERTEXATTRIBPOINTERFN)( GLuint indx, GLint size, GLenum type,GLboolean normalized, GLsizei stride, const GLvoid* ptr );
  60. typedef void (APIENTRY * GLVERTEXATTRIBDIVISORFN)( GLuint indx, GLuint divisor );
  61. typedef void (APIENTRY * GLENABLEVERTEXATTRIBARRAYFN)( GLuint index );
  62. typedef void (APIENTRY * GLDISABLEVERTEXATTRIBARRAYFN)( GLuint index );
  63. typedef void (APIENTRY * GLUNIFORM2FFN)( GLint location, GLfloat x, GLfloat y);
  64. typedef void (APIENTRY * GLUNIFORM3FFN)( GLint location, GLfloat x, GLfloat y, GLfloat z);
  65. typedef void (APIENTRY * GLUNIFORM4FFN)( GLint location, GLfloat x, GLfloat y, GLfloat z, GLfloat w );
  66. typedef void (APIENTRY * GLUNIFORMMATRIX3FVFN)( GLint location, GLsizei count,GLboolean transpose, const GLfloat* value );
  67. typedef void (APIENTRY * GLUNIFORMMATRIX4FVFN)( GLint location, GLsizei count,GLboolean transpose, const GLfloat* value );
  68. typedef void (APIENTRY * GLUNIFORM1FVFN)( GLint location, GLsizei count, const GLfloat* value );
  69. typedef void (APIENTRY * GLUNIFORM2FVFN)( GLint location, GLsizei count, const GLfloat* value );
  70. typedef void (APIENTRY * GLUNIFORM3FVFN)( GLint location, GLsizei count, const GLfloat* value );
  71. typedef void (APIENTRY * GLUNIFORM4FVFN)( GLint location, GLsizei count, const GLfloat* value );
  72. typedef void (APIENTRY * GLGETSHADERIVFN)( GLuint shader, GLenum pname, GLint* params );
  73. typedef void (APIENTRY * GLGETPROGRAMIVFN)( GLuint program, GLenum pname, GLint* params );
  74. typedef void (APIENTRY * GLPROGRAMPARAMETERIFN)( GLuint program, GLenum pname, GLint value );
  75. typedef void (APIENTRY * GLBINDATTRIBLOCATIONFN)( GLuint program, GLuint index, const GLchar* name );
  76. typedef void (APIENTRY * GLGENFRAMEBUFFERSFN)( GLsizei n, GLuint* ids );
  77. typedef void (APIENTRY * GLBINDFRAMEBUFFERFN)( GLenum target, GLuint framebuffer );
  78. typedef void (APIENTRY * GLBLITFRAMEBUFFERFN)( GLint srcX0, GLint srcY0, GLint srcX1, GLint srcY1, GLint dstX0, GLint dstY0, GLint dstX1, GLint dstY1, GLbitfield mask, GLenum filter);
  79. typedef void (APIENTRY * GLFRAMEBUFFERTEXTUREFN)( GLenum target, GLenum attachment, GLuint texture, GLint level );
  80. typedef void (APIENTRY * GLFRAMEBUFFERTEXTURE2DFN)( GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level );
  81. typedef void (APIENTRY * GLDELETEFRAMEBUFFERSFN)( GLsizei n, GLuint* framebuffers );
  82. typedef GLenum (APIENTRY * GLCHECKFRAMEBUFFERSTATUSFN)( GLenum target );
  83. typedef void (APIENTRY * GLGENBUFFERSFN)( GLsizei n, GLuint* buffers );
  84. typedef void (APIENTRY * GLGENRENDERBUFFERSFN)( GLsizei n, GLuint* buffers );
  85. typedef void (APIENTRY * GLDELETEBUFFERSFN)( GLsizei n, const GLuint* buffers );
  86. typedef void (APIENTRY * GLDELETERENDERBUFFERSFN)( GLsizei n, const GLuint* buffers );
  87. typedef void (APIENTRY * GLBINDBUFFERFN)( GLenum target, GLuint buffer );
  88. typedef void (APIENTRY * GLBINDRENDERBUFFERFN)( GLenum target, GLuint buffer );
  89. typedef void (APIENTRY * GLBUFFERDATAFN)( GLenum target, GLsizeiptr size, const GLvoid* data, GLenum usage );
  90. typedef void (APIENTRY * GLGETBUFFERSUBDATAFN)( GLenum target, GLintptr offset, GLsizeiptr size, const GLvoid* data);
  91. typedef void (APIENTRY * GLFRAMEBUFFERRENDERBUFFERFN)( GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer );
  92. typedef GLint (APIENTRY * GLGETATTRIBLOCATIONFN)( GLuint program, const GLchar* name );
  93. typedef void (APIENTRY * GLRENDERBUFFERSTORAGEFN)( GLenum target, GLenum format, GLsizei width, GLsizei height);
  94. typedef void (APIENTRY * GLRENDERBUFFERSTORAGEMULTISAMPLEFN)( GLenum target, GLuint samples, GLenum format, GLsizei width, GLsizei height);
  95. typedef void (APIENTRY * GLDRAWBUFFERSFN)(GLsizei n, const GLenum* buffers);
  96. typedef void (APIENTRY * GLGENERATEMIPMAPFN)(GLenum target);
  97. typedef void (APIENTRY * GLCOMPRESSEDTEXIMAGE2DFN)(GLenum target, GLint level, GLenum format, GLsizei width, GLsizei height, GLint border, GLsizei imagesize, const GLvoid* data);
  98. typedef void (APIENTRY * GLTEXIMAGE3DFN)(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid* data);
  99. typedef void (APIENTRY * GLDRAWELEMENTSINSTANCEDFN)(GLenum mode, GLsizei count, GLenum type, const void* indicies, GLsizei primcount);
  100. typedef void (APIENTRY * GLPATCHPARAMETERIFN)(GLenum pname, GLint value);
  101. typedef void (APIENTRY * GLPATCHPARAMETERFVFN)(GLenum pname, const GLfloat* values);
  102. typedef void (APIENTRY * GLBROKENEXTENSIONFN)();
  103. #if !defined(__unix__) && !defined(__APPLE__)
  104. extern GLACTIVETEXTUREFN glActiveTexture;
  105. extern GLCOMPRESSEDTEXIMAGE2DFN glCompressedTexImage2D;
  106. extern GLTEXIMAGE3DFN glTexImage3D;
  107. #endif
  108. extern GLCREATESHADERFN glCreateShader;
  109. extern GLCREATEPROGRAMFN glCreateProgram;
  110. extern GLSHADERSOURCEFN glShaderSource;
  111. extern GLCOMPILESHADERFN glCompileShader;
  112. extern GLGETSHADERINFOLOGFN glGetShaderInfoLog;
  113. extern GLATTACHSHADERFN glAttachShader;
  114. extern GLLINKPROGRAMFN glLinkProgram;
  115. extern GLGETPROGRAMINFOLOGFN glGetProgramInfoLog;
  116. extern GLISPROGRAMFN glIsProgram;
  117. extern GLISSHADERFN glIsShader;
  118. extern GLGETATTACHEDSHADERSFN glGetAttachedShaders;
  119. extern GLGETUNIFORMLOCATIONFN glGetUniformLocation;
  120. extern GLUNIFORM1FFN glUniform1f;
  121. extern GLUNIFORM1IFN glUniform1i;
  122. extern GLDELETESHADERFN glDeleteShader;
  123. extern GLDELETEPROGRAMFN glDeleteProgram;
  124. extern GLUSEPROGRAMFN glUseProgram;
  125. extern GLVERTEXATTRIBPOINTERFN glVertexAttribPointer;
  126. extern GLVERTEXATTRIBDIVISORFN glVertexAttribDivisor;
  127. extern GLENABLEVERTEXATTRIBARRAYFN glEnableVertexAttribArray;
  128. extern GLDISABLEVERTEXATTRIBARRAYFN glDisableVertexAttribArray;
  129. extern GLUNIFORM2FFN glUniform2f;
  130. extern GLUNIFORM3FFN glUniform3f;
  131. extern GLUNIFORM4FFN glUniform4f;
  132. extern GLUNIFORMMATRIX3FVFN glUniformMatrix3fv;
  133. extern GLUNIFORMMATRIX4FVFN glUniformMatrix4fv;
  134. extern GLUNIFORM1FVFN glUniform1fv;
  135. extern GLUNIFORM2FVFN glUniform2fv;
  136. extern GLUNIFORM3FVFN glUniform3fv;
  137. extern GLUNIFORM4FVFN glUniform4fv;
  138. extern GLGETSHADERIVFN glGetShaderiv;
  139. extern GLGETPROGRAMIVFN glGetProgramiv;
  140. extern GLPROGRAMPARAMETERIFN glProgramParameteri;
  141. extern GLBINDATTRIBLOCATIONFN glBindAttribLocation;
  142. extern GLGENFRAMEBUFFERSFN glGenFramebuffers;
  143. extern GLBINDFRAMEBUFFERFN glBindFramebuffer;
  144. extern GLBLITFRAMEBUFFERFN glBlitFramebuffer;
  145. extern GLFRAMEBUFFERTEXTUREFN glFramebufferTexture;
  146. extern GLFRAMEBUFFERTEXTURE2DFN glFramebufferTexture2D;
  147. extern GLDELETEFRAMEBUFFERSFN glDeleteFramebuffers;
  148. extern GLCHECKFRAMEBUFFERSTATUSFN glCheckFramebufferStatus;
  149. extern GLGENBUFFERSFN glGenBuffers;
  150. extern GLGENRENDERBUFFERSFN glGenRenderbuffers;
  151. extern GLDELETEBUFFERSFN glDeleteBuffers;
  152. extern GLDELETERENDERBUFFERSFN glDeleteRenderbuffers;
  153. extern GLBINDBUFFERFN glBindBuffer;
  154. extern GLBINDRENDERBUFFERFN glBindRenderbuffer;
  155. extern GLBUFFERDATAFN glBufferData;
  156. extern GLGETBUFFERSUBDATAFN glGetBufferSubData;
  157. extern GLFRAMEBUFFERRENDERBUFFERFN glFramebufferRenderbuffer;
  158. extern GLGETATTRIBLOCATIONFN glGetAttribLocation;
  159. extern GLRENDERBUFFERSTORAGEFN glRenderbufferStorage;
  160. extern GLRENDERBUFFERSTORAGEMULTISAMPLEFN glRenderbufferStorageMultisample;
  161. extern GLDRAWBUFFERSFN glDrawBuffers;
  162. extern GLGENERATEMIPMAPFN glGenerateMipmap;
  163. extern GLDRAWELEMENTSINSTANCEDFN glDrawElementsInstanced;
  164. extern GLPATCHPARAMETERIFN glPatchParameteri;
  165. extern GLPATCHPARAMETERFVFN glPatchParameterfv;
  166. extern GLBROKENEXTENSIONFN glBrokenExtension;
  167. /* Extension Constants - Found these from glew and Google */
  168. #define GL_TABLE_TOO_LARGE 0x8031
  169. #define GL_INVALID_FRAMEBUFFER_OPERATION 0x0506
  170. #define GL_SHADING_LANGUAGE_VERSION 0x8B8C
  171. #define GL_VERTEX_SHADER 0x8B31
  172. #define GL_FRAGMENT_SHADER 0x8B30
  173. #define GL_GEOMETRY_SHADER 0x8DD9
  174. #define GL_COMPILE_STATUS 0x8B81
  175. #define GL_LINK_STATUS 0x8B82
  176. #undef GL_GEOMETRY_VERTICES_OUT
  177. #undef GL_GEOMETRY_INPUT_TYPE
  178. #undef GL_GEOMETRY_OUTPUT_TYPE
  179. #define GL_GEOMETRY_VERTICES_OUT 0x8DDA
  180. #define GL_GEOMETRY_INPUT_TYPE 0x8DDB
  181. #define GL_GEOMETRY_OUTPUT_TYPE 0x8DDC
  182. #define GL_MAX_GEOMETRY_OUTPUT_VERTICES 0x8DE0
  183. #define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS 0x8DE1
  184. #define GL_FRAMEBUFFER 0x8D40
  185. #define GL_RENDERBUFFER 0x8D41
  186. #define GL_READ_FRAMEBUFFER 0x8CA8
  187. #define GL_DRAW_FRAMEBUFFER 0x8CA9
  188. #define GL_ARRAY_BUFFER 0x8892
  189. #define GL_ELEMENT_ARRAY_BUFFER 0x8893
  190. #define GL_FRAMEBUFFER_COMPLETE 0x8CD5
  191. #define GL_FRAMEBUFFER_UNDEFINED 0x8219
  192. #define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT 0x8CD6
  193. #define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT 0x8CD7
  194. #define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER 0x8CDB
  195. #define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER 0x8CDC
  196. #define GL_FRAMEBUFFER_UNSUPPORTED 0x8CDD
  197. #define GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE 0x8D56
  198. #define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS 0x8DA8
  199. #define GL_STATIC_DRAW 0x88E4
  200. #define GL_DYNAMIC_COPY 0x88EA
  201. #define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
  202. #define GL_COLOR_ATTACHMENT0 0x8CE0
  203. #define GL_COLOR_ATTACHMENT1 0x8CE1
  204. #define GL_COLOR_ATTACHMENT2 0x8CE2
  205. #define GL_COLOR_ATTACHMENT3 0x8CE3
  206. #define GL_COLOR_ATTACHMENT4 0x8CE4
  207. #define GL_COLOR_ATTACHMENT5 0x8CE5
  208. #define GL_COLOR_ATTACHMENT6 0x8CE6
  209. #define GL_COLOR_ATTACHMENT7 0x8CE7
  210. #define GL_COLOR_ATTACHMENT8 0x8CE8
  211. #define GL_COLOR_ATTACHMENT9 0x8CE9
  212. #define GL_COLOR_ATTACHMENT10 0x8CEA
  213. #define GL_COLOR_ATTACHMENT11 0x8CEB
  214. #define GL_COLOR_ATTACHMENT12 0x8CEC
  215. #define GL_COLOR_ATTACHMENT13 0x8CED
  216. #define GL_COLOR_ATTACHMENT14 0x8CEE
  217. #define GL_COLOR_ATTACHMENT15 0x8CEF
  218. #define GL_DEPTH_ATTACHMENT 0x8D00
  219. #define GL_STENCIL_ATTACHMENT 0x8D20
  220. #define GL_RGBA32F 0x8814
  221. #define GL_RGBA16F 0x881A
  222. #define GL_BGRA 0x80E1
  223. #define GL_BGR 0x80E0
  224. #define GL_COMPRESSED_RGBA_S3TC_DXT1 0x83F1
  225. #define GL_COMPRESSED_RGBA_S3TC_DXT3 0x83F2
  226. #define GL_COMPRESSED_RGBA_S3TC_DXT5 0x83F3
  227. #define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
  228. #define GL_UNSIGNED_SHORT_5_6_5 0x8363
  229. #define GL_DEPTH_COMPONENT24 0x81A6
  230. #define GL_CLAMP_TO_EDGE 0x812F
  231. #define GL_TEXTURE_WRAP_R 0x8072
  232. #define GL_MIRRORED_REPEAT 0x8370
  233. #define GL_TEXTURE_DEPTH 0x8071
  234. #define GL_TEXTURE_MAX_ANISOTROPY 0x84FE
  235. #define GL_MAX_TEXTURE_MAX_ANISOTROPY 0x84FF
  236. #define GL_GENERATE_MIPMAP 0x8191
  237. #define GL_TEXTURE_MAX_LEVEL 0x813D
  238. #define GL_TEXTURE0 0x84C0
  239. #define GL_TEXTURE_3D 0x806F
  240. #define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
  241. #define GL_MULTISAMPLE 0x809D
  242. #define GL_TESS_CONTROL_SHADER 0x8E88
  243. #define GL_TESS_EVALUATION_SHADER 0x8E87
  244. #define GL_PATCH_VERTICES 0x8E72
  245. #endif