glue.c 40 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830
  1. /*
  2. Copyright (c) 2015-2018 Bruce A Henderson
  3. All rights reserved.
  4. Redistribution and use in source and binary forms, with or without
  5. modification, are permitted provided that the following conditions are met:
  6. * Redistributions of source code must retain the above copyright notice, this
  7. list of conditions and the following disclaimer.
  8. * Redistributions in binary form must reproduce the above copyright notice,
  9. this list of conditions and the following disclaimer in the documentation
  10. and/or other materials provided with the distribution.
  11. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
  12. AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  13. IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  14. DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
  15. FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  16. DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  17. SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  18. CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  19. OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  20. OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  21. */
  22. #include "bgfx/c99/bgfx.h"
  23. #include "brl.mod/blitz.mod/blitz.h"
  24. /* ----------------------------------------------------- */
  25. int bmx_bgfx_init(int width, int height, int rendererType);
  26. uint32_t bmx_bgfx_frame(int capture);
  27. void bmx_bgfx_reset(uint32_t width, uint32_t height, uint32_t flags, int format);
  28. void bmx_bgfx_shutdown();
  29. //void bmx_bgfx_set_clear_color(int index, int r, int g, int b, int a);
  30. //void bmx_bgfx_set_state(BBInt64 state, int r, int g, int b, int a);
  31. //struct MaxBGFXIndexBuffer * bmx_bgfx_create_index_buffer(bgfx_memory_t * mem, int flags);
  32. //void bmx_bgfx_destroy_index_buffer(struct MaxBGFXIndexBuffer * buffer);
  33. //void bmx_bgfx_set_index_buffer(struct MaxBGFXIndexBuffer * buffer, int firstIndex, int numIndices);
  34. bgfx_texture_handle_t bmx_bgfx_create_texture(bgfx_memory_t * _mem, int flags, int skip , bgfx_texture_info_t * info);
  35. bgfx_texture_handle_t bmx_bgfx_create_texture_2d(uint16_t width, uint16_t height, int hasMips, uint16_t numLayers, bgfx_texture_format_t format, int flags, bgfx_memory_t * mem);
  36. bgfx_texture_handle_t bmx_bgfx_create_texture_2d_scaled(int ratio, int hasMips, uint16_t numLayers, bgfx_texture_format_t format, int flags);
  37. int bmx_bgfx_is_texture_valid(uint16_t depth, int cubeMap, uint16_t numLayers, bgfx_texture_format_t format, uint32_t flags);
  38. void bmx_bgfx_calc_texture_size(bgfx_texture_info_t * info, uint16_t width, uint16_t height, uint16_t depth, int cubeMap, int hasMips, uint16_t numLayers, bgfx_texture_format_t format);
  39. //void bmx_bgfx_destroy_texture(struct MaxBGFXTexture * texture);
  40. void bmx_bgfx_set_view_rect(bgfx_view_id_t id, uint16_t x, uint16_t y, uint16_t width, uint16_t height);
  41. void bmx_bgfx_set_view_clear(bgfx_view_id_t id, uint16_t flags, uint32_t rgba, float depth, uint8_t stencil);
  42. void bmx_bgfx_set_view_transform(bgfx_view_id_t id, void * view, void * proj);
  43. void bmx_bgfx_set_view_scissor(bgfx_view_id_t id, uint16_t x, uint16_t y, uint16_t width, uint16_t eight);
  44. void bmx_bgfx_set_view_rect_auto(bgfx_view_id_t id, uint16_t x, uint16_t y, int ratio);
  45. void bmx_bgfx_set_view_clear_mrt(bgfx_view_id_t id, uint16_t flags, float depth, uint8_t stencil, uint8_t p0, uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t p5, uint8_t p6, uint8_t p7);
  46. void bmx_bgfx_set_view_mode(bgfx_view_id_t id, int mode);
  47. void bmx_bgfx_set_view_order(bgfx_view_id_t id, uint16_t num, uint16_t * order);
  48. void bmx_bgfx_set_view_frame_buffer(bgfx_view_id_t id, uint16_t frameBuffer);
  49. bgfx_program_handle_t bmx_bgfx_create_program(uint16_t vsh, uint16_t fsh, int destroyShaders);
  50. bgfx_program_handle_t bmx_bgfx_create_compute_program(uint16_t csh, int destroyShaders);
  51. void bmx_bgfx_destroy_program(uint16_t program);
  52. bgfx_shader_handle_t bmx_bgfx_create_shader(bgfx_memory_t * mem);
  53. uint16_t bmx_bgfx_get_shader_uniforms(uint16_t shader, uint16_t * uniforms, uint16_t maximum);
  54. void bmx_bgfx_set_shader_name(uint16_t shader, BBString * name);
  55. void bmx_bgfx_destroy_shader(uint16_t shader);
  56. bgfx_uniform_handle_t bmx_bgfx_create_uniform(BBString * name, int uniformType, uint16_t num);
  57. void bmx_bgfx_destroy_uniform(uint16_t handle);
  58. bgfx_uniform_info_t * bmx_bgfx_get_uniform_info(uint16_t uniform);
  59. void bmx_bgfx_uniform_info_free(bgfx_uniform_info_t * info);
  60. void bmx_bgfx_set_debug(int debugFlags);
  61. void bmx_bgfx_dbg_text_clear(uint8_t attr, int small);
  62. void bmx_bgfx_dbg_text_printf(uint16_t x, uint16_t y, uint8_t attr, BBString * text);
  63. void bmx_bgfx_dbg_text_image(uint16_t x, uint16_t y, uint16_t width, uint16_t height, void * data, uint16_t pitch);
  64. bgfx_texture_info_t * bmx_bgfx_texture_info_new();
  65. void bmx_bgfx_texture_info_free(bgfx_texture_info_t * info);
  66. bgfx_texture_format_t bmx_bgfx_texture_format(bgfx_texture_info_t * info);
  67. int bmx_bgfx_texture_width(bgfx_texture_info_t * info);
  68. int bmx_bgfx_texture_height(bgfx_texture_info_t * info);
  69. int bmx_bgfx_texture_depth(bgfx_texture_info_t * info);
  70. int bmx_bgfx_texture_mips(bgfx_texture_info_t * info);
  71. int bmx_bgfx_texture_bitsperpixel(bgfx_texture_info_t * info);
  72. int bmx_bgfx_texture_cubemap(bgfx_texture_info_t * info);
  73. int bmx_bgfx_texture_storageSize(bgfx_texture_info_t * info);
  74. bgfx_caps_t * bmx_bgfx_get_caps();
  75. bgfx_caps_limits_t * bmx_bgfx_caps_limits(bgfx_caps_t * caps);
  76. void bmx_bgfx_set_marker(BBString * marker);
  77. void bmx_bgfx_set_state(uint64_t state, int rgba);
  78. void bmx_bgfx_set_condition(uint16_t occlusionQuery, int visible);
  79. void bmx_bgfx_set_stencil(int fstencil, int bstencil);
  80. uint16_t bmx_bgfx_set_scissor(uint16_t x, uint16_t y, uint16_t width, uint16_t height);
  81. void bmx_bgfx_set_scissor_cached(uint16_t cache);
  82. int bmx_bgfx_set_transform(void * matrix, uint16_t num);
  83. int bmx_bgfx_alloc_transform(bgfx_transform_t * transform, uint16_t num);
  84. void bmx_bgfx_set_transform_cached(int cache, uint16_t num);
  85. void bmx_bgfx_set_uniform(uint16_t uniform, void * value, uint16_t num);
  86. void bmx_bgfx_set_index_buffer(uint16_t indexBuffer, int firstIndex, int numIndices);
  87. void bmx_bgfx_set_dynamic_index_buffer(uint16_t dynamicIndexBuffer, int firstIndex, int numIndices);
  88. void bmx_bgfx_set_transient_index_buffer(bgfx_transient_index_buffer_t * transientIndexBuffer, int firstIndex, int numIndices);
  89. void bmx_bgfx_set_vertex_buffer(uint8_t stream, uint16_t vertexBuffer, int startVertex, int numVertices);
  90. void bmx_bgfx_set_dynamic_vertex_buffer(uint8_t stream, uint16_t dynamicVertexBuffer, int startVertex, int numVertices);
  91. void bmx_bgfx_set_transient_vertex_buffer(uint8_t stream, bgfx_transient_vertex_buffer_t * transientVertexBuffer, int startVertex, int numVertices);
  92. void bmx_bgfx_set_vertex_count(int numVertices);
  93. void bmx_bgfx_set_instance_data_buffer(bgfx_instance_data_buffer_t * idb, int start, int num);
  94. void bmx_bgfx_set_instance_data_from_vertex_buffer(uint16_t vertexBuffer, int startVertex, int num);
  95. void bmx_bgfx_set_instance_data_from_dynamic_vertex_buffer(uint16_t dynamicVertexBuffer, int startVertex, int num);
  96. void bmx_bgfx_set_texture(uint8_t stage, uint16_t uniform, uint16_t texture, int flags);
  97. void bmx_bgfx_touch(uint16_t id);
  98. void bmx_bgfx_submit(uint16_t id, uint16_t program, int depth, int preserveState);
  99. void bmx_bgfx_submit_occlusion_query(uint16_t id, uint16_t program, uint16_t occlusionQuery, int depth, int preserveState);
  100. void bmx_bgfx_submit_indirect(uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, int depth, int preserveState);
  101. void bmx_bgfx_set_image(uint8_t stage, uint16_t texture, uint8_t mip, int access, int format);
  102. void bmx_bgfx_set_compute_index_buffer(uint8_t stage, uint16_t indexBuffer, int access);
  103. void bmx_bgfx_set_compute_vertex_buffer(uint8_t stage, uint16_t vertexBuffer, int access);
  104. void bmx_bgfx_set_compute_dynamic_index_buffer(uint8_t stage, uint16_t dynamicIndexBuffer, int access);
  105. void bmx_bgfx_set_compute_dynamic_vertex_buffer(uint8_t stage, uint16_t dynamicVertexBuffer, int access);
  106. void bmx_bgfx_set_compute_indirect_buffer(uint8_t stage, uint16_t indirectBuffer, int access);
  107. void bmx_bgfx_dispatch(uint16_t id, uint16_t program, int numX, int numY, int numZ, uint8_t flags);
  108. void bmx_bgfx_dispatch_indirect(uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, uint8_t flags);
  109. void bmx_bgfx_discard();
  110. void bmx_bgfx_blit(uint16_t id, uint16_t dstTexture, uint8_t dstMip, uint16_t dstX, uint16_t dstY, uint16_t dstZ, uint16_t srcTexture, uint8_t srcMip, uint16_t srcX, uint16_t srcY, uint16_t srcZ, uint16_t width, uint16_t height, uint16_t depth);
  111. void bmx_bgfx_encoder_set_marker(struct bgfx_encoder_s * encoder, BBString * marker);
  112. void bmx_bgfx_encoder_set_state(struct bgfx_encoder_s * encoder, uint64_t state, int rgba);
  113. void bmx_bgfx_encoder_set_condition(struct bgfx_encoder_s * encoder, uint16_t occlusionQuery, int visible);
  114. void bmx_bgfx_encoder_set_stencil(struct bgfx_encoder_s * encoder, int fstencil, int bstencil);
  115. uint16_t bmx_bgfx_encoder_set_scissor(struct bgfx_encoder_s * encoder, uint16_t x, uint16_t y, uint16_t width, uint16_t height);
  116. void bmx_bgfx_encoder_set_scissor_cached(struct bgfx_encoder_s * encoder, uint16_t cache);
  117. int bmx_bgfx_encoder_set_transform(struct bgfx_encoder_s * encoder, void * matrix, uint16_t num);
  118. int bmx_bgfx_encoder_alloc_transform(struct bgfx_encoder_s * encoder, bgfx_transform_t * transform, uint16_t num);
  119. void bmx_bgfx_encoder_set_transform_cached(struct bgfx_encoder_s * encoder, int cache, uint16_t num);
  120. void bmx_bgfx_encoder_set_uniform(struct bgfx_encoder_s * encoder, uint16_t uniform, void * value, uint16_t num);
  121. void bmx_bgfx_encoder_set_index_buffer(struct bgfx_encoder_s * encoder, uint16_t indexBuffer, int firstIndex, int numIndices);
  122. void bmx_bgfx_encoder_set_dynamic_index_buffer(struct bgfx_encoder_s * encoder, uint16_t dynamicIndexBuffer, int firstIndex, int numIndices);
  123. void bmx_bgfx_encoder_set_transient_index_buffer(struct bgfx_encoder_s * encoder, bgfx_transient_index_buffer_t * transientIndexBuffer, int firstIndex, int numIndices);
  124. void bmx_bgfx_encoder_set_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, uint16_t vertexBuffer, int startVertex, int numVertices);
  125. void bmx_bgfx_encoder_set_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, uint16_t dynamicVertexBuffer, int startVertex, int numVertices);
  126. void bmx_bgfx_encoder_set_transient_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, bgfx_transient_vertex_buffer_t * transientVertexBuffer, int startVertex, int numVertices);
  127. void bmx_bgfx_encoder_set_vertex_count(struct bgfx_encoder_s * encoder, int numVertices);
  128. void bmx_bgfx_encoder_set_instance_data_buffer(struct bgfx_encoder_s * encoder, bgfx_instance_data_buffer_t * idb, int start, int num);
  129. void bmx_bgfx_encoder_set_instance_data_from_vertex_buffer(struct bgfx_encoder_s * encoder, uint16_t vertexBuffer, int startVertex, int num);
  130. void bmx_bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint16_t dynamicVertexBuffer, int startVertex, int num);
  131. void bmx_bgfx_encoder_set_texture(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t uniform, uint16_t texture, int flags);
  132. void bmx_bgfx_encoder_touch(struct bgfx_encoder_s * encoder, uint16_t id);
  133. void bmx_bgfx_encoder_submit(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, int depth, int preserveState);
  134. void bmx_bgfx_encoder_submit_occlusion_query(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t occlusionQuery, int depth, int preserveState);
  135. void bmx_bgfx_encoder_submit_indirect(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, int depth, int preserveState);
  136. void bmx_bgfx_encoder_set_image(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t texture, uint8_t mip, int access, int format);
  137. void bmx_bgfx_encoder_set_compute_index_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t indexBuffer, int access);
  138. void bmx_bgfx_encoder_set_compute_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t vertexBuffer, int access);
  139. void bmx_bgfx_encoder_set_compute_dynamic_index_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t dynamicIndexBuffer, int access);
  140. void bmx_bgfx_encoder_set_compute_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t dynamicVertexBuffer, int access);
  141. void bmx_bgfx_encoder_set_compute_indirect_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t indirectBuffer, int access);
  142. void bmx_bgfx_encoder_dispatch(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, int numX, int numY, int numZ, uint8_t flags);
  143. void bmx_bgfx_encoder_dispatch_indirect(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, uint8_t flags);
  144. void bmx_bgfx_encoder_discard(struct bgfx_encoder_s * encoder);
  145. void bmx_bgfx_encoder_blit(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t dstTexture, uint8_t dstMip, uint16_t dstX, uint16_t dstY, uint16_t dstZ, uint16_t srcTexture, uint8_t srcMip, uint16_t srcX, uint16_t srcY, uint16_t srcZ, uint16_t width, uint16_t height, uint16_t depth);
  146. uint32_t bmx_bgfx_capslimits_maxDrawCalls(bgfx_caps_limits_t * limits);
  147. uint32_t bmx_bgfx_capslimits_maxBlits(bgfx_caps_limits_t * limits);
  148. uint32_t bmx_bgfx_capslimits_maxTextureSize(bgfx_caps_limits_t * limits);
  149. uint32_t bmx_bgfx_capslimits_maxTextureLayers(bgfx_caps_limits_t * limits);
  150. uint32_t bmx_bgfx_capslimits_maxViews(bgfx_caps_limits_t * limits);
  151. uint32_t bmx_bgfx_capslimits_maxFrameBuffers(bgfx_caps_limits_t * limits);
  152. uint32_t bmx_bgfx_capslimits_maxFBAttachments(bgfx_caps_limits_t * limits);
  153. uint32_t bmx_bgfx_capslimits_maxPrograms(bgfx_caps_limits_t * limits);
  154. uint32_t bmx_bgfx_capslimits_maxShaders(bgfx_caps_limits_t * limits);
  155. uint32_t bmx_bgfx_capslimits_maxTextures(bgfx_caps_limits_t * limits);
  156. uint32_t bmx_bgfx_capslimits_maxTextureSamplers(bgfx_caps_limits_t * limits);
  157. uint32_t bmx_bgfx_capslimits_maxVertexDecls(bgfx_caps_limits_t * limits);
  158. uint32_t bmx_bgfx_capslimits_maxVertexStreams(bgfx_caps_limits_t * limits);
  159. uint32_t bmx_bgfx_capslimits_maxIndexBuffers(bgfx_caps_limits_t * limits);
  160. uint32_t bmx_bgfx_capslimits_maxVertexBuffers(bgfx_caps_limits_t * limits);
  161. uint32_t bmx_bgfx_capslimits_maxDynamicIndexBuffers(bgfx_caps_limits_t * limits);
  162. uint32_t bmx_bgfx_capslimits_maxDynamicVertexBuffers(bgfx_caps_limits_t * limits);
  163. uint32_t bmx_bgfx_capslimits_maxUniforms(bgfx_caps_limits_t * limits);
  164. uint32_t bmx_bgfx_capslimits_maxOcclusionQueries(bgfx_caps_limits_t * limits);
  165. uint32_t bmx_bgfx_capslimits_maxEncoders(bgfx_caps_limits_t * limits);
  166. uint32_t bmx_bgfx_capslimits_transientVbSize(bgfx_caps_limits_t * limits);
  167. uint32_t bmx_bgfx_capslimits_transientIbSize(bgfx_caps_limits_t * limits);
  168. /* ----------------------------------------------------- */
  169. int bmx_bgfx_init(int width, int height, int rendererType) {
  170. bgfx_init_t init;
  171. bgfx_init_ctor(&init);
  172. init.type = rendererType;
  173. if (!bgfx_init(&init)) {
  174. printf("failed\n");
  175. return 0;
  176. }
  177. bgfx_reset(width, height, BGFX_RESET_VSYNC, BGFX_TEXTURE_FORMAT_COUNT);
  178. return 1;
  179. }
  180. uint32_t bmx_bgfx_frame(int capture) {
  181. return bgfx_frame(capture);
  182. }
  183. void bmx_bgfx_reset(uint32_t width, uint32_t height, uint32_t flags, int format) {
  184. bgfx_reset(width, height, flags, format);
  185. }
  186. void bmx_bgfx_shutdown() {
  187. bgfx_shutdown();
  188. }
  189. /*
  190. void bmx_bgfx_set_clear_color(int index, int r, int g, int b, int a) {
  191. float rgba[4];
  192. rgba[0] = r / 255.0f;
  193. rgba[1] = g / 255.0f;
  194. rgba[2] = b / 255.0f;
  195. rgba[3] = a / 255.0f;
  196. bgfx_set_clear_color(index, rgba);
  197. }
  198. //void bmx_bgfx_set_state(BBInt64 state, int r, int g, int b, int a) {
  199. // bgfx_set_state(state, r << 24 | g << 16 | b << 8 | a);
  200. //}
  201. struct MaxBGFXIndexBuffer * bmx_bgfx_create_index_buffer(bgfx_memory_t * mem, int flags) {
  202. struct MaxBGFXIndexBuffer * buffer = malloc(sizeof(struct MaxBGFXIndexBuffer));
  203. buffer->buf = bgfx_create_index_buffer(mem, flags);
  204. return buffer;
  205. }
  206. void bmx_bgfx_destroy_index_buffer(struct MaxBGFXIndexBuffer * buffer) {
  207. bgfx_destroy_index_buffer(buffer->buf);
  208. free(buffer);
  209. }
  210. //void bmx_bgfx_set_index_buffer(struct MaxBGFXIndexBuffer * buffer, int firstIndex, int numIndices) {
  211. // bgfx_set_index_buffer(buffer->buf, firstIndex, numIndices);
  212. //}
  213. */
  214. void bmx_bgfx_set_debug(int debugFlags) {
  215. bgfx_set_debug(debugFlags);
  216. }
  217. void bmx_bgfx_dbg_text_clear(uint8_t attr, int small) {
  218. bgfx_dbg_text_clear(attr, small);
  219. }
  220. void bmx_bgfx_dbg_text_printf(uint16_t x, uint16_t y, uint8_t attr, BBString * text) {
  221. char * t = bbStringToUTF8String(text);
  222. bgfx_dbg_text_printf(x, y, attr, "%s", t);
  223. bbMemFree(t);
  224. }
  225. void bmx_bgfx_dbg_text_image(uint16_t x, uint16_t y, uint16_t width, uint16_t height, void * data, uint16_t pitch) {
  226. bgfx_dbg_text_image(x, y, width, height, data, pitch);
  227. }
  228. bgfx_caps_t * bmx_bgfx_get_caps() {
  229. return bgfx_get_caps();
  230. }
  231. bgfx_caps_limits_t * bmx_bgfx_caps_limits(bgfx_caps_t * caps) {
  232. return &caps->limits;
  233. }
  234. /* ----------------------------------------------------- */
  235. void bmx_bgfx_set_view_rect(bgfx_view_id_t id, uint16_t x, uint16_t y, uint16_t width, uint16_t height) {
  236. bgfx_set_view_rect(id, x, y, width, height);
  237. }
  238. void bmx_bgfx_set_view_clear(bgfx_view_id_t id, uint16_t flags, uint32_t rgba, float depth, uint8_t stencil) {
  239. bgfx_set_view_clear(id, flags, rgba, depth, stencil);
  240. }
  241. void bmx_bgfx_set_view_transform(bgfx_view_id_t id, void * view, void * proj) {
  242. bgfx_set_view_transform(id, view, proj);
  243. }
  244. void bmx_bgfx_set_view_scissor(bgfx_view_id_t id, uint16_t x, uint16_t y, uint16_t width, uint16_t height) {
  245. bgfx_set_view_scissor(id, x, y, width, height);
  246. }
  247. void bmx_bgfx_set_view_rect_auto(bgfx_view_id_t id, uint16_t x, uint16_t y, int ratio) {
  248. bgfx_set_view_rect_auto(id, x, y, ratio);
  249. }
  250. void bmx_bgfx_set_view_clear_mrt(bgfx_view_id_t id, uint16_t flags, float depth, uint8_t stencil, uint8_t p0, uint8_t p1, uint8_t p2, uint8_t p3, uint8_t p4, uint8_t p5, uint8_t p6, uint8_t p7) {
  251. bgfx_set_view_clear_mrt(id, flags, depth, stencil, p0, p1, p2, p3, p4, p5, p6, p7);
  252. }
  253. void bmx_bgfx_set_view_mode(bgfx_view_id_t id, int mode) {
  254. bgfx_set_view_mode(id, mode);
  255. }
  256. void bmx_bgfx_set_view_order(bgfx_view_id_t id, uint16_t num, uint16_t * order) {
  257. bgfx_set_view_order(id, num, order);
  258. }
  259. void bmx_bgfx_set_view_frame_buffer(bgfx_view_id_t id, uint16_t frameBuffer) {
  260. bgfx_set_view_frame_buffer(id, *(bgfx_frame_buffer_handle_t*)(&frameBuffer));
  261. }
  262. /* ----------------------------------------------------- */
  263. bgfx_program_handle_t bmx_bgfx_create_program(uint16_t vsh, uint16_t fsh, int destroyShaders) {
  264. return bgfx_create_program(*(bgfx_shader_handle_t*)(&vsh), *(bgfx_shader_handle_t*)(&fsh), destroyShaders);
  265. }
  266. bgfx_program_handle_t bmx_bgfx_create_compute_program(uint16_t csh, int destroyShaders) {
  267. return bgfx_create_compute_program(*(bgfx_shader_handle_t*)(&csh), destroyShaders);
  268. }
  269. void bmx_bgfx_destroy_program(uint16_t program) {
  270. bgfx_destroy_program(*(bgfx_program_handle_t*)(&program));
  271. }
  272. /* ----------------------------------------------------- */
  273. bgfx_shader_handle_t bmx_bgfx_create_shader(bgfx_memory_t * mem) {
  274. return bgfx_create_shader(mem);
  275. }
  276. uint16_t bmx_bgfx_get_shader_uniforms(uint16_t shader, uint16_t * uniforms, uint16_t maximum) {
  277. return bgfx_get_shader_uniforms(*(bgfx_shader_handle_t*)(&shader), (bgfx_uniform_handle_t*)uniforms, maximum);
  278. }
  279. void bmx_bgfx_set_shader_name(uint16_t shader, BBString * name) {
  280. char * n = bbStringToUTF8String(name);
  281. int len = strlen(n);
  282. bgfx_set_shader_name(*(bgfx_shader_handle_t*)(&shader), n, len);
  283. bbMemFree(n);
  284. }
  285. void bmx_bgfx_destroy_shader(uint16_t shader) {
  286. bgfx_destroy_shader(*(bgfx_shader_handle_t*)(&shader));
  287. }
  288. /* ----------------------------------------------------- */
  289. bgfx_uniform_handle_t bmx_bgfx_create_uniform(BBString * name, int uniformType, uint16_t num) {
  290. char * n = bbStringToUTF8String(name);
  291. bgfx_uniform_handle_t uniform = bgfx_create_uniform(n, uniformType, num);
  292. bbMemFree(n);
  293. return uniform;
  294. }
  295. void bmx_bgfx_destroy_uniform(uint16_t uniform) {
  296. bgfx_destroy_uniform(*(bgfx_uniform_handle_t*)(&uniform));
  297. }
  298. bgfx_uniform_info_t * bmx_bgfx_get_uniform_info(uint16_t uniform) {
  299. bgfx_uniform_info_t * info = malloc(sizeof(bgfx_uniform_info_t));
  300. bgfx_get_uniform_info(*(bgfx_uniform_handle_t*)(&uniform), info);
  301. return info;
  302. }
  303. void bmx_bgfx_uniform_info_free(bgfx_uniform_info_t * info) {
  304. free(info);
  305. }
  306. /* ----------------------------------------------------- */
  307. bgfx_texture_handle_t bmx_bgfx_create_texture(bgfx_memory_t * _mem, int flags, int skip, bgfx_texture_info_t * info) {
  308. bgfx_texture_handle_t texture;
  309. //struct MaxBGFXTexture * texture = malloc(sizeof(struct MaxBGFXTexture));
  310. if (info) {
  311. texture = bgfx_create_texture(_mem, flags, skip, info);
  312. } else {
  313. texture = bgfx_create_texture(_mem, flags, skip, 0);
  314. }
  315. return texture;
  316. }
  317. bgfx_texture_handle_t bmx_bgfx_create_texture_2d(uint16_t width, uint16_t height, int hasMips, uint16_t numLayers, bgfx_texture_format_t format, int flags, bgfx_memory_t * mem) {
  318. return bgfx_create_texture_2d(width, height, hasMips, numLayers, format, flags, mem);
  319. }
  320. bgfx_texture_handle_t bmx_bgfx_create_texture_2d_scaled(int ratio, int hasMips, uint16_t numLayers, bgfx_texture_format_t format, int flags) {
  321. return bgfx_create_texture_2d_scaled(ratio, hasMips, numLayers, format, flags);
  322. }
  323. void bmx_bgfx_destroy_texture(bgfx_texture_handle_t texture) {
  324. bgfx_destroy_texture(texture);
  325. }
  326. int bmx_bgfx_is_texture_valid(uint16_t depth, int cubeMap, uint16_t numLayers, bgfx_texture_format_t format, uint32_t flags) {
  327. return bgfx_is_texture_valid(depth, cubeMap, numLayers, format, flags);
  328. }
  329. void bmx_bgfx_calc_texture_size(bgfx_texture_info_t * info, uint16_t width, uint16_t height, uint16_t depth, int cubeMap, int hasMips, uint16_t numLayers, bgfx_texture_format_t format) {
  330. bgfx_calc_texture_size(info, width, height, depth, cubeMap, hasMips, numLayers, format);
  331. }
  332. bgfx_texture_info_t * bmx_bgfx_texture_info_new() {
  333. return calloc(1, sizeof(bgfx_texture_info_t));
  334. }
  335. void bmx_bgfx_texture_info_free(bgfx_texture_info_t * info) {
  336. free(info);
  337. }
  338. bgfx_texture_format_t bmx_bgfx_texture_format(bgfx_texture_info_t * info) {
  339. return info->format;
  340. }
  341. int bmx_bgfx_texture_width(bgfx_texture_info_t * info) {
  342. return info->width;
  343. }
  344. int bmx_bgfx_texture_height(bgfx_texture_info_t * info) {
  345. return info->height;
  346. }
  347. int bmx_bgfx_texture_depth(bgfx_texture_info_t * info) {
  348. return info->depth;
  349. }
  350. int bmx_bgfx_texture_mips(bgfx_texture_info_t * info) {
  351. return info->numMips;
  352. }
  353. int bmx_bgfx_texture_bitsperpixel(bgfx_texture_info_t * info) {
  354. return info->bitsPerPixel;
  355. }
  356. int bmx_bgfx_texture_cubemap(bgfx_texture_info_t * info) {
  357. return info->cubeMap;
  358. }
  359. int bmx_bgfx_texture_storageSize(bgfx_texture_info_t * info) {
  360. return info->storageSize;
  361. }
  362. /* ----------------------------------------------------- */
  363. void bmx_bgfx_set_marker(BBString * marker) {
  364. char * m = bbStringToUTF8String(marker);
  365. bgfx_set_marker(m);
  366. bbMemFree(m);
  367. }
  368. void bmx_bgfx_set_state(uint64_t state, int rgba) {
  369. bgfx_set_state(state, rgba);
  370. }
  371. void bmx_bgfx_set_condition(uint16_t occlusionQuery, int visible) {
  372. bgfx_set_condition(*(bgfx_occlusion_query_handle_t*)(&occlusionQuery), visible);
  373. }
  374. void bmx_bgfx_set_stencil(int fstencil, int bstencil) {
  375. bgfx_set_stencil(fstencil, bstencil);
  376. }
  377. uint16_t bmx_bgfx_set_scissor(uint16_t x, uint16_t y, uint16_t width, uint16_t height) {
  378. return bgfx_set_scissor(x, y, width, height);
  379. }
  380. void bmx_bgfx_set_scissor_cached(uint16_t cache) {
  381. bgfx_set_scissor_cached(cache);
  382. }
  383. int bmx_bgfx_set_transform(void * matrix, uint16_t num) {
  384. return bgfx_set_transform(matrix, num);
  385. }
  386. int bmx_bgfx_alloc_transform(bgfx_transform_t * transform, uint16_t num) {
  387. return bgfx_alloc_transform(transform, num);
  388. }
  389. void bmx_bgfx_set_transform_cached(int cache, uint16_t num) {
  390. bgfx_set_transform_cached(cache, num);
  391. }
  392. void bmx_bgfx_set_uniform(uint16_t uniform, void * value, uint16_t num) {
  393. bgfx_set_uniform(*(bgfx_uniform_handle_t*)(&uniform), value, num);
  394. }
  395. void bmx_bgfx_set_index_buffer(uint16_t indexBuffer, int firstIndex, int numIndices) {
  396. bgfx_set_index_buffer(*(bgfx_index_buffer_handle_t*)(&indexBuffer), firstIndex, numIndices);
  397. }
  398. void bmx_bgfx_set_dynamic_index_buffer(uint16_t dynamicIndexBuffer, int firstIndex, int numIndices) {
  399. bgfx_set_dynamic_index_buffer(*(bgfx_dynamic_index_buffer_handle_t*)(&dynamicIndexBuffer), firstIndex, numIndices);
  400. }
  401. void bmx_bgfx_set_transient_index_buffer(bgfx_transient_index_buffer_t * transientIndexBuffer, int firstIndex, int numIndices) {
  402. bgfx_set_transient_index_buffer(transientIndexBuffer, firstIndex, numIndices);
  403. }
  404. void bmx_bgfx_set_vertex_buffer(uint8_t stream, uint16_t vertexBuffer, int startVertex, int numVertices) {
  405. bgfx_set_vertex_buffer(stream, *(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), startVertex, numVertices);
  406. }
  407. void bmx_bgfx_set_dynamic_vertex_buffer(uint8_t stream, uint16_t dynamicVertexBuffer, int startVertex, int numVertices) {
  408. bgfx_set_dynamic_vertex_buffer(stream, *(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), startVertex, numVertices);
  409. }
  410. void bmx_bgfx_set_transient_vertex_buffer(uint8_t stream, bgfx_transient_vertex_buffer_t * transientVertexBuffer, int startVertex, int numVertices) {
  411. bgfx_set_transient_vertex_buffer(stream, transientVertexBuffer, startVertex, numVertices);
  412. }
  413. void bmx_bgfx_set_vertex_count(int numVertices) {
  414. bgfx_set_vertex_count(numVertices);
  415. }
  416. void bmx_bgfx_set_instance_data_buffer(bgfx_instance_data_buffer_t * idb, int start, int num) {
  417. bgfx_set_instance_data_buffer(idb, start, num);
  418. }
  419. void bmx_bgfx_set_instance_data_from_vertex_buffer(uint16_t vertexBuffer, int startVertex, int num) {
  420. bgfx_set_instance_data_from_vertex_buffer(*(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), startVertex, num);
  421. }
  422. void bmx_bgfx_set_instance_data_from_dynamic_vertex_buffer(uint16_t dynamicVertexBuffer, int startVertex, int num) {
  423. bgfx_set_instance_data_from_dynamic_vertex_buffer(*(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), startVertex, num);
  424. }
  425. void bmx_bgfx_set_texture(uint8_t stage, uint16_t uniform, uint16_t texture, int flags) {
  426. bgfx_set_texture(stage, *(bgfx_uniform_handle_t*)(&uniform), *(bgfx_texture_handle_t*)(&texture), flags);
  427. }
  428. void bmx_bgfx_touch(uint16_t id) {
  429. bgfx_touch(id);
  430. }
  431. void bmx_bgfx_submit(uint16_t id, uint16_t program, int depth, int preserveState) {
  432. bgfx_submit(id, *(bgfx_program_handle_t*)(&program), depth, preserveState);
  433. }
  434. void bmx_bgfx_submit_occlusion_query(uint16_t id, uint16_t program, uint16_t occlusionQuery, int depth, int preserveState) {
  435. bgfx_submit_occlusion_query(id, *(bgfx_program_handle_t*)(&program), *(bgfx_occlusion_query_handle_t*)(&occlusionQuery), depth, preserveState);
  436. }
  437. void bmx_bgfx_submit_indirect(uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, int depth, int preserveState) {
  438. bgfx_submit_indirect(id, *(bgfx_program_handle_t*)(&program), *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), start, num, depth, preserveState);
  439. }
  440. void bmx_bgfx_set_image(uint8_t stage, uint16_t texture, uint8_t mip, int access, int format) {
  441. bgfx_set_image(stage, *(bgfx_texture_handle_t*)(&texture), mip, access, format);
  442. }
  443. void bmx_bgfx_set_compute_index_buffer(uint8_t stage, uint16_t indexBuffer, int access) {
  444. bgfx_set_compute_index_buffer(stage, *(bgfx_index_buffer_handle_t*)(&indexBuffer), access);
  445. }
  446. void bmx_bgfx_set_compute_vertex_buffer(uint8_t stage, uint16_t vertexBuffer, int access) {
  447. bgfx_set_compute_vertex_buffer(stage, *(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), access);
  448. }
  449. void bmx_bgfx_set_compute_dynamic_index_buffer(uint8_t stage, uint16_t dynamicIndexBuffer, int access) {
  450. bgfx_set_compute_dynamic_index_buffer(stage, *(bgfx_dynamic_index_buffer_handle_t*)(&dynamicIndexBuffer), access);
  451. }
  452. void bmx_bgfx_set_compute_dynamic_vertex_buffer(uint8_t stage, uint16_t dynamicVertexBuffer, int access) {
  453. bgfx_set_compute_dynamic_vertex_buffer(stage, *(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), access);
  454. }
  455. void bmx_bgfx_set_compute_indirect_buffer(uint8_t stage, uint16_t indirectBuffer, int access) {
  456. bgfx_set_compute_indirect_buffer(stage, *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), access);
  457. }
  458. void bmx_bgfx_dispatch(uint16_t id, uint16_t program, int numX, int numY, int numZ, uint8_t flags) {
  459. bgfx_dispatch(id, *(bgfx_program_handle_t*)(&program), numX, numY, numZ, flags);
  460. }
  461. void bmx_bgfx_dispatch_indirect(uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, uint8_t flags) {
  462. bgfx_dispatch_indirect(id, *(bgfx_program_handle_t*)(&program), *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), start, num, flags);
  463. }
  464. void bmx_bgfx_discard(struct bgfx_s * encoder) {
  465. bgfx_discard();
  466. }
  467. void bmx_bgfx_blit(uint16_t id, uint16_t dstTexture, uint8_t dstMip, uint16_t dstX, uint16_t dstY, uint16_t dstZ, uint16_t srcTexture, uint8_t srcMip, uint16_t srcX, uint16_t srcY, uint16_t srcZ, uint16_t width, uint16_t height, uint16_t depth) {
  468. bgfx_blit(id, *(bgfx_texture_handle_t*)(&dstTexture), dstMip, dstX, dstY, dstZ, *(bgfx_texture_handle_t*)(&srcTexture), srcMip, srcX, srcY, srcZ, width, height, depth);
  469. }
  470. /* ----------------------------------------------------- */
  471. void bmx_bgfx_encoder_set_marker(struct bgfx_encoder_s * encoder, BBString * marker) {
  472. char * m = bbStringToUTF8String(marker);
  473. bgfx_encoder_set_marker(encoder, m);
  474. bbMemFree(m);
  475. }
  476. void bmx_bgfx_encoder_set_state(struct bgfx_encoder_s * encoder, uint64_t state, int rgba) {
  477. bgfx_encoder_set_state(encoder, state, rgba);
  478. }
  479. void bmx_bgfx_encoder_set_condition(struct bgfx_encoder_s * encoder, uint16_t occlusionQuery, int visible) {
  480. bgfx_encoder_set_condition(encoder, *(bgfx_occlusion_query_handle_t*)(&occlusionQuery), visible);
  481. }
  482. void bmx_bgfx_encoder_set_stencil(struct bgfx_encoder_s * encoder, int fstencil, int bstencil) {
  483. bgfx_encoder_set_stencil(encoder, fstencil, bstencil);
  484. }
  485. uint16_t bmx_bgfx_encoder_set_scissor(struct bgfx_encoder_s * encoder, uint16_t x, uint16_t y, uint16_t width, uint16_t height) {
  486. return bgfx_encoder_set_scissor(encoder, x, y, width, height);
  487. }
  488. void bmx_bgfx_encoder_set_scissor_cached(struct bgfx_encoder_s * encoder, uint16_t cache) {
  489. bgfx_encoder_set_scissor_cached(encoder, cache);
  490. }
  491. int bmx_bgfx_encoder_set_transform(struct bgfx_encoder_s * encoder, void * matrix, uint16_t num) {
  492. return bgfx_encoder_set_transform(encoder, matrix, num);
  493. }
  494. int bmx_bgfx_encoder_alloc_transform(struct bgfx_encoder_s * encoder, bgfx_transform_t * transform, uint16_t num) {
  495. return bgfx_encoder_alloc_transform(encoder, transform, num);
  496. }
  497. void bmx_bgfx_encoder_set_transform_cached(struct bgfx_encoder_s * encoder, int cache, uint16_t num) {
  498. bgfx_encoder_set_transform_cached(encoder, cache, num);
  499. }
  500. void bmx_bgfx_encoder_set_uniform(struct bgfx_encoder_s * encoder, uint16_t uniform, void * value, uint16_t num) {
  501. bgfx_encoder_set_uniform(encoder, *(bgfx_uniform_handle_t*)(&uniform), value, num);
  502. }
  503. void bmx_bgfx_encoder_set_index_buffer(struct bgfx_encoder_s * encoder, uint16_t indexBuffer, int firstIndex, int numIndices) {
  504. bgfx_encoder_set_index_buffer(encoder, *(bgfx_index_buffer_handle_t*)(&indexBuffer), firstIndex, numIndices);
  505. }
  506. void bmx_bgfx_encoder_set_dynamic_index_buffer(struct bgfx_encoder_s * encoder, uint16_t dynamicIndexBuffer, int firstIndex, int numIndices) {
  507. bgfx_encoder_set_dynamic_index_buffer(encoder, *(bgfx_dynamic_index_buffer_handle_t*)(&dynamicIndexBuffer), firstIndex, numIndices);
  508. }
  509. void bmx_bgfx_encoder_set_transient_index_buffer(struct bgfx_encoder_s * encoder, bgfx_transient_index_buffer_t * transientIndexBuffer, int firstIndex, int numIndices) {
  510. bgfx_encoder_set_transient_index_buffer(encoder, transientIndexBuffer, firstIndex, numIndices);
  511. }
  512. void bmx_bgfx_encoder_set_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, uint16_t vertexBuffer, int startVertex, int numVertices) {
  513. bgfx_encoder_set_vertex_buffer(encoder, stream, *(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), startVertex, numVertices);
  514. }
  515. void bmx_bgfx_encoder_set_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, uint16_t dynamicVertexBuffer, int startVertex, int numVertices) {
  516. bgfx_encoder_set_dynamic_vertex_buffer(encoder, stream, *(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), startVertex, numVertices);
  517. }
  518. void bmx_bgfx_encoder_set_transient_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stream, bgfx_transient_vertex_buffer_t * transientVertexBuffer, int startVertex, int numVertices) {
  519. bgfx_encoder_set_transient_vertex_buffer(encoder, stream, transientVertexBuffer, startVertex, numVertices);
  520. }
  521. void bmx_bgfx_encoder_set_vertex_count(struct bgfx_encoder_s * encoder, int numVertices) {
  522. bgfx_encoder_set_vertex_count(encoder, numVertices);
  523. }
  524. void bmx_bgfx_encoder_set_instance_data_buffer(struct bgfx_encoder_s * encoder, bgfx_instance_data_buffer_t * idb, int start, int num) {
  525. bgfx_encoder_set_instance_data_buffer(encoder, idb, start, num);
  526. }
  527. void bmx_bgfx_encoder_set_instance_data_from_vertex_buffer(struct bgfx_encoder_s * encoder, uint16_t vertexBuffer, int startVertex, int num) {
  528. bgfx_encoder_set_instance_data_from_vertex_buffer(encoder, *(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), startVertex, num);
  529. }
  530. void bmx_bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint16_t dynamicVertexBuffer, int startVertex, int num) {
  531. bgfx_encoder_set_instance_data_from_dynamic_vertex_buffer(encoder, *(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), startVertex, num);
  532. }
  533. void bmx_bgfx_encoder_set_texture(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t uniform, uint16_t texture, int flags) {
  534. bgfx_encoder_set_texture(encoder, stage, *(bgfx_uniform_handle_t*)(&uniform), *(bgfx_texture_handle_t*)(&texture), flags);
  535. }
  536. void bmx_bgfx_encoder_touch(struct bgfx_encoder_s * encoder, uint16_t id) {
  537. bgfx_encoder_touch(encoder, id);
  538. }
  539. void bmx_bgfx_encoder_submit(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, int depth, int preserveState) {
  540. bgfx_encoder_submit(encoder, id, *(bgfx_program_handle_t*)(&program), depth, preserveState);
  541. }
  542. void bmx_bgfx_encoder_submit_occlusion_query(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t occlusionQuery, int depth, int preserveState) {
  543. bgfx_encoder_submit_occlusion_query(encoder, id, *(bgfx_program_handle_t*)(&program), *(bgfx_occlusion_query_handle_t*)(&occlusionQuery), depth, preserveState);
  544. }
  545. void bmx_bgfx_encoder_submit_indirect(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, int depth, int preserveState) {
  546. bgfx_encoder_submit_indirect(encoder, id, *(bgfx_program_handle_t*)(&program), *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), start, num, depth, preserveState);
  547. }
  548. void bmx_bgfx_encoder_set_image(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t texture, uint8_t mip, int access, int format) {
  549. bgfx_encoder_set_image(encoder, stage, *(bgfx_texture_handle_t*)(&texture), mip, access, format);
  550. }
  551. void bmx_bgfx_encoder_set_compute_index_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t indexBuffer, int access) {
  552. bgfx_encoder_set_compute_index_buffer(encoder, stage, *(bgfx_index_buffer_handle_t*)(&indexBuffer), access);
  553. }
  554. void bmx_bgfx_encoder_set_compute_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t vertexBuffer, int access) {
  555. bgfx_encoder_set_compute_vertex_buffer(encoder, stage, *(bgfx_vertex_buffer_handle_t*)(&vertexBuffer), access);
  556. }
  557. void bmx_bgfx_encoder_set_compute_dynamic_index_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t dynamicIndexBuffer, int access) {
  558. bgfx_encoder_set_compute_dynamic_index_buffer(encoder, stage, *(bgfx_dynamic_index_buffer_handle_t*)(&dynamicIndexBuffer), access);
  559. }
  560. void bmx_bgfx_encoder_set_compute_dynamic_vertex_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t dynamicVertexBuffer, int access) {
  561. bgfx_encoder_set_compute_dynamic_vertex_buffer(encoder, stage, *(bgfx_dynamic_vertex_buffer_handle_t*)(&dynamicVertexBuffer), access);
  562. }
  563. void bmx_bgfx_encoder_set_compute_indirect_buffer(struct bgfx_encoder_s * encoder, uint8_t stage, uint16_t indirectBuffer, int access) {
  564. bgfx_encoder_set_compute_indirect_buffer(encoder, stage, *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), access);
  565. }
  566. void bmx_bgfx_encoder_dispatch(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, int numX, int numY, int numZ, uint8_t flags) {
  567. bgfx_encoder_dispatch(encoder, id, *(bgfx_program_handle_t*)(&program), numX, numY, numZ, flags);
  568. }
  569. void bmx_bgfx_encoder_dispatch_indirect(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t program, uint16_t indirectBuffer, uint16_t start, uint16_t num, uint8_t flags) {
  570. bgfx_encoder_dispatch_indirect(encoder, id, *(bgfx_program_handle_t*)(&program), *(bgfx_indirect_buffer_handle_t*)(&indirectBuffer), start, num, flags);
  571. }
  572. void bmx_bgfx_encoder_discard(struct bgfx_encoder_s * encoder) {
  573. bgfx_encoder_discard(encoder);
  574. }
  575. void bmx_bgfx_encoder_blit(struct bgfx_encoder_s * encoder, uint16_t id, uint16_t dstTexture, uint8_t dstMip, uint16_t dstX, uint16_t dstY, uint16_t dstZ, uint16_t srcTexture, uint8_t srcMip, uint16_t srcX, uint16_t srcY, uint16_t srcZ, uint16_t width, uint16_t height, uint16_t depth) {
  576. bgfx_encoder_blit(encoder, id, *(bgfx_texture_handle_t*)(&dstTexture), dstMip, dstX, dstY, dstZ, *(bgfx_texture_handle_t*)(&srcTexture), srcMip, srcX, srcY, srcZ, width, height, depth);
  577. }
  578. /* ----------------------------------------------------- */
  579. uint32_t bmx_bgfx_capslimits_maxDrawCalls(bgfx_caps_limits_t * limits) {
  580. return limits->maxDrawCalls;
  581. }
  582. uint32_t bmx_bgfx_capslimits_maxBlits(bgfx_caps_limits_t * limits) {
  583. return limits->maxBlits;
  584. }
  585. uint32_t bmx_bgfx_capslimits_maxTextureSize(bgfx_caps_limits_t * limits) {
  586. return limits->maxTextureSize;
  587. }
  588. uint32_t bmx_bgfx_capslimits_maxTextureLayers(bgfx_caps_limits_t * limits) {
  589. return limits->maxTextureLayers;
  590. }
  591. uint32_t bmx_bgfx_capslimits_maxViews(bgfx_caps_limits_t * limits) {
  592. return limits->maxViews;
  593. }
  594. uint32_t bmx_bgfx_capslimits_maxFrameBuffers(bgfx_caps_limits_t * limits) {
  595. return limits->maxFrameBuffers;
  596. }
  597. uint32_t bmx_bgfx_capslimits_maxFBAttachments(bgfx_caps_limits_t * limits) {
  598. return limits->maxFBAttachments;
  599. }
  600. uint32_t bmx_bgfx_capslimits_maxPrograms(bgfx_caps_limits_t * limits) {
  601. return limits->maxPrograms;
  602. }
  603. uint32_t bmx_bgfx_capslimits_maxShaders(bgfx_caps_limits_t * limits) {
  604. return limits->maxShaders;
  605. }
  606. uint32_t bmx_bgfx_capslimits_maxTextures(bgfx_caps_limits_t * limits) {
  607. return limits->maxTextures;
  608. }
  609. uint32_t bmx_bgfx_capslimits_maxTextureSamplers(bgfx_caps_limits_t * limits) {
  610. return limits->maxTextureSamplers;
  611. }
  612. uint32_t bmx_bgfx_capslimits_maxVertexDecls(bgfx_caps_limits_t * limits) {
  613. return limits->maxVertexDecls;
  614. }
  615. uint32_t bmx_bgfx_capslimits_maxVertexStreams(bgfx_caps_limits_t * limits) {
  616. return limits->maxVertexStreams;
  617. }
  618. uint32_t bmx_bgfx_capslimits_maxIndexBuffers(bgfx_caps_limits_t * limits) {
  619. return limits->maxIndexBuffers;
  620. }
  621. uint32_t bmx_bgfx_capslimits_maxVertexBuffers(bgfx_caps_limits_t * limits) {
  622. return limits->maxVertexBuffers;
  623. }
  624. uint32_t bmx_bgfx_capslimits_maxDynamicIndexBuffers(bgfx_caps_limits_t * limits) {
  625. return limits->maxDynamicIndexBuffers;
  626. }
  627. uint32_t bmx_bgfx_capslimits_maxDynamicVertexBuffers(bgfx_caps_limits_t * limits) {
  628. return limits->maxDynamicVertexBuffers;
  629. }
  630. uint32_t bmx_bgfx_capslimits_maxUniforms(bgfx_caps_limits_t * limits) {
  631. return limits->maxUniforms;
  632. }
  633. uint32_t bmx_bgfx_capslimits_maxOcclusionQueries(bgfx_caps_limits_t * limits) {
  634. return limits->maxOcclusionQueries;
  635. }
  636. uint32_t bmx_bgfx_capslimits_maxEncoders(bgfx_caps_limits_t * limits) {
  637. return limits->maxEncoders;
  638. }
  639. uint32_t bmx_bgfx_capslimits_transientVbSize(bgfx_caps_limits_t * limits) {
  640. return limits->transientVbSize;
  641. }
  642. uint32_t bmx_bgfx_capslimits_transientIbSize(bgfx_caps_limits_t * limits) {
  643. return limits->transientIbSize;
  644. }