renderer_gl.h 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575
  1. /*
  2. * Copyright 2011-2018 Branimir Karadzic. All rights reserved.
  3. * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
  4. */
  5. #ifndef BGFX_RENDERER_GL_H_HEADER_GUARD
  6. #define BGFX_RENDERER_GL_H_HEADER_GUARD
  7. #define BGFX_USE_EGL (BGFX_CONFIG_RENDERER_OPENGLES && (0 \
  8. || BX_PLATFORM_ANDROID \
  9. || BX_PLATFORM_BSD \
  10. || BX_PLATFORM_EMSCRIPTEN \
  11. || BX_PLATFORM_LINUX \
  12. || BX_PLATFORM_NX \
  13. || BX_PLATFORM_RPI \
  14. || BX_PLATFORM_STEAMLINK \
  15. || BX_PLATFORM_WINDOWS \
  16. ) )
  17. #define BGFX_USE_WGL (BGFX_CONFIG_RENDERER_OPENGL && BX_PLATFORM_WINDOWS)
  18. #define BGFX_USE_GLX (BGFX_CONFIG_RENDERER_OPENGL && (0 \
  19. || BX_PLATFORM_BSD \
  20. || BX_PLATFORM_LINUX \
  21. ) )
  22. #define BGFX_USE_GL_DYNAMIC_LIB (0 \
  23. || BX_PLATFORM_BSD \
  24. || BX_PLATFORM_LINUX \
  25. || BX_PLATFORM_OSX \
  26. || BX_PLATFORM_WINDOWS \
  27. )
  28. #if BGFX_CONFIG_RENDERER_OPENGL
  29. # if BGFX_CONFIG_RENDERER_OPENGL >= 31
  30. # include <gl/glcorearb.h>
  31. # if BX_PLATFORM_OSX
  32. # define GL_ARB_shader_objects // OSX collsion with GLhandleARB in gltypes.h
  33. # endif // BX_PLATFORM_OSX
  34. # else
  35. # if BX_PLATFORM_LINUX || BX_PLATFORM_BSD
  36. # define GL_PROTOTYPES
  37. # define GL_GLEXT_LEGACY
  38. # include <GL/gl.h>
  39. # undef GL_PROTOTYPES
  40. # elif BX_PLATFORM_OSX
  41. # define GL_GLEXT_LEGACY
  42. # define long ptrdiff_t
  43. # include <OpenGL/gl.h>
  44. # undef long
  45. # undef GL_VERSION_1_2
  46. # undef GL_VERSION_1_3
  47. # undef GL_VERSION_1_4
  48. # undef GL_VERSION_1_5
  49. # undef GL_VERSION_2_0
  50. # else
  51. # include <GL/gl.h>
  52. # endif // BX_PLATFORM_
  53. # include <gl/glext.h>
  54. # endif // BGFX_CONFIG_RENDERER_OPENGL >= 31
  55. #elif BGFX_CONFIG_RENDERER_OPENGLES
  56. typedef double GLdouble;
  57. # if BGFX_CONFIG_RENDERER_OPENGLES < 30
  58. # if BX_PLATFORM_IOS
  59. # include <OpenGLES/ES2/gl.h>
  60. # include <OpenGLES/ES2/glext.h>
  61. //#define GL_UNSIGNED_INT_10_10_10_2_OES 0x8DF6
  62. #define GL_UNSIGNED_INT_2_10_10_10_REV_EXT 0x8368
  63. #define GL_TEXTURE_3D_OES 0x806F
  64. #define GL_SAMPLER_3D_OES 0x8B5F
  65. #define GL_TEXTURE_WRAP_R_OES 0x8072
  66. #define GL_PROGRAM_BINARY_LENGTH_OES 0x8741
  67. # else
  68. # include <GLES2/gl2platform.h>
  69. # include <GLES2/gl2.h>
  70. # include <GLES2/gl2ext.h>
  71. # endif // BX_PLATFORM_
  72. typedef int64_t GLint64;
  73. typedef uint64_t GLuint64;
  74. # define GL_PROGRAM_BINARY_LENGTH GL_PROGRAM_BINARY_LENGTH_OES
  75. # define GL_HALF_FLOAT GL_HALF_FLOAT_OES
  76. # define GL_RGBA8 GL_RGBA8_OES
  77. # define GL_UNSIGNED_INT_2_10_10_10_REV GL_UNSIGNED_INT_2_10_10_10_REV_EXT
  78. # ifndef GL_TEXTURE_3D
  79. # define GL_TEXTURE_3D GL_TEXTURE_3D_OES
  80. # endif // GL_TEXTURE_3D
  81. # define GL_SAMPLER_3D GL_SAMPLER_3D_OES
  82. # define GL_TEXTURE_WRAP_R GL_TEXTURE_WRAP_R_OES
  83. # ifndef GL_MIN
  84. # define GL_MIN GL_MIN_EXT
  85. # endif // GL_MIN
  86. # ifndef GL_MAX
  87. # define GL_MAX GL_MAX_EXT
  88. # endif // GL_MAX
  89. # define GL_DEPTH_COMPONENT24 GL_DEPTH_COMPONENT24_OES
  90. # define GL_DEPTH24_STENCIL8 GL_DEPTH24_STENCIL8_OES
  91. # define GL_DEPTH_COMPONENT32 GL_DEPTH_COMPONENT32_OES
  92. # define GL_UNSIGNED_INT_24_8 GL_UNSIGNED_INT_24_8_OES
  93. # elif BGFX_CONFIG_RENDERER_OPENGLES >= 30
  94. # include <GLES3/gl3platform.h>
  95. # include <GLES3/gl3.h>
  96. # include <GLES3/gl3ext.h>
  97. # endif // BGFX_CONFIG_RENDERER_
  98. # if BGFX_USE_EGL
  99. # include "glcontext_egl.h"
  100. # endif // BGFX_USE_EGL
  101. # if BX_PLATFORM_EMSCRIPTEN
  102. # include <emscripten/emscripten.h>
  103. # endif // BX_PLATFORM_EMSCRIPTEN
  104. #endif // BGFX_CONFIG_RENDERER_OPENGL
  105. #include "renderer.h"
  106. #include "debug_renderdoc.h"
  107. #ifndef GL_LUMINANCE
  108. # define GL_LUMINANCE 0x1909
  109. #endif // GL_LUMINANCE
  110. #ifndef GL_BGRA
  111. # define GL_BGRA 0x80E1
  112. #endif // GL_BGRA
  113. #ifndef GL_R8
  114. # define GL_R8 0x8229
  115. #endif // GL_R8
  116. #ifndef GL_R8I
  117. # define GL_R8I 0x8231
  118. #endif // GL_R8I
  119. #ifndef GL_R8UI
  120. # define GL_R8UI 0x8232
  121. #endif // GL_R8UI
  122. #ifndef GL_R8_SNORM
  123. # define GL_R8_SNORM 0x8F94
  124. #endif // GL_R8_SNORM
  125. #ifndef GL_R16
  126. # define GL_R16 0x822A
  127. #endif // GL_R16
  128. #ifndef GL_R16I
  129. # define GL_R16I 0x8233
  130. #endif // GL_R16I
  131. #ifndef GL_R16UI
  132. # define GL_R16UI 0x8234
  133. #endif // GL_R16UI
  134. #ifndef GL_R16F
  135. # define GL_R16F 0x822D
  136. #endif // GL_R16F
  137. #ifndef GL_R16_SNORM
  138. # define GL_R16_SNORM 0x8F98
  139. #endif // GL_R16_SNORM
  140. #ifndef GL_R32UI
  141. # define GL_R32UI 0x8236
  142. #endif // GL_R32UI
  143. #ifndef GL_R32F
  144. # define GL_R32F 0x822E
  145. #endif // GL_R32F
  146. #ifndef GL_RG8
  147. # define GL_RG8 0x822B
  148. #endif // GL_RG8
  149. #ifndef GL_RG8I
  150. # define GL_RG8I 0x8237
  151. #endif // GL_RG8I
  152. #ifndef GL_RG8UI
  153. # define GL_RG8UI 0x8238
  154. #endif // GL_RG8UI
  155. #ifndef GL_RG8_SNORM
  156. # define GL_RG8_SNORM 0x8F95
  157. #endif // GL_RG8_SNORM
  158. #ifndef GL_RG16
  159. # define GL_RG16 0x822C
  160. #endif // GL_RG16
  161. #ifndef GL_RG16UI
  162. # define GL_RG16UI 0x823A
  163. #endif // GL_RG16UI
  164. #ifndef GL_RG16F
  165. # define GL_RG16F 0x822F
  166. #endif // GL_RG16F
  167. #ifndef GL_RG16I
  168. # define GL_RG16I 0x8239
  169. #endif // GL_RG16I
  170. #ifndef GL_RG16UI
  171. # define GL_RG16UI 0x823A
  172. #endif // GL_RG16UI
  173. #ifndef GL_RG16_SNORM
  174. # define GL_RG16_SNORM 0x8F99
  175. #endif // GL_RG16_SNORM
  176. #ifndef GL_R32I
  177. # define GL_R32I 0x8235
  178. #endif // GL_R32I
  179. #ifndef GL_R32UI
  180. # define GL_R32UI 0x8236
  181. #endif // GL_R32UI
  182. #ifndef GL_RG32I
  183. # define GL_RG32I 0x823B
  184. #endif // GL_RG32I
  185. #ifndef GL_RG32UI
  186. # define GL_RG32UI 0x823C
  187. #endif // GL_RG32UI
  188. #ifndef GL_RG32F
  189. # define GL_RG32F 0x8230
  190. #endif // GL_RG32F
  191. #ifndef GL_RGB8
  192. # define GL_RGB8 0x8051
  193. #endif // GL_RGB8
  194. #ifndef GL_SRGB
  195. # define GL_SRGB 0x8C40
  196. #endif // GL_SRGB
  197. #ifndef GL_SRGB8
  198. # define GL_SRGB8 0x8C41
  199. #endif // GL_SRGB8
  200. #ifndef GL_RGB8I
  201. # define GL_RGB8I 0x8D8F
  202. #endif // GL_RGB8I
  203. #ifndef GL_RGB8UI
  204. # define GL_RGB8UI 0x8D7D
  205. #endif // GL_RGB8UI
  206. #ifndef GL_RGB8_SNORM
  207. # define GL_RGB8_SNORM 0x8F96
  208. #endif // GL_RGB8_SNORM
  209. #ifndef GL_RGBA8I
  210. # define GL_RGBA8I 0x8D8E
  211. #endif // GL_RGBA8I
  212. #ifndef GL_RGBA8UI
  213. # define GL_RGBA8UI 0x8D7C
  214. #endif // GL_RGBA8UI
  215. #ifndef GL_RGBA8_SNORM
  216. # define GL_RGBA8_SNORM 0x8F97
  217. #endif // GL_RGBA8_SNORM
  218. #ifndef GL_RGBA16I
  219. # define GL_RGBA16I 0x8D88
  220. #endif // GL_RGBA16I
  221. #ifndef GL_RGBA16UI
  222. # define GL_RGBA16UI 0x8D76
  223. #endif // GL_RGBA16UI
  224. #ifndef GL_RGBA16_SNORM
  225. # define GL_RGBA16_SNORM 0x8F9B
  226. #endif // GL_RGBA16_SNORM
  227. #ifndef GL_RGBA32UI
  228. # define GL_RGBA32UI 0x8D70
  229. #endif // GL_RGBA32UI
  230. #ifndef GL_RGBA32F
  231. # define GL_RGBA32F 0x8814
  232. #endif // GL_RGBA32F
  233. #ifndef GL_RGBA32I
  234. # define GL_RGBA32I 0x8D82
  235. #endif // GL_RGBA32I
  236. #ifndef GL_STENCIL_INDEX
  237. # define GL_STENCIL_INDEX 0x1901
  238. #endif // GL_STENCIL_INDEX
  239. #ifndef GL_RED
  240. # define GL_RED 0x1903
  241. #endif // GL_RED
  242. #ifndef GL_RED_INTEGER
  243. # define GL_RED_INTEGER 0x8D94
  244. #endif // GL_RED_INTEGER
  245. #ifndef GL_RG
  246. # define GL_RG 0x8227
  247. #endif // GL_RG
  248. #ifndef GL_RG_INTEGER
  249. # define GL_RG_INTEGER 0x8228
  250. #endif // GL_RG_INTEGER
  251. #ifndef GL_GREEN
  252. # define GL_GREEN 0x1904
  253. #endif // GL_GREEN
  254. #ifndef GL_BLUE
  255. # define GL_BLUE 0x1905
  256. #endif // GL_BLUE
  257. #ifndef GL_RGBA_INTEGER
  258. # define GL_RGBA_INTEGER 0x8D99
  259. #endif // GL_RGBA_INTEGER
  260. #ifndef GL_RGB10_A2
  261. # define GL_RGB10_A2 0x8059
  262. #endif // GL_RGB10_A2
  263. #ifndef GL_RGBA16
  264. # define GL_RGBA16 0x805B
  265. #endif // GL_RGBA16
  266. #ifndef GL_RGBA16F
  267. # define GL_RGBA16F 0x881A
  268. #endif // GL_RGBA16F
  269. #ifndef GL_R16UI
  270. # define GL_R16UI 0x8234
  271. #endif // GL_R16UI
  272. #ifndef GL_RGBA16UI
  273. # define GL_RGBA16UI 0x8D76
  274. #endif // GL_RGBA16UI
  275. #ifndef GL_RGB9_E5
  276. # define GL_RGB9_E5 0x8C3D
  277. #endif // GL_RGB9_E5
  278. #ifndef GL_UNSIGNED_INT_5_9_9_9_REV
  279. # define GL_UNSIGNED_INT_5_9_9_9_REV 0x8C3E
  280. #endif // GL_UNSIGNED_INT_5_9_9_9_REV
  281. #ifndef GL_R11F_G11F_B10F
  282. # define GL_R11F_G11F_B10F 0x8C3A
  283. #endif // GL_R11F_G11F_B10F
  284. #ifndef GL_UNSIGNED_SHORT_5_6_5_REV
  285. # define GL_UNSIGNED_SHORT_5_6_5_REV 0x8364
  286. #endif // GL_UNSIGNED_SHORT_5_6_5_REV
  287. #ifndef GL_UNSIGNED_SHORT_1_5_5_5_REV
  288. # define GL_UNSIGNED_SHORT_1_5_5_5_REV 0x8366
  289. #endif // GL_UNSIGNED_SHORT_1_5_5_5_REV
  290. #ifndef GL_UNSIGNED_SHORT_4_4_4_4_REV
  291. # define GL_UNSIGNED_SHORT_4_4_4_4_REV 0x8365
  292. #endif // GL_UNSIGNED_SHORT_4_4_4_4_REV
  293. #ifndef GL_UNSIGNED_INT_10F_11F_11F_REV
  294. # define GL_UNSIGNED_INT_10F_11F_11F_REV 0x8C3B
  295. #endif // GL_UNSIGNED_INT_10F_11F_11F_REV
  296. #ifndef GL_COMPRESSED_RGB_S3TC_DXT1_EXT
  297. # define GL_COMPRESSED_RGB_S3TC_DXT1_EXT 0x83F0
  298. #endif // GL_COMPRESSED_RGB_S3TC_DXT1_EXT
  299. #ifndef GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
  300. # define GL_COMPRESSED_RGBA_S3TC_DXT1_EXT 0x83F1
  301. #endif // GL_COMPRESSED_RGBA_S3TC_DXT1_EXT
  302. #ifndef GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
  303. # define GL_COMPRESSED_RGBA_S3TC_DXT3_EXT 0x83F2
  304. #endif // GL_COMPRESSED_RGBA_S3TC_DXT3_EXT
  305. #ifndef GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
  306. # define GL_COMPRESSED_RGBA_S3TC_DXT5_EXT 0x83F3
  307. #endif // GL_COMPRESSED_RGBA_S3TC_DXT5_EXT
  308. #ifndef GL_COMPRESSED_LUMINANCE_LATC1_EXT
  309. # define GL_COMPRESSED_LUMINANCE_LATC1_EXT 0x8C70
  310. #endif // GL_COMPRESSED_LUMINANCE_LATC1_EXT
  311. #ifndef GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
  312. # define GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT 0x8C72
  313. #endif // GL_COMPRESSED_LUMINANCE_ALPHA_LATC2_EXT
  314. #ifndef GL_COMPRESSED_RED_RGTC1
  315. # define GL_COMPRESSED_RED_RGTC1 0x8DBB
  316. #endif // GL_COMPRESSED_RED_RGTC1
  317. #ifndef GL_COMPRESSED_RG_RGTC2
  318. # define GL_COMPRESSED_RG_RGTC2 0x8DBD
  319. #endif // GL_COMPRESSED_RG_RGTC2
  320. #ifndef GL_ETC1_RGB8_OES
  321. # define GL_ETC1_RGB8_OES 0x8D64
  322. #endif // GL_ETC1_RGB8_OES
  323. #ifndef GL_COMPRESSED_RGB8_ETC2
  324. # define GL_COMPRESSED_RGB8_ETC2 0x9274
  325. #endif // GL_COMPRESSED_RGB8_ETC2
  326. #ifndef GL_COMPRESSED_RGBA8_ETC2_EAC
  327. # define GL_COMPRESSED_RGBA8_ETC2_EAC 0x9278
  328. #endif // GL_COMPRESSED_RGBA8_ETC2_EAC
  329. #ifndef GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
  330. # define GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9276
  331. #endif // GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
  332. #ifndef GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
  333. # define GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG 0x8C01
  334. #endif // GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG
  335. #ifndef GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
  336. # define GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG 0x8C03
  337. #endif // GL_COMPRESSED_RGBA_PVRTC_2BPPV1_IMG
  338. #ifndef GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
  339. # define GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG 0x8C00
  340. #endif // GL_COMPRESSED_RGB_PVRTC_4BPPV1_IMG
  341. #ifndef GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
  342. # define GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG 0x8C02
  343. #endif // GL_COMPRESSED_RGBA_PVRTC_4BPPV1_IMG
  344. #ifndef GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG
  345. # define GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG 0x9137
  346. #endif // GL_COMPRESSED_RGBA_PVRTC_2BPPV2_IMG
  347. #ifndef GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG
  348. # define GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG 0x9138
  349. #endif // GL_COMPRESSED_RGBA_PVRTC_4BPPV2_IMG
  350. #ifndef GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
  351. # define GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT 0x8A54
  352. #endif // GL_COMPRESSED_SRGB_PVRTC_2BPPV1_EXT
  353. #ifndef GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
  354. # define GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT 0x8A55
  355. #endif // GL_COMPRESSED_SRGB_PVRTC_4BPPV1_EXT
  356. #ifndef GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
  357. # define GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT 0x8A56
  358. #endif // GL_COMPRESSED_SRGB_ALPHA_PVRTC_2BPPV1_EXT
  359. #ifndef GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT
  360. # define GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT 0x8A57
  361. #endif // GL_COMPRESSED_SRGB_ALPHA_PVRTC_4BPPV1_EXT
  362. #ifndef ATC_RGB_AMD
  363. #define GL_ATC_RGB_AMD 0x8C92
  364. #endif
  365. #ifndef GL_ATC_RGBA_EXPLICIT_ALPHA_AMD
  366. # define GL_ATC_RGBA_EXPLICIT_ALPHA_AMD 0x8C93
  367. #endif
  368. #ifndef ATC_RGBA_INTERPOLATED_ALPHA_AMD
  369. # define GL_ATC_RGBA_INTERPOLATED_ALPHA_AMD 0x87EE
  370. #endif
  371. #ifndef GL_COMPRESSED_RGBA_ASTC_4x4_KHR
  372. # define GL_COMPRESSED_RGBA_ASTC_4x4_KHR 0x93B0
  373. #endif
  374. #ifndef GL_COMPRESSED_RGBA_ASTC_5x5_KHR
  375. # define GL_COMPRESSED_RGBA_ASTC_5x5_KHR 0x93B2
  376. #endif
  377. #ifndef GL_COMPRESSED_RGBA_ASTC_6x6_KHR
  378. # define GL_COMPRESSED_RGBA_ASTC_6x6_KHR 0x93B4
  379. #endif
  380. #ifndef GL_COMPRESSED_RGBA_ASTC_8x5_KHR
  381. # define GL_COMPRESSED_RGBA_ASTC_8x5_KHR 0x93B5
  382. #endif
  383. #ifndef GL_COMPRESSED_RGBA_ASTC_8x6_KHR
  384. # define GL_COMPRESSED_RGBA_ASTC_8x6_KHR 0x93B6
  385. #endif
  386. #ifndef GL_COMPRESSED_RGBA_ASTC_10x5_KHR
  387. # define GL_COMPRESSED_RGBA_ASTC_10x5_KHR 0x93B8
  388. #endif
  389. #ifndef GL_COMPRESSED_SRGB8_ASTC_4x4_KHR
  390. # define GL_COMPRESSED_SRGB8_ASTC_4x4_KHR 0x93D0
  391. #endif
  392. #ifndef GL_COMPRESSED_SRGB8_ASTC_5x5_KHR
  393. # define GL_COMPRESSED_SRGB8_ASTC_5x5_KHR 0x93D2
  394. #endif
  395. #ifndef GL_COMPRESSED_SRGB8_ASTC_6x6_KHR
  396. # define GL_COMPRESSED_SRGB8_ASTC_6x6_KHR 0x93D4
  397. #endif
  398. #ifndef GL_COMPRESSED_SRGB8_ASTC_8x5_KHR
  399. # define GL_COMPRESSED_SRGB8_ASTC_8x5_KHR 0x93D5
  400. #endif
  401. #ifndef GL_COMPRESSED_SRGB8_ASTC_8x6_KHR
  402. # define GL_COMPRESSED_SRGB8_ASTC_8x6_KHR 0x93D6
  403. #endif
  404. #ifndef GL_COMPRESSED_SRGB8_ASTC_10x5_KHR
  405. # define GL_COMPRESSED_SRGB8_ASTC_10x5_KHR 0x93D8
  406. #endif
  407. #ifndef GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
  408. # define GL_COMPRESSED_RGBA_BPTC_UNORM_ARB 0x8E8C
  409. #endif // GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
  410. #ifndef GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB
  411. # define GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB 0x8E8D
  412. #endif // GL_COMPRESSED_SRGB_ALPHA_BPTC_UNORM_ARB
  413. #ifndef GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
  414. # define GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB 0x8E8E
  415. #endif // GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
  416. #ifndef GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
  417. # define GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB 0x8E8F
  418. #endif // GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
  419. #ifndef GL_SRGB8_ALPHA8
  420. # define GL_SRGB8_ALPHA8 0x8C43
  421. #endif // GL_SRGB8_ALPHA8
  422. #ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
  423. # define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT 0x8C4D
  424. #endif // GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT
  425. #ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
  426. # define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT 0x8C4E
  427. #endif // GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT
  428. #ifndef GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
  429. # define GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT 0x8C4F
  430. #endif // GL_COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT
  431. #ifndef GL_COMPRESSED_SRGB8_ETC2
  432. # define GL_COMPRESSED_SRGB8_ETC2 0x9275
  433. #endif // GL_COMPRESSED_SRGB8_ETC2
  434. #ifndef GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
  435. # define GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2 0x9277
  436. #endif // GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
  437. #ifndef GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE
  438. # define GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE 0x93A0
  439. #endif // GL_TRANSLATED_SHADER_SOURCE_LENGTH_ANGLE
  440. #ifndef GL_TEXTURE_MAX_ANISOTROPY_EXT
  441. # define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
  442. #endif // GL_TEXTURE_MAX_ANISOTROPY_EXT
  443. #ifndef GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
  444. # define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
  445. #endif // GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT
  446. #ifndef GL_TEXTURE_SWIZZLE_RGBA
  447. # define GL_TEXTURE_SWIZZLE_RGBA 0x8E46
  448. #endif // GL_TEXTURE_SWIZZLE_RGBA
  449. #ifndef GL_MAX_SAMPLES
  450. # define GL_MAX_SAMPLES 0x8D57
  451. #endif // GL_MAX_SAMPLES
  452. #ifndef GL_MAX_COLOR_ATTACHMENTS
  453. # define GL_MAX_COLOR_ATTACHMENTS 0x8CDF
  454. #endif // GL_MAX_COLOR_ATTACHMENTS
  455. #ifndef GL_MAX_DRAW_BUFFERS
  456. # define GL_MAX_DRAW_BUFFERS 0x8824
  457. #endif // GL_MAX_DRAW_BUFFERS
  458. #ifndef GL_MAX_ARRAY_TEXTURE_LAYERS
  459. # define GL_MAX_ARRAY_TEXTURE_LAYERS 0x88FF
  460. #endif // GL_MAX_ARRAY_TEXTURE_LAYERS
  461. #ifndef GL_QUERY_RESULT
  462. # define GL_QUERY_RESULT 0x8866
  463. #endif // GL_QUERY_RESULT
  464. #ifndef GL_QUERY_RESULT_AVAILABLE
  465. # define GL_QUERY_RESULT_AVAILABLE 0x8867
  466. #endif // GL_QUERY_RESULT_AVAILABLE
  467. #ifndef GL_SAMPLES_PASSED
  468. # define GL_SAMPLES_PASSED 0x8914
  469. #endif // GL_SAMPLES_PASSED
  470. #ifndef GL_ANY_SAMPLES_PASSED
  471. # define GL_ANY_SAMPLES_PASSED 0x8C2F
  472. #endif // GL_ANY_SAMPLES_PASSED
  473. #ifndef GL_READ_FRAMEBUFFER
  474. # define GL_READ_FRAMEBUFFER 0x8CA8
  475. #endif /// GL_READ_FRAMEBUFFER
  476. #ifndef GL_DRAW_FRAMEBUFFER
  477. # define GL_DRAW_FRAMEBUFFER 0x8CA9
  478. #endif // GL_DRAW_FRAMEBUFFER
  479. #ifndef GL_TIME_ELAPSED
  480. # define GL_TIME_ELAPSED 0x88BF
  481. #endif // GL_TIME_ELAPSED
  482. #ifndef GL_TIMESTAMP
  483. # define GL_TIMESTAMP 0x8E28
  484. #endif // GL_TIMESTAMP
  485. #ifndef GL_VBO_FREE_MEMORY_ATI
  486. # define GL_VBO_FREE_MEMORY_ATI 0x87FB
  487. #endif // GL_VBO_FREE_MEMORY_ATI
  488. #ifndef GL_TEXTURE_FREE_MEMORY_ATI
  489. # define GL_TEXTURE_FREE_MEMORY_ATI 0x87FC
  490. #endif // GL_TEXTURE_FREE_MEMORY_ATI
  491. #ifndef GL_RENDERBUFFER_FREE_MEMORY_ATI
  492. # define GL_RENDERBUFFER_FREE_MEMORY_ATI 0x87FD
  493. #endif // GL_RENDERBUFFER_FREE_MEMORY_ATI
  494. // http://developer.download.nvidia.com/opengl/specs/GL_NVX_gpu_memory_info.txt
  495. #ifndef GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
  496. # define GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX 0x9047
  497. #endif // GL_GPU_MEMORY_INFO_DEDICATED_VIDMEM_NVX
  498. #ifndef GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX
  499. # define GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX 0x9048
  500. #endif // GL_GPU_MEMORY_INFO_TOTAL_AVAILABLE_MEMORY_NVX
  501. #ifndef GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
  502. # define GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX 0x9049
  503. #endif // GL_GPU_MEMORY_INFO_CURRENT_AVAILABLE_VIDMEM_NVX
  504. #ifndef GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX
  505. # define GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX 0x904A
  506. #endif // GL_GPU_MEMORY_INFO_EVICTION_COUNT_NVX
  507. #ifndef GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX
  508. # define GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX 0x904B
  509. #endif // GL_GPU_MEMORY_INFO_EVICTED_MEMORY_NVX
  510. #ifndef GL_UNPACK_ROW_LENGTH
  511. # define GL_UNPACK_ROW_LENGTH 0x0CF2
  512. #endif // GL_UNPACK_ROW_LENGTH
  513. #ifndef GL_DEPTH_STENCIL
  514. # define GL_DEPTH_STENCIL 0x84F9
  515. #endif // GL_DEPTH_STENCIL
  516. #ifndef GL_DEPTH_COMPONENT32
  517. # define GL_DEPTH_COMPONENT32 0x81A7
  518. #endif // GL_DEPTH_COMPONENT32
  519. #ifndef GL_DEPTH_COMPONENT32F
  520. # define GL_DEPTH_COMPONENT32F 0x8CAC
  521. #endif // GL_DEPTH_COMPONENT32F
  522. #ifndef GL_DEPTH_STENCIL_ATTACHMENT
  523. # define GL_DEPTH_STENCIL_ATTACHMENT 0x821A
  524. #endif // GL_DEPTH_STENCIL_ATTACHMENT
  525. #ifndef GL_TEXTURE_COMPARE_MODE
  526. # define GL_TEXTURE_COMPARE_MODE 0x884C
  527. #endif // GL_TEXTURE_COMPARE_MODE
  528. #ifndef GL_TEXTURE_COMPARE_FUNC
  529. # define GL_TEXTURE_COMPARE_FUNC 0x884D
  530. #endif // GL_TEXTURE_COMPARE_FUNC
  531. #ifndef GL_COMPARE_REF_TO_TEXTURE
  532. # define GL_COMPARE_REF_TO_TEXTURE 0x884E
  533. #endif // GL_COMPARE_REF_TO_TEXTURE
  534. #ifndef GL_INT_SAMPLER_2D
  535. # define GL_INT_SAMPLER_2D 0x8DCA
  536. #endif // GL_INT_SAMPLER_2D
  537. #ifndef GL_UNSIGNED_INT_SAMPLER_2D
  538. # define GL_UNSIGNED_INT_SAMPLER_2D 0x8DD2
  539. #endif // GL_UNSIGNED_INT_SAMPLER_2D
  540. #ifndef GL_INT_SAMPLER_2D_ARRAY
  541. # define GL_INT_SAMPLER_2D_ARRAY 0x8DCF
  542. #endif // GL_INT_SAMPLER_2D_ARRAY
  543. #ifndef GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
  544. # define GL_UNSIGNED_INT_SAMPLER_2D_ARRAY 0x8DD7
  545. #endif // GL_UNSIGNED_INT_SAMPLER_2D_ARRAY
  546. #ifndef GL_INT_SAMPLER_3D
  547. # define GL_INT_SAMPLER_3D 0x8DCB
  548. #endif // GL_INT_SAMPLER_3D
  549. #ifndef GL_UNSIGNED_INT_SAMPLER_3D
  550. # define GL_UNSIGNED_INT_SAMPLER_3D 0x8DD3
  551. #endif // GL_UNSIGNED_INT_SAMPLER_3D
  552. #ifndef GL_INT_SAMPLER_CUBE
  553. # define GL_INT_SAMPLER_CUBE 0x8DCC
  554. #endif // GL_INT_SAMPLER_CUBEER_3D
  555. #ifndef GL_UNSIGNED_INT_SAMPLER_CUBE
  556. # define GL_UNSIGNED_INT_SAMPLER_CUBE 0x8DD4
  557. #endif // GL_UNSIGNED_INT_SAMPLER_CUBE
  558. #ifndef GL_SAMPLER_2D_MULTISAMPLE
  559. # define GL_SAMPLER_2D_MULTISAMPLE 0x9108
  560. #endif // GL_SAMPLER_2D_MULTISAMPLE
  561. #ifndef GL_INT_SAMPLER_2D_MULTISAMPLE
  562. # define GL_INT_SAMPLER_2D_MULTISAMPLE 0x9109
  563. #endif // GL_INT_SAMPLER_2D_MULTISAMPLE
  564. #ifndef GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE
  565. # define GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE 0x910A
  566. #endif // GL_UNSIGNED_INT_SAMPLER_2D_MULTISAMPLE
  567. #ifndef GL_SAMPLER_2D_SHADOW
  568. # define GL_SAMPLER_2D_SHADOW 0x8B62
  569. #endif // GL_SAMPLER_2D_SHADOW
  570. #ifndef GL_SAMPLER_2D_ARRAY
  571. # define GL_SAMPLER_2D_ARRAY 0x8DC1
  572. #endif // GL_SAMPLER_2D_ARRAY
  573. #ifndef GL_SAMPLER_2D_ARRAY_SHADOW
  574. # define GL_SAMPLER_2D_ARRAY_SHADOW 0x8DC4
  575. #endif // GL_SAMPLER_2D_ARRAY_SHADOW
  576. #ifndef GL_TEXTURE_MAX_LEVEL
  577. # define GL_TEXTURE_MAX_LEVEL 0x813D
  578. #endif // GL_TEXTURE_MAX_LEVEL
  579. #ifndef GL_COMPUTE_SHADER
  580. # define GL_COMPUTE_SHADER 0x91B9
  581. #endif // GL_COMPUTE_SHADER
  582. #ifndef GL_READ_ONLY
  583. # define GL_READ_ONLY 0x88B8
  584. #endif // GL_READ_ONLY
  585. #ifndef GL_WRITE_ONLY
  586. # define GL_WRITE_ONLY 0x88B9
  587. #endif // GL_WRITE_ONLY
  588. #ifndef GL_READ_WRITE
  589. # define GL_READ_WRITE 0x88BA
  590. #endif // GL_READ_WRITE
  591. #ifndef GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT
  592. # define GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT 0x00000001
  593. #endif // GL_VERTEX_ATTRIB_ARRAY_BARRIER_BIT
  594. #ifndef GL_ELEMENT_ARRAY_BARRIER_BIT
  595. # define GL_ELEMENT_ARRAY_BARRIER_BIT 0x00000002
  596. #endif // GL_ELEMENT_ARRAY_BARRIER_BIT
  597. #ifndef GL_SHADER_IMAGE_ACCESS_BARRIER_BIT
  598. # define GL_SHADER_IMAGE_ACCESS_BARRIER_BIT 0x00000020
  599. #endif // GL_SHADER_IMAGE_ACCESS_BARRIER_BIT
  600. #ifndef GL_SHADER_STORAGE_BARRIER_BIT
  601. # define GL_SHADER_STORAGE_BARRIER_BIT 0x00002000
  602. #endif // GL_SHADER_STORAGE_BARRIER_BIT
  603. #ifndef GL_SHADER_STORAGE_BUFFER
  604. # define GL_SHADER_STORAGE_BUFFER 0x90D2
  605. #endif // GL_SHADER_STORAGE_BUFFER
  606. #ifndef GL_IMAGE_1D
  607. # define GL_IMAGE_1D 0x904C
  608. #endif // GL_IMAGE_1D
  609. #ifndef GL_IMAGE_2D
  610. # define GL_IMAGE_2D 0x904D
  611. #endif // GL_IMAGE_2D
  612. #ifndef GL_IMAGE_2D_ARRAY
  613. # define GL_IMAGE_2D_ARRAY 0x9053
  614. #endif // GL_IMAGE_2D_ARRAY
  615. #ifndef GL_IMAGE_3D
  616. # define GL_IMAGE_3D 0x904E
  617. #endif // GL_IMAGE_3D
  618. #ifndef GL_IMAGE_CUBE
  619. # define GL_IMAGE_CUBE 0x9050
  620. #endif // GL_IMAGE_CUBE
  621. #ifndef GL_INT_IMAGE_1D
  622. # define GL_INT_IMAGE_1D 0x9057
  623. #endif // GL_INT_IMAGE_1D
  624. #ifndef GL_INT_IMAGE_2D
  625. # define GL_INT_IMAGE_2D 0x9058
  626. #endif // GL_INT_IMAGE_2D
  627. #ifndef GL_INT_IMAGE_3D
  628. # define GL_INT_IMAGE_3D 0x9059
  629. #endif // GL_INT_IMAGE_3D
  630. #ifndef GL_INT_IMAGE_CUBE
  631. # define GL_INT_IMAGE_CUBE 0x905B
  632. #endif // GL_INT_IMAGE_CUBE
  633. #ifndef GL_UNSIGNED_INT_IMAGE_1D
  634. # define GL_UNSIGNED_INT_IMAGE_1D 0x9062
  635. #endif // GL_UNSIGNED_INT_IMAGE_1D
  636. #ifndef GL_UNSIGNED_INT_IMAGE_2D
  637. # define GL_UNSIGNED_INT_IMAGE_2D 0x9063
  638. #endif // GL_UNSIGNED_INT_IMAGE_2D
  639. #ifndef GL_UNSIGNED_INT_IMAGE_3D
  640. # define GL_UNSIGNED_INT_IMAGE_3D 0x9064
  641. #endif // GL_UNSIGNED_INT_IMAGE_3D
  642. #ifndef GL_UNSIGNED_INT_IMAGE_CUBE
  643. # define GL_UNSIGNED_INT_IMAGE_CUBE 0x9066
  644. #endif // GL_UNSIGNED_INT_IMAGE_CUBE
  645. #ifndef GL_PROGRAM_INPUT
  646. # define GL_PROGRAM_INPUT 0x92E3
  647. #endif // GL_PROGRAM_INPUT
  648. #ifndef GL_ACTIVE_RESOURCES
  649. # define GL_ACTIVE_RESOURCES 0x92F5
  650. #endif // GL_ACTIVE_RESOURCES
  651. #ifndef GL_UNIFORM
  652. # define GL_UNIFORM 0x92E1
  653. #endif // GL_UNIFORM
  654. #ifndef GL_BUFFER_VARIABLE
  655. # define GL_BUFFER_VARIABLE 0x92E5
  656. #endif // GL_BUFFER_VARIABLE
  657. #ifndef GL_UNSIGNED_INT_VEC2
  658. # define GL_UNSIGNED_INT_VEC2 0x8DC6
  659. #endif // GL_UNSIGNED_INT_VEC2
  660. #ifndef GL_UNSIGNED_INT_VEC3
  661. # define GL_UNSIGNED_INT_VEC3 0x8DC7
  662. #endif // GL_UNSIGNED_INT_VEC3
  663. #ifndef GL_UNSIGNED_INT_VEC4
  664. # define GL_UNSIGNED_INT_VEC4 0x8DC8
  665. #endif // GL_UNSIGNED_INT_VEC4
  666. #ifndef GL_TYPE
  667. # define GL_TYPE 0x92FA
  668. #endif // GL_TYPE
  669. #ifndef GL_ARRAY_SIZE
  670. # define GL_ARRAY_SIZE 0x92FB
  671. #endif // GL_ARRAY_SIZE
  672. #ifndef GL_LOCATION
  673. # define GL_LOCATION 0x930E
  674. #endif // GL_LOCATION
  675. #ifndef GL_UNSIGNED_INT_10_10_10_2
  676. # define GL_UNSIGNED_INT_10_10_10_2 0x8DF6
  677. #endif // GL_UNSIGNED_INT_10_10_10_2
  678. #ifndef GL_FRAMEBUFFER_SRGB
  679. # define GL_FRAMEBUFFER_SRGB 0x8DB9
  680. #endif // GL_FRAMEBUFFER_SRGB
  681. #ifndef GL_NUM_EXTENSIONS
  682. # define GL_NUM_EXTENSIONS 0x821D
  683. #endif // GL_NUM_EXTENSIONS
  684. #ifndef GL_SAMPLE_ALPHA_TO_COVERAGE
  685. # define GL_SAMPLE_ALPHA_TO_COVERAGE 0x809E
  686. #endif // GL_SAMPLE_ALPHA_TO_COVERAGE
  687. #ifndef GL_CONSERVATIVE_RASTERIZATION_NV
  688. # define GL_CONSERVATIVE_RASTERIZATION_NV 0x9346
  689. #endif // GL_CONSERVATIVE_RASTERIZATION_NV
  690. #ifndef GL_NEGATIVE_ONE_TO_ONE
  691. # define GL_NEGATIVE_ONE_TO_ONE 0x935E
  692. #endif // GL_NEGATIVE_ONE_TO_ONE
  693. #ifndef GL_ZERO_TO_ONE
  694. # define GL_ZERO_TO_ONE 0x935F
  695. #endif // GL_ZERO_TO_ONE
  696. #ifndef GL_LOWER_LEFT
  697. # define GL_LOWER_LEFT 0x8CA1
  698. #endif // GL_LOWER_LEFT
  699. #ifndef GL_UPPER_LEFT
  700. # define GL_UPPER_LEFT 0x8CA2
  701. #endif // GL_UPPER_LEFT
  702. #ifndef GL_SHADER
  703. # define GL_SHADER 0x82E1
  704. #endif // GL_SHADER
  705. #ifndef GL_TEXTURE
  706. # define GL_TEXTURE 0x1702
  707. #endif // GL_TEXTURE
  708. // _KHR or _ARB...
  709. #define GL_DEBUG_OUTPUT_SYNCHRONOUS 0x8242
  710. #define GL_DEBUG_NEXT_LOGGED_MESSAGE_LENGTH 0x8243
  711. #define GL_DEBUG_CALLBACK_FUNCTION 0x8244
  712. #define GL_DEBUG_CALLBACK_USER_PARAM 0x8245
  713. #define GL_DEBUG_SOURCE_API 0x8246
  714. #define GL_DEBUG_SOURCE_WINDOW_SYSTEM 0x8247
  715. #define GL_DEBUG_SOURCE_SHADER_COMPILER 0x8248
  716. #define GL_DEBUG_SOURCE_THIRD_PARTY 0x8249
  717. #define GL_DEBUG_SOURCE_APPLICATION 0x824A
  718. #define GL_DEBUG_SOURCE_OTHER 0x824B
  719. #define GL_DEBUG_TYPE_ERROR 0x824C
  720. #define GL_DEBUG_TYPE_DEPRECATED_BEHAVIOR 0x824D
  721. #define GL_DEBUG_TYPE_UNDEFINED_BEHAVIOR 0x824E
  722. #define GL_DEBUG_TYPE_PORTABILITY 0x824F
  723. #define GL_DEBUG_TYPE_PERFORMANCE 0x8250
  724. #define GL_DEBUG_TYPE_OTHER 0x8251
  725. #define GL_DEBUG_TYPE_MARKER 0x8268
  726. #define GL_DEBUG_TYPE_PUSH_GROUP 0x8269
  727. #define GL_DEBUG_TYPE_POP_GROUP 0x826A
  728. #define GL_DEBUG_SEVERITY_NOTIFICATION 0x826B
  729. #define GL_MAX_DEBUG_GROUP_STACK_DEPTH 0x826C
  730. #define GL_DEBUG_GROUP_STACK_DEPTH 0x826D
  731. #define GL_MAX_LABEL_LENGTH 0x82E8
  732. #define GL_MAX_DEBUG_MESSAGE_LENGTH 0x9143
  733. #define GL_MAX_DEBUG_LOGGED_MESSAGES 0x9144
  734. #define GL_DEBUG_LOGGED_MESSAGES 0x9145
  735. #define GL_DEBUG_SEVERITY_HIGH 0x9146
  736. #define GL_DEBUG_SEVERITY_MEDIUM 0x9147
  737. #define GL_DEBUG_SEVERITY_LOW 0x9148
  738. #ifndef GL_DEPTH_CLAMP
  739. # define GL_DEPTH_CLAMP 0x864F
  740. #endif // GL_DEPTH_CLAMP
  741. #ifndef GL_TEXTURE_BORDER_COLOR
  742. # define GL_TEXTURE_BORDER_COLOR 0x1004
  743. #endif // GL_TEXTURE_BORDER_COLOR
  744. #ifndef GL_CLAMP_TO_BORDER
  745. # define GL_CLAMP_TO_BORDER 0x812D
  746. #endif // GL_CLAMP_TO_BORDER
  747. #ifndef GL_TEXTURE_2D_ARRAY
  748. # define GL_TEXTURE_2D_ARRAY 0x8C1A
  749. #endif // GL_TEXTURE_2D_ARRAY
  750. #ifndef GL_TEXTURE_2D_MULTISAMPLE_ARRAY
  751. # define GL_TEXTURE_2D_MULTISAMPLE_ARRAY 0x9102
  752. #endif // GL_TEXTURE_2D_MULTISAMPLE_ARRAY
  753. #ifndef GL_TEXTURE_CUBE_MAP_ARRAY
  754. # define GL_TEXTURE_CUBE_MAP_ARRAY 0x9009
  755. #endif // GL_TEXTURE_CUBE_MAP_ARRAY
  756. #ifndef GL_TEXTURE_CUBE_MAP_SEAMLESS
  757. # define GL_TEXTURE_CUBE_MAP_SEAMLESS 0x884F
  758. #endif // GL_TEXTURE_CUBE_MAP_SEAMLESS
  759. #ifndef GL_TEXTURE_2D_MULTISAMPLE
  760. # define GL_TEXTURE_2D_MULTISAMPLE 0x9100
  761. #endif // GL_TEXTURE_2D_MULTISAMPLE
  762. #ifndef GL_DRAW_INDIRECT_BUFFER
  763. # define GL_DRAW_INDIRECT_BUFFER 0x8F3F
  764. #endif // GL_DRAW_INDIRECT_BUFFER
  765. #ifndef GL_DISPATCH_INDIRECT_BUFFER
  766. # define GL_DISPATCH_INDIRECT_BUFFER 0x90EE
  767. #endif // GL_DISPATCH_INDIRECT_BUFFER
  768. #ifndef GL_MAX_NAME_LENGTH
  769. # define GL_MAX_NAME_LENGTH 0x92F6
  770. #endif // GL_MAX_NAME_LENGTH
  771. #ifndef GL_DEBUG_SEVERITY_NOTIFICATION
  772. # define GL_DEBUG_SEVERITY_NOTIFICATION 0x826b
  773. #endif // GL_DEBUG_SEVERITY_NOTIFICATION
  774. #ifndef GL_LINE
  775. # define GL_LINE 0x1B01
  776. #endif // GL_LINE
  777. #ifndef GL_FILL
  778. # define GL_FILL 0x1B02
  779. #endif // GL_FILL
  780. #ifndef GL_MULTISAMPLE
  781. # define GL_MULTISAMPLE 0x809D
  782. #endif // GL_MULTISAMPLE
  783. #ifndef GL_LINE_SMOOTH
  784. # define GL_LINE_SMOOTH 0x0B20
  785. #endif // GL_LINE_SMOOTH
  786. #ifndef GL_TEXTURE_LOD_BIAS
  787. # define GL_TEXTURE_LOD_BIAS 0x8501
  788. #endif // GL_TEXTURE_LOD_BIAS
  789. #if BX_PLATFORM_WINDOWS
  790. # include <windows.h>
  791. #elif BX_PLATFORM_LINUX || BX_PLATFORM_BSD
  792. # include "glcontext_glx.h"
  793. #elif BX_PLATFORM_OSX
  794. # include "glcontext_nsgl.h"
  795. #elif BX_PLATFORM_IOS
  796. # include "glcontext_eagl.h"
  797. #endif // BX_PLATFORM_
  798. #if BGFX_USE_WGL
  799. # include "glcontext_wgl.h"
  800. #endif // BGFX_USE_WGL
  801. #ifndef GL_APIENTRY
  802. # define GL_APIENTRY APIENTRY
  803. #endif // GL_APIENTRY
  804. #ifndef GL_APIENTRYP
  805. # define GL_APIENTRYP GL_APIENTRY*
  806. #endif // GL_APIENTRYP
  807. #if !BGFX_CONFIG_RENDERER_OPENGL
  808. # define glClearDepth glClearDepthf
  809. #endif // !BGFX_CONFIG_RENDERER_OPENGL
  810. namespace bgfx
  811. {
  812. class UniformBuffer;
  813. } // namespace bgfx
  814. namespace bgfx { namespace gl
  815. {
  816. void dumpExtensions(const char* _extensions);
  817. const char* glEnumName(GLenum _enum);
  818. #define _GL_CHECK(_check, _call) \
  819. BX_MACRO_BLOCK_BEGIN \
  820. /*BX_TRACE(#_call);*/ \
  821. _call; \
  822. GLenum gl_err = glGetError(); \
  823. _check(0 == gl_err, #_call "; GL error 0x%x: %s", gl_err, glEnumName(gl_err) ); \
  824. BX_UNUSED(gl_err); \
  825. BX_MACRO_BLOCK_END
  826. #define IGNORE_GL_ERROR_CHECK(...) BX_NOOP()
  827. #if BGFX_CONFIG_DEBUG
  828. # define GL_CHECK(_call) _GL_CHECK(BX_CHECK, _call)
  829. # define GL_CHECK_I(_call) _GL_CHECK(IGNORE_GL_ERROR_CHECK, _call)
  830. #else
  831. # define GL_CHECK(_call) _call
  832. # define GL_CHECK_I(_call) _call
  833. #endif // BGFX_CONFIG_DEBUG
  834. #define GL_IMPORT_TYPEDEFS 1
  835. #define GL_IMPORT(_optional, _proto, _func, _import) extern _proto _func
  836. #include "glimports.h"
  837. class SamplerStateCache
  838. {
  839. public:
  840. GLuint add(uint32_t _hash)
  841. {
  842. invalidate(_hash);
  843. GLuint samplerId;
  844. GL_CHECK(glGenSamplers(1, &samplerId) );
  845. m_hashMap.insert(stl::make_pair(_hash, samplerId) );
  846. return samplerId;
  847. }
  848. GLuint find(uint32_t _hash)
  849. {
  850. HashMap::iterator it = m_hashMap.find(_hash);
  851. if (it != m_hashMap.end() )
  852. {
  853. return it->second;
  854. }
  855. return UINT32_MAX;
  856. }
  857. void invalidate(uint32_t _hash)
  858. {
  859. HashMap::iterator it = m_hashMap.find(_hash);
  860. if (it != m_hashMap.end() )
  861. {
  862. GL_CHECK(glDeleteSamplers(1, &it->second) );
  863. m_hashMap.erase(it);
  864. }
  865. }
  866. void invalidate()
  867. {
  868. for (HashMap::iterator it = m_hashMap.begin(), itEnd = m_hashMap.end(); it != itEnd; ++it)
  869. {
  870. GL_CHECK(glDeleteSamplers(1, &it->second) );
  871. }
  872. m_hashMap.clear();
  873. }
  874. uint32_t getCount() const
  875. {
  876. return uint32_t(m_hashMap.size() );
  877. }
  878. private:
  879. typedef stl::unordered_map<uint32_t, GLuint> HashMap;
  880. HashMap m_hashMap;
  881. };
  882. struct IndexBufferGL
  883. {
  884. void create(uint32_t _size, void* _data, uint16_t _flags)
  885. {
  886. m_size = _size;
  887. m_flags = _flags;
  888. GL_CHECK(glGenBuffers(1, &m_id) );
  889. BX_CHECK(0 != m_id, "Failed to generate buffer id.");
  890. GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id) );
  891. GL_CHECK(glBufferData(GL_ELEMENT_ARRAY_BUFFER
  892. , _size
  893. , _data
  894. , (NULL==_data) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW
  895. ) );
  896. GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) );
  897. }
  898. void update(uint32_t _offset, uint32_t _size, void* _data, bool _discard = false)
  899. {
  900. BX_CHECK(0 != m_id, "Updating invalid index buffer.");
  901. if (_discard)
  902. {
  903. // orphan buffer...
  904. destroy();
  905. create(m_size, NULL, m_flags);
  906. }
  907. GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_id) );
  908. GL_CHECK(glBufferSubData(GL_ELEMENT_ARRAY_BUFFER
  909. , _offset
  910. , _size
  911. , _data
  912. ) );
  913. GL_CHECK(glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0) );
  914. }
  915. void destroy();
  916. GLuint m_id;
  917. uint32_t m_size;
  918. uint16_t m_flags;
  919. };
  920. struct VertexBufferGL
  921. {
  922. void create(uint32_t _size, void* _data, VertexDeclHandle _declHandle, uint16_t _flags)
  923. {
  924. m_size = _size;
  925. m_decl = _declHandle;
  926. const bool drawIndirect = 0 != (_flags & BGFX_BUFFER_DRAW_INDIRECT);
  927. m_target = drawIndirect ? GL_DRAW_INDIRECT_BUFFER : GL_ARRAY_BUFFER;
  928. GL_CHECK(glGenBuffers(1, &m_id) );
  929. BX_CHECK(0 != m_id, "Failed to generate buffer id.");
  930. GL_CHECK(glBindBuffer(m_target, m_id) );
  931. GL_CHECK(glBufferData(m_target
  932. , _size
  933. , _data
  934. , (NULL==_data) ? GL_DYNAMIC_DRAW : GL_STATIC_DRAW
  935. ) );
  936. GL_CHECK(glBindBuffer(m_target, 0) );
  937. }
  938. void update(uint32_t _offset, uint32_t _size, void* _data, bool _discard = false)
  939. {
  940. BX_CHECK(0 != m_id, "Updating invalid vertex buffer.");
  941. if (_discard)
  942. {
  943. // orphan buffer...
  944. destroy();
  945. create(m_size, NULL, m_decl, 0);
  946. }
  947. GL_CHECK(glBindBuffer(m_target, m_id) );
  948. GL_CHECK(glBufferSubData(m_target
  949. , _offset
  950. , _size
  951. , _data
  952. ) );
  953. GL_CHECK(glBindBuffer(m_target, 0) );
  954. }
  955. void destroy();
  956. GLuint m_id;
  957. GLenum m_target;
  958. uint32_t m_size;
  959. VertexDeclHandle m_decl;
  960. };
  961. struct TextureGL
  962. {
  963. TextureGL()
  964. : m_id(0)
  965. , m_rbo(0)
  966. , m_target(GL_TEXTURE_2D)
  967. , m_fmt(GL_ZERO)
  968. , m_type(GL_ZERO)
  969. , m_flags(0)
  970. , m_currentSamplerHash(UINT32_MAX)
  971. , m_numMips(0)
  972. {
  973. }
  974. bool init(GLenum _target, uint32_t _width, uint32_t _height, uint32_t _depth, uint8_t _numMips, uint32_t _flags);
  975. void create(const Memory* _mem, uint32_t _flags, uint8_t _skip);
  976. void destroy();
  977. void overrideInternal(uintptr_t _ptr);
  978. void update(uint8_t _side, uint8_t _mip, const Rect& _rect, uint16_t _z, uint16_t _depth, uint16_t _pitch, const Memory* _mem);
  979. void setSamplerState(uint32_t _flags, const float _rgba[4]);
  980. void commit(uint32_t _stage, uint32_t _flags, const float _palette[][4]);
  981. void resolve() const;
  982. bool isCubeMap() const
  983. {
  984. return 0
  985. || GL_TEXTURE_CUBE_MAP == m_target
  986. || GL_TEXTURE_CUBE_MAP_ARRAY == m_target
  987. ;
  988. }
  989. GLuint m_id;
  990. GLuint m_rbo;
  991. GLenum m_target;
  992. GLenum m_fmt;
  993. GLenum m_type;
  994. uint32_t m_flags;
  995. uint32_t m_currentSamplerHash;
  996. uint32_t m_width;
  997. uint32_t m_height;
  998. uint32_t m_depth;
  999. uint8_t m_numMips;
  1000. uint8_t m_requestedFormat;
  1001. uint8_t m_textureFormat;
  1002. };
  1003. struct ShaderGL
  1004. {
  1005. ShaderGL()
  1006. : m_id(0)
  1007. , m_type(0)
  1008. , m_hash(0)
  1009. {
  1010. }
  1011. void create(const Memory* _mem);
  1012. void destroy();
  1013. GLuint m_id;
  1014. GLenum m_type;
  1015. uint32_t m_hash;
  1016. };
  1017. struct FrameBufferGL
  1018. {
  1019. FrameBufferGL()
  1020. : m_swapChain(NULL)
  1021. , m_denseIdx(UINT16_MAX)
  1022. , m_num(0)
  1023. , m_needPresent(false)
  1024. {
  1025. bx::memSet(m_fbo, 0, sizeof(m_fbo) );
  1026. }
  1027. void create(uint8_t _num, const Attachment* _attachment);
  1028. void create(uint16_t _denseIdx, void* _nwh, uint32_t _width, uint32_t _height, TextureFormat::Enum _depthFormat);
  1029. void postReset();
  1030. uint16_t destroy();
  1031. void resolve();
  1032. void discard(uint16_t _flags);
  1033. SwapChainGL* m_swapChain;
  1034. GLuint m_fbo[2];
  1035. uint32_t m_width;
  1036. uint32_t m_height;
  1037. uint16_t m_denseIdx;
  1038. uint8_t m_num;
  1039. uint8_t m_numTh;
  1040. bool m_needPresent;
  1041. Attachment m_attachment[BGFX_CONFIG_MAX_FRAME_BUFFER_ATTACHMENTS];
  1042. };
  1043. struct ProgramGL
  1044. {
  1045. ProgramGL()
  1046. : m_id(0)
  1047. , m_constantBuffer(NULL)
  1048. , m_numPredefined(0)
  1049. {
  1050. }
  1051. void create(const ShaderGL& _vsh, const ShaderGL& _fsh);
  1052. void destroy();
  1053. void init();
  1054. void bindInstanceData(uint32_t _stride, uint32_t _baseVertex = 0) const;
  1055. void bindAttributesBegin()
  1056. {
  1057. bx::memCopy(m_unboundUsedAttrib, m_used, sizeof(m_unboundUsedAttrib) );
  1058. }
  1059. void bindAttributes(const VertexDecl& _vertexDecl, uint32_t _baseVertex = 0);
  1060. void bindAttributesEnd()
  1061. {
  1062. for (uint32_t ii = 0, iiEnd = m_usedCount; ii < iiEnd; ++ii)
  1063. {
  1064. if (Attrib::Count != m_unboundUsedAttrib[ii])
  1065. {
  1066. Attrib::Enum attr = Attrib::Enum(m_unboundUsedAttrib[ii]);
  1067. GLint loc = m_attributes[attr];
  1068. GL_CHECK(glDisableVertexAttribArray(loc) );
  1069. }
  1070. }
  1071. }
  1072. GLuint m_id;
  1073. uint8_t m_unboundUsedAttrib[Attrib::Count]; // For tracking unbound used attributes between begin()/end().
  1074. uint8_t m_usedCount;
  1075. uint8_t m_used[Attrib::Count]; // Dense.
  1076. GLint m_attributes[Attrib::Count]; // Sparse.
  1077. GLint m_instanceData[BGFX_CONFIG_MAX_INSTANCE_DATA_COUNT+1];
  1078. GLint m_sampler[BGFX_CONFIG_MAX_TEXTURE_SAMPLERS];
  1079. uint8_t m_numSamplers;
  1080. UniformBuffer* m_constantBuffer;
  1081. PredefinedUniform m_predefined[PredefinedUniform::Count];
  1082. uint8_t m_numPredefined;
  1083. };
  1084. struct TimerQueryGL
  1085. {
  1086. TimerQueryGL()
  1087. : m_control(BX_COUNTOF(m_query) )
  1088. {
  1089. }
  1090. void create()
  1091. {
  1092. for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
  1093. {
  1094. Query& query = m_query[ii];
  1095. query.m_ready = false;
  1096. GL_CHECK(glGenQueries(1, &query.m_begin) );
  1097. GL_CHECK(glGenQueries(1, &query.m_end) );
  1098. }
  1099. for (uint32_t ii = 0; ii < BX_COUNTOF(m_result); ++ii)
  1100. {
  1101. Result& result = m_result[ii];
  1102. result.reset();
  1103. }
  1104. }
  1105. void destroy()
  1106. {
  1107. for (uint32_t ii = 0; ii < BX_COUNTOF(m_query); ++ii)
  1108. {
  1109. Query& query = m_query[ii];
  1110. GL_CHECK(glDeleteQueries(1, &query.m_begin) );
  1111. GL_CHECK(glDeleteQueries(1, &query.m_end) );
  1112. }
  1113. }
  1114. uint32_t begin(uint32_t _resultIdx)
  1115. {
  1116. while (0 == m_control.reserve(1) )
  1117. {
  1118. update();
  1119. }
  1120. Result& result = m_result[_resultIdx];
  1121. ++result.m_pending;
  1122. const uint32_t idx = m_control.m_current;
  1123. Query& query = m_query[idx];
  1124. query.m_resultIdx = _resultIdx;
  1125. query.m_ready = false;
  1126. GL_CHECK(glQueryCounter(query.m_begin
  1127. , GL_TIMESTAMP
  1128. ) );
  1129. m_control.commit(1);
  1130. return idx;
  1131. }
  1132. void end(uint32_t _idx)
  1133. {
  1134. Query& query = m_query[_idx];
  1135. query.m_ready = true;
  1136. GL_CHECK(glQueryCounter(query.m_end
  1137. , GL_TIMESTAMP
  1138. ) );
  1139. while (update() )
  1140. {
  1141. }
  1142. }
  1143. bool update()
  1144. {
  1145. if (0 != m_control.available() )
  1146. {
  1147. Query& query = m_query[m_control.m_read];
  1148. if (!query.m_ready)
  1149. {
  1150. return false;
  1151. }
  1152. GLint available;
  1153. GL_CHECK(glGetQueryObjectiv(query.m_end
  1154. , GL_QUERY_RESULT_AVAILABLE
  1155. , &available
  1156. ) );
  1157. if (available)
  1158. {
  1159. m_control.consume(1);
  1160. Result& result = m_result[query.m_resultIdx];
  1161. --result.m_pending;
  1162. GL_CHECK(glGetQueryObjectui64v(query.m_begin
  1163. , GL_QUERY_RESULT
  1164. , &result.m_begin
  1165. ) );
  1166. GL_CHECK(glGetQueryObjectui64v(query.m_end
  1167. , GL_QUERY_RESULT
  1168. , &result.m_end
  1169. ) );
  1170. return true;
  1171. }
  1172. }
  1173. return false;
  1174. }
  1175. struct Result
  1176. {
  1177. void reset()
  1178. {
  1179. m_begin = 0;
  1180. m_end = 0;
  1181. m_pending = 0;
  1182. }
  1183. uint64_t m_begin;
  1184. uint64_t m_end;
  1185. uint32_t m_pending;
  1186. };
  1187. struct Query
  1188. {
  1189. GLuint m_begin;
  1190. GLuint m_end;
  1191. uint32_t m_resultIdx;
  1192. bool m_ready;
  1193. };
  1194. Result m_result[BGFX_CONFIG_MAX_VIEWS+1];
  1195. Query m_query[BGFX_CONFIG_MAX_VIEWS*4];
  1196. bx::RingBufferControl m_control;
  1197. };
  1198. struct OcclusionQueryGL
  1199. {
  1200. OcclusionQueryGL()
  1201. : m_control(BX_COUNTOF(m_query) )
  1202. {
  1203. }
  1204. void create();
  1205. void destroy();
  1206. void begin(Frame* _render, OcclusionQueryHandle _handle);
  1207. void end();
  1208. void resolve(Frame* _render, bool _wait = false);
  1209. void invalidate(OcclusionQueryHandle _handle);
  1210. struct Query
  1211. {
  1212. GLuint m_id;
  1213. OcclusionQueryHandle m_handle;
  1214. };
  1215. Query m_query[BGFX_CONFIG_MAX_OCCLUSION_QUERIES];
  1216. bx::RingBufferControl m_control;
  1217. };
  1218. class LineReader : public bx::ReaderI
  1219. {
  1220. public:
  1221. LineReader(const void* _str)
  1222. : m_str( (const char*)_str)
  1223. , m_pos(0)
  1224. , m_size(bx::strLen( (const char*)_str) )
  1225. {
  1226. }
  1227. virtual int32_t read(void* _data, int32_t _size, bx::Error* _err) override
  1228. {
  1229. if (m_str[m_pos] == '\0'
  1230. || m_pos == m_size)
  1231. {
  1232. BX_ERROR_SET(_err, BX_ERROR_READERWRITER_EOF, "LineReader: EOF.");
  1233. return 0;
  1234. }
  1235. uint32_t pos = m_pos;
  1236. const char* str = &m_str[pos];
  1237. const char* nl = bx::strnl(str);
  1238. pos += (uint32_t)(nl - str);
  1239. const char* eol = &m_str[pos];
  1240. uint32_t size = bx::uint32_min(uint32_t(eol - str), _size);
  1241. bx::memCopy(_data, str, size);
  1242. m_pos += size;
  1243. return size;
  1244. }
  1245. const char* m_str;
  1246. uint32_t m_pos;
  1247. uint32_t m_size;
  1248. };
  1249. } /* namespace gl */ } // namespace bgfx
  1250. #endif // BGFX_RENDERER_GL_H_HEADER_GUARD