Unravel Engine C++ Reference
Loading...
Searching...
No Matches
graphics.cpp
Go to the documentation of this file.
1#include "graphics.h"
2#include "bgfx/bgfx.h"
3#include <bimg/bimg.h>
4#include <bx/file.h>
5#include <algorithm>
6#include <map>
7#include <vector>
8namespace gfx
9{
10namespace
11{
12auto get_loggers() -> std::map<std::string, std::function<void(const std::string&, const char*, uint16_t)>>&
13{
14 static std::map<std::string, std::function<void(const std::string&, const char*, uint16_t)>> loggers;
15 return loggers;
16}
17
18struct context_data
19{
20 bool initted = false;
21 uint32_t frame{};
22
23 uniform_handle u_world{gfx::invalid_handle};
24
25} s_context;
26
27
28} // namespace
29
30void set_trace_logger(const std::function<void(const std::string&, const char*, uint16_t)>& logger)
31{
32 get_loggers()["trace"] = logger;
33}
34
35void set_info_logger(const std::function<void(const std::string&, const char*, uint16_t)>& logger)
36{
37 get_loggers()["info"] = logger;
38}
39void set_warning_logger(const std::function<void(const std::string&, const char*, uint16_t)>& logger)
40{
41 get_loggers()["warning"] = logger;
42}
43void set_error_logger(const std::function<void(const std::string&, const char*, uint16_t)>& logger)
44{
45 get_loggers()["error"] = logger;
46}
47void log(const std::string& category, const std::string& log_msg, const char* _filePath, uint16_t _line)
48{
49 if(get_loggers()[category])
50 {
51 get_loggers()[category](log_msg, _filePath, _line);
52 }
53}
54
55struct gfx_callback final : public bgfx::CallbackI
56{
57 ~gfx_callback() = default;
58
59 void traceVargs(const char* _filePath, uint16_t _line, const char* _format, va_list _argList) final
60 {
61 char temp[8192];
62 char* out = temp;
63 int32_t len = vsnprintf(out, sizeof(temp), _format, _argList);
64 if((int32_t)sizeof(temp) < len)
65 {
66 out = (char*)alloca(len + 1);
67 len = vsnprintf(out, len, _format, _argList);
68 }
69 out[len] = '\0';
70
71 bx::StringView out_view(out, len);
72 // Determine log type based on prefix
73 if (bx::strCmp(out_view, "WARN ") == 0)
74 {
75 log("warning", out_view.getPtr() + 5, _filePath, _line);
76 }
77 //log("trace", out, _filePath, _line);
78 }
79
80 void profilerBegin(const char* /*_name*/, uint32_t /*_abgr*/, const char* /*_filePath*/, uint16_t /*_line*/) final
81 {
82 }
83
84 void profilerBeginLiteral(const char* /*_name*/,
85 uint32_t /*_abgr*/,
86 const char* /*_filePath*/,
87 uint16_t /*_line*/) final
88 {
89 }
90
91 void profilerEnd() final
92 {
93 }
94 void fatal(const char* _filePath, uint16_t _line, bgfx::Fatal::Enum /*_code*/, const char* _str) final
95 {
96 log("error", _str, _filePath, _line);
97 }
98
99 uint32_t cacheReadSize(uint64_t /*_id*/) final
100 {
101 return 0;
102 }
103
104 bool cacheRead(uint64_t /*_id*/, void* /*_data*/, uint32_t /*_size*/) final
105 {
106 return false;
107 }
108
109 void cacheWrite(uint64_t /*_id*/, const void* /*_data*/, uint32_t /*_size*/) final
110 {
111 }
112
113 virtual void screenShot(const char* _filePath,
114 uint32_t _width,
115 uint32_t _height,
116 uint32_t _pitch,
117 const void* _data,
118 uint32_t _size,
119 bool _yflip) override
120 {
121 const std::string full_path = std::string(_filePath) + ".png";
122
123 bx::FileWriter writer;
124 if (bx::open(&writer, full_path.c_str()))
125 {
126 //if (image_type == ImageType::Png)
127 {
128 bimg::imageWritePng(&writer,
129 _width,
130 _height,
131 _pitch,
132 _data,
133 bimg::TextureFormat::BGRA8,
134 _yflip,
135 nullptr);
136 }
137 // else
138 // {
139 // bimg::imageWriteTga(&writer, _width, _height, _pitch, _data, false, _yflip);
140 // }
141
142 bx::close(&writer);
143 }
144 }
145
146 void captureBegin(uint32_t /*_width*/,
147 uint32_t /*_height*/,
148 uint32_t /*_pitch*/,
149 texture_format /*_format*/,
150 bool /*_yflip*/) final
151 {
152 }
153
154 void captureEnd() final
155 {
156 }
157
158 void captureFrame(const void* /*_data*/, uint32_t /*_size*/) final
159 {
160 }
161};
162
164{
165 bgfx::setPlatformData(_data);
166}
167
169{
170 if(s_context.initted)
171 {
172 bgfx::destroy(s_context.u_world);
173 bgfx::shutdown();
174 }
175 s_context = {};
176}
177
178bool init(init_type init_data)
179{
180 if(init_data.callback == nullptr)
181 {
182 static gfx_callback callback;
183 init_data.callback = &callback;
184 }
185 s_context.frame = 0;
186 s_context.initted = bgfx::init(init_data);
187 s_context.u_world = create_uniform("u_world", bgfx::UniformType::Mat4, get_max_blend_transforms());
188
189 bgfx::frame();
190 return s_context.initted;
191}
192
193void vertex_pack(const float _input[4],
194 bool _inputNormalized,
195 attribute _attr,
196 const vertex_layout& _decl,
197 void* _data,
198 uint32_t _index)
199{
200 bgfx::vertexPack(_input, _inputNormalized, _attr, _decl, _data, _index);
201}
202
203void vertex_unpack(float _output[4], attribute _attr, const vertex_layout& _decl, const void* _data, uint32_t _index)
204{
205 bgfx::vertexUnpack(_output, _attr, _decl, _data, _index);
206}
207
208void vertex_convert(const vertex_layout& _destDecl,
209 void* _destData,
210 const vertex_layout& _srcDecl,
211 const void* _srcData,
212 uint32_t _num)
213{
214 bgfx::vertexConvert(_destDecl, _destData, _srcDecl, _srcData, _num);
215}
216
217uint16_t weld_vertices(uint16_t* _output, const vertex_layout& _decl, const void* _data, uint16_t _num, float _epsilon)
218{
219 return bgfx::weldVertices(_output, _decl, _data, _num, _epsilon);
220}
221
223 void* _dst,
224 uint32_t _dstSize,
225 const void* _indices,
226 uint32_t _numIndices,
227 bool _index32)
228{
229 return bgfx::topologyConvert(_conversion, _dst, _dstSize, _indices, _numIndices, _index32);
230}
231
233 void* _dst,
234 uint32_t _dstSize,
235 const float _dir[],
236 const float _pos[],
237 const void* _vertices,
238 uint32_t _stride,
239 const void* _indices,
240 uint32_t _numIndices,
241 bool _index32)
242{
243 bgfx::topologySortTriList(_sort, _dst, _dstSize, _dir, _pos, _vertices, _stride, _indices, _numIndices, _index32);
244}
245
247{
248 return bgfx::createEmbeddedShader(_es, _type, _name);
249}
250
251uint8_t get_supported_renderers(uint8_t _max, renderer_type* _enum)
252{
253 return bgfx::getSupportedRenderers(_max, _enum);
254}
255
257{
258 return bgfx::getRendererName(_type);
259}
260
261void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
262{
263 bgfx::reset(_width, _height, _flags);
264}
265
267{
268 return bgfx::begin();
269}
270
271void end(encoder* _encoder)
272{
273 bgfx::end(_encoder);
274}
275
276uint32_t frame(bool _capture)
277{
278 s_context.frame = bgfx::frame(_capture);
279 return s_context.frame;
280}
281
283{
284 return bgfx::getRendererType();
285}
286
288{
289 return bgfx::getCaps();
290}
291
293{
294 return bgfx::getStats();
295}
296
297const memory_view* alloc(uint32_t _size)
298{
299 return bgfx::alloc(_size);
300}
301
302const memory_view* copy(const void* _data, uint32_t _size)
303{
304 return bgfx::copy(_data, _size);
305}
306
307const memory_view* make_ref(const void* _data, uint32_t _size, release_fn _releaseFn, void* _userData)
308{
309 return bgfx::makeRef(_data, _size, _releaseFn, _userData);
310}
311
312void set_debug(uint32_t _debug)
313{
314 bgfx::setDebug(_debug);
315}
316
317void dbg_text_clear(uint8_t _attr, bool _small)
318{
319 bgfx::dbgTextClear(_attr, _small);
320}
321
322void dbg_text_printf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format)
323{
324 bgfx::dbgTextPrintf(_x, _y, _attr, _format);
325}
326
327void dbg_text_vprintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char* _format, va_list _argList)
328{
329 bgfx::dbgTextPrintfVargs(_x, _y, _attr, _format, _argList);
330}
331
332void dbg_text_image(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void* _data, uint16_t _pitch)
333{
334 bgfx::dbgTextImage(_x, _y, _width, _height, _data, _pitch);
335}
336
338{
339 return bgfx::createIndexBuffer(_mem, _flags);
340}
341
343{
344 bgfx::destroy(_handle);
345}
346
347vertex_buffer_handle create_vertex_buffer(const memory_view* _mem, const vertex_layout& _decl, uint16_t _flags)
348{
349 return bgfx::createVertexBuffer(_mem, _decl, _flags);
350}
351
353{
354 bgfx::destroy(_handle);
355}
356
358{
359 return bgfx::createDynamicIndexBuffer(_num, _flags);
360}
361
363{
364 return bgfx::createDynamicIndexBuffer(_mem, _flags);
365}
366
367void update(dynamic_index_buffer_handle _handle, uint32_t _startIndex, const memory_view* _mem)
368{
369 bgfx::update(_handle, _startIndex, _mem);
370}
371
373{
374 bgfx::destroy(_handle);
375}
376
378{
379 return bgfx::createDynamicVertexBuffer(_num, _decl, _flags);
380}
381
383 const vertex_layout& _decl,
384 uint16_t _flags)
385{
386 return bgfx::createDynamicVertexBuffer(_mem, _decl, _flags);
387}
388
389void update(dynamic_vertex_buffer_handle _handle, uint32_t _startVertex, const memory_view* _mem)
390{
391 bgfx::update(_handle, _startVertex, _mem);
392}
393
395{
396 bgfx::destroy(_handle);
397}
398
399uint32_t get_avail_transient_index_buffer(uint32_t _num, bool _index32)
400{
401 return bgfx::getAvailTransientIndexBuffer(_num, _index32);
402}
403
404uint32_t get_avail_transient_vertex_buffer(uint32_t _num, const vertex_layout& _decl)
405{
406 return bgfx::getAvailTransientVertexBuffer(_num, _decl);
407}
408
409uint32_t get_avail_instance_data_buffer(uint32_t _num, uint16_t _stride)
410{
411 return bgfx::getAvailInstanceDataBuffer(_num, _stride);
412}
413
414void alloc_transient_index_buffer(transient_index_buffer* _tib, uint32_t _num, bool _index32)
415{
416 bgfx::allocTransientIndexBuffer(_tib, _num, _index32);
417}
418
420{
421 bgfx::allocTransientVertexBuffer(_tvb, _num, _decl);
422}
423
425 const vertex_layout& _decl,
426 uint32_t _numVertices,
428 uint32_t _numIndices)
429{
430 return bgfx::allocTransientBuffers(_tvb, _decl, _numVertices, _tib, _numIndices);
431}
432
433void alloc_instance_data_buffer(instance_data_buffer* _idb, uint32_t _num, uint16_t _stride)
434{
435 bgfx::allocInstanceDataBuffer(_idb, _num, _stride);
436}
437
439{
440 return bgfx::createIndirectBuffer(_num);
441}
442
444{
445 bgfx::destroy(_handle);
446}
447
449{
450 return bgfx::createShader(_mem);
451}
452
453uint16_t get_shader_uniforms(shader_handle _handle, uniform_handle* _uniforms, uint16_t _max)
454{
455 return bgfx::getShaderUniforms(_handle, _uniforms, _max);
456}
457
459{
460 bgfx::getUniformInfo(_handle, _info);
461}
462
463void set_name(shader_handle _handle, const char* _name, int32_t _len)
464{
465 bgfx::setName(_handle, _name, _len);
466}
467
469{
470 bgfx::destroy(_handle);
471}
472
474{
475 return bgfx::createProgram(_vsh, _fsh, _destroyShaders);
476}
477
478program_handle create_program(shader_handle _csh, bool _destroyShaders)
479{
480 return bgfx::createProgram(_csh, _destroyShaders);
481}
482
484{
485 bgfx::destroy(_handle);
486}
487
488bool is_texture_valid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, texture_format _format, uint64_t _flags)
489{
490 return bgfx::isTextureValid(_depth, _cubeMap, _numLayers, _format, _flags);
491}
492
494 uint16_t _width,
495 uint16_t _height,
496 uint16_t _depth,
497 bool _cubeMap,
498 bool _hasMips,
499 uint16_t _numLayers,
500 texture_format _format)
501{
502 bgfx::calcTextureSize(_info, _width, _height, _depth, _cubeMap, _hasMips, _numLayers, _format);
503}
504
505texture_handle create_texture(const memory_view* _mem, uint64_t _flags, uint8_t _skip, texture_info* _info)
506{
507 return bgfx::createTexture(_mem, _flags, _skip, _info);
508}
509
511 uint16_t _height,
512 bool _hasMips,
513 uint16_t _numLayers,
514 texture_format _format,
515 uint64_t _flags,
516 const memory_view* _mem)
517{
518 return bgfx::createTexture2D(_width, _height, _hasMips, _numLayers, _format, _flags, _mem);
519}
520
522 bool _hasMips,
523 uint16_t _numLayers,
524 texture_format _format,
525 uint64_t _flags)
526{
527 return bgfx::createTexture2D(_ratio, _hasMips, _numLayers, _format, _flags);
528}
529
531 uint16_t _height,
532 uint16_t _depth,
533 bool _hasMips,
534 texture_format _format,
535 uint64_t _flags,
536 const memory_view* _mem)
537{
538 return bgfx::createTexture3D(_width, _height, _depth, _hasMips, _format, _flags, _mem);
539}
540
542 bool _hasMips,
543 uint16_t _numLayers,
544 texture_format _format,
545 uint64_t _flags,
546 const memory_view* _mem)
547{
548 return bgfx::createTextureCube(_size, _hasMips, _numLayers, _format, _flags, _mem);
549}
550
552 uint16_t _layer,
553 uint8_t _mip,
554 uint16_t _x,
555 uint16_t _y,
556 uint16_t _width,
557 uint16_t _height,
558 const memory_view* _mem,
559 uint16_t _pitch)
560{
561 bgfx::updateTexture2D(_handle, _layer, _mip, _x, _y, _width, _height, _mem, _pitch);
562}
563
565 uint8_t _mip,
566 uint16_t _x,
567 uint16_t _y,
568 uint16_t _z,
569 uint16_t _width,
570 uint16_t _height,
571 uint16_t _depth,
572 const memory_view* _mem)
573{
574 bgfx::updateTexture3D(_handle, _mip, _x, _y, _z, _width, _height, _depth, _mem);
575}
576
578 uint16_t _layer,
579 uint8_t _side,
580 uint8_t _mip,
581 uint16_t _x,
582 uint16_t _y,
583 uint16_t _width,
584 uint16_t _height,
585 const memory_view* _mem,
586 uint16_t _pitch)
587{
588 bgfx::updateTextureCube(_handle, _layer, _side, _mip, _x, _y, _width, _height, _mem, _pitch);
589}
590
591uint32_t read_texture(texture_handle _handle, void* _data, uint8_t _mip)
592{
593 return bgfx::readTexture(_handle, _data, _mip);
594}
595
596void set_name(texture_handle _handle, const char* _name, int32_t _len)
597{
598 bgfx::setName(_handle, _name, _len);
599}
600
602{
603 bgfx::destroy(_handle);
604}
605
607 uint16_t _height,
608 texture_format _format,
609 uint64_t _textureFlags)
610{
611 return bgfx::createFrameBuffer(_width, _height, _format, _textureFlags);
612}
613
615{
616 return bgfx::createFrameBuffer(_ratio, _format, _textureFlags);
617}
618
619frame_buffer_handle create_frame_buffer(uint8_t _num, const texture_handle* _handles, bool _destroyTextures)
620{
621 return bgfx::createFrameBuffer(_num, _handles, _destroyTextures);
622}
623
624frame_buffer_handle create_frame_buffer(uint8_t _num, const attachment* _attachment, bool _destroyTextures)
625{
626 return bgfx::createFrameBuffer(_num, _attachment, _destroyTextures);
627}
628
630 uint16_t _width,
631 uint16_t _height,
632 texture_format _format,
633 texture_format _depthFormat)
634{
635 return bgfx::createFrameBuffer(_nwh, _width, _height, _format, _depthFormat);
636}
637
638texture_handle get_texture(frame_buffer_handle _handle, uint8_t _attachment)
639{
640 return bgfx::getTexture(_handle, _attachment);
641}
642
643void set_name(frame_buffer_handle _handle, const char* _name, int32_t _len)
644{
645 bgfx::setName(_handle, _name, _len);
646}
647
649{
650 bgfx::destroy(_handle);
651}
652
653uniform_handle create_uniform(const char* _name, uniform_type _type, uint16_t _num)
654{
655 return bgfx::createUniform(_name, _type, _num);
656}
657
659{
660 bgfx::destroy(_handle);
661}
662
664{
665 return bgfx::createOcclusionQuery();
666}
667
669{
670 return bgfx::getResult(_handle, _result);
671}
672
674{
675 bgfx::destroy(_handle);
676}
677
678void set_palette_color(uint8_t _index, uint32_t _rgba)
679{
680 bgfx::setPaletteColor(_index, _rgba);
681}
682
683void set_palette_color(uint8_t _index, const float _rgba[])
684{
685 bgfx::setPaletteColor(_index, _rgba);
686}
687
688void set_palette_color(uint8_t _index, float _r, float _g, float _b, float _a)
689{
690 bgfx::setPaletteColor(_index, _r, _g, _b, _a);
691}
692
693void set_view_name(view_id _id, const char* _name)
694{
695 bgfx::setViewName(_id, _name);
696}
697
698void set_view_rect(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
699{
700 bgfx::setViewRect(_id, _x, _y, _width, _height);
701}
702
703void set_view_rect(view_id _id, uint16_t _x, uint16_t _y, backbuffer_ratio _ratio)
704{
705 bgfx::setViewRect(_id, _x, _y, _ratio);
706}
707
708void set_view_scissor(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
709{
710 bgfx::setViewScissor(_id, _x, _y, _width, _height);
711}
712
713void set_view_clear(view_id _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
714{
715 bgfx::setViewClear(_id, _flags, _rgba, _depth, _stencil);
716}
717
719 uint16_t _flags,
720 float _depth,
721 uint8_t _stencil,
722 uint8_t _0,
723 uint8_t _1,
724 uint8_t _2,
725 uint8_t _3,
726 uint8_t _4,
727 uint8_t _5,
728 uint8_t _6,
729 uint8_t _7)
730{
731 bgfx::setViewClear(_id, _flags, _depth, _stencil, _0, _1, _2, _3, _4, _5, _6, _7);
732}
733
735{
736 bgfx::setViewMode(_id, _mode);
737}
738
740{
741 bgfx::setViewFrameBuffer(_id, _handle);
742}
743
744void set_view_transform(view_id _id, const void* _view, const void* _proj)
745{
746 bgfx::setViewTransform(_id, _view, _proj);
747}
748
749void set_view_order(view_id _id, uint16_t _num, const view_id* _order)
750{
751 bgfx::setViewOrder(_id, _num, _order);
752}
753
755{
756 bgfx::resetView(_id);
757}
758
759void set_marker(const char* _marker)
760{
761 bgfx::setMarker(_marker);
762}
763
764void set_state(uint64_t _state, uint32_t _rgba)
765{
766 bgfx::setState(_state, _rgba);
767}
768
769void set_condition(occlusion_query_handle _handle, bool _visible)
770{
771 bgfx::setCondition(_handle, _visible);
772}
773
774void set_stencil(uint32_t _fstencil, uint32_t _bstencil)
775{
776 bgfx::setStencil(_fstencil, _bstencil);
777}
778
779uint16_t set_scissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
780{
781 return bgfx::setScissor(_x, _y, _width, _height);
782}
783
784void set_scissor(uint16_t _cache)
785{
786 bgfx::setScissor(_cache);
787}
788
789uint32_t set_transform(const void* _mtx, uint16_t _num)
790{
791 return bgfx::setTransform(_mtx, _num);
792}
793
794uint32_t alloc_transform(transform* _transform, uint16_t _num)
795{
796 return bgfx::allocTransform(_transform, _num);
797}
798
799void set_transform(uint32_t _cache, uint16_t _num)
800{
801 bgfx::setTransform(_cache, _num);
802}
803
804void set_uniform(uniform_handle _handle, const void* _value, uint16_t _num)
805{
806 bgfx::setUniform(_handle, _value, _num);
807}
808
810{
811 bgfx::setIndexBuffer(_handle);
812}
813
814void set_index_buffer(index_buffer_handle _handle, uint32_t _firstIndex, uint32_t _numIndices)
815{
816 bgfx::setIndexBuffer(_handle, _firstIndex, _numIndices);
817}
818
820{
821 bgfx::setIndexBuffer(_handle);
822}
823
824void set_index_buffer(dynamic_index_buffer_handle _handle, uint32_t _firstIndex, uint32_t _numIndices)
825{
826 bgfx::setIndexBuffer(_handle, _firstIndex, _numIndices);
827}
828
830{
831 bgfx::setIndexBuffer(_tib);
832}
833
834void set_index_buffer(const transient_index_buffer* _tib, uint32_t _firstIndex, uint32_t _numIndices)
835{
836 bgfx::setIndexBuffer(_tib, _firstIndex, _numIndices);
837}
838
839void set_vertex_buffer(uint8_t _stream, vertex_buffer_handle _handle)
840{
841 bgfx::setVertexBuffer(_stream, _handle);
842}
843
844void set_vertex_buffer(uint8_t _stream, vertex_buffer_handle _handle, uint32_t _startVertex, uint32_t _numVertices)
845{
846 bgfx::setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
847}
848
850{
851 bgfx::setVertexBuffer(_stream, _handle);
852}
853
854void set_vertex_buffer(uint8_t _stream,
856 uint32_t _startVertex,
857 uint32_t _numVertices)
858{
859 bgfx::setVertexBuffer(_stream, _handle, _startVertex, _numVertices);
860}
861
862void set_vertex_buffer(uint8_t _stream, const transient_vertex_buffer* _tvb)
863{
864 bgfx::setVertexBuffer(_stream, _tvb);
865}
866
867void set_vertex_buffer(uint8_t _stream,
868 const transient_vertex_buffer* _tvb,
869 uint32_t _startVertex,
870 uint32_t _numVertices)
871{
872 bgfx::setVertexBuffer(_stream, _tvb, _startVertex, _numVertices);
873}
874
875void set_instance_data_buffer(const instance_data_buffer* _idb, uint32_t _start, uint32_t _num)
876{
877 bgfx::setInstanceDataBuffer(_idb, _start, _num);
878}
879
880void set_instance_data_buffer(vertex_buffer_handle _handle, uint32_t _startVertex, uint32_t _num)
881{
882 bgfx::setInstanceDataBuffer(_handle, _startVertex, _num);
883}
884
885void set_instance_data_buffer(dynamic_vertex_buffer_handle _handle, uint32_t _startVertex, uint32_t _num)
886{
887 bgfx::setInstanceDataBuffer(_handle, _startVertex, _num);
888}
889
890void set_texture(uint8_t _stage, uniform_handle _sampler, texture_handle _handle, uint32_t _flags)
891{
892 bgfx::setTexture(_stage, _sampler, _handle, _flags);
893}
894
895void touch(view_id _id)
896{
897 bgfx::touch(_id);
898}
899
900void submit(view_id _id, program_handle _handle, int32_t _depth, bool _preserveState)
901{
902 bgfx::submit(_id, _handle, _depth, _preserveState ? BGFX_DISCARD_NONE : BGFX_DISCARD_ALL);
903}
904
906 program_handle _program,
907 occlusion_query_handle _occlusionQuery,
908 int32_t _depth,
909 bool _preserveState)
910{
911 bgfx::submit(_id, _program, _occlusionQuery, _depth, _preserveState);
912}
913
915 program_handle _handle,
916 indirect_buffer_handle _indirectHandle,
917 uint16_t _start,
918 uint16_t _num,
919 int32_t _depth,
920 bool _preserveState)
921{
922 bgfx::submit(_id, _handle, _indirectHandle, _start, _num, _depth, _preserveState);
923}
924
925void set_image(uint8_t _stage, texture_handle _handle, uint8_t _mip, access _access, texture_format _format)
926{
927 bgfx::setImage(_stage, _handle, _mip, _access, _format);
928}
929
930void set_buffer(uint8_t _stage, index_buffer_handle _handle, access _access)
931{
932 bgfx::setBuffer(_stage, _handle, _access);
933}
934
935void set_buffer(uint8_t _stage, vertex_buffer_handle _handle, access _access)
936{
937 bgfx::setBuffer(_stage, _handle, _access);
938}
939
940void set_buffer(uint8_t _stage, dynamic_index_buffer_handle _handle, access _access)
941{
942 bgfx::setBuffer(_stage, _handle, _access);
943}
944
945void set_buffer(uint8_t _stage, dynamic_vertex_buffer_handle _handle, access _access)
946{
947 bgfx::setBuffer(_stage, _handle, _access);
948}
949
950void set_buffer(uint8_t _stage, indirect_buffer_handle _handle, access _access)
951{
952 bgfx::setBuffer(_stage, _handle, _access);
953}
954
955void dispatch(view_id _id, program_handle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
956{
957 bgfx::dispatch(_id, _handle, _numX, _numY, _numZ);
958}
959
961 program_handle _handle,
962 indirect_buffer_handle _indirectHandle,
963 uint16_t _start,
964 uint16_t _num)
965{
966 bgfx::dispatch(_id, _handle, _indirectHandle, _start, _num);
967}
968
969void discard(uint8_t _flags)
970{
971 bgfx::discard();
972}
973
974void blit(view_id _id,
975 texture_handle _dst,
976 uint16_t _dstX,
977 uint16_t _dstY,
978 texture_handle _src,
979 uint16_t _srcX,
980 uint16_t _srcY,
981 uint16_t _width,
982 uint16_t _height)
983{
984 bgfx::blit(_id, _dst, _dstX, _dstY, _src, _srcX, _srcY, _width, _height);
985}
986
987void blit(view_id _id,
988 texture_handle _dst,
989 uint8_t _dstMip,
990 uint16_t _dstX,
991 uint16_t _dstY,
992 uint16_t _dstZ,
993 texture_handle _src,
994 uint8_t _srcMip,
995 uint16_t _srcX,
996 uint16_t _srcY,
997 uint16_t _srcZ,
998 uint16_t _width,
999 uint16_t _height,
1000 uint16_t _depth)
1001{
1002 bgfx::blit(_id, _dst, _dstMip, _dstX, _dstY, _dstZ, _src, _srcMip, _srcX, _srcY, _srcZ, _width, _height, _depth);
1003}
1004
1005void request_screen_shot(frame_buffer_handle _handle, const char* _filePath)
1006{
1007 bgfx::requestScreenShot(_handle, _filePath);
1008}
1009
1010void flush()
1011{
1012 bgfx::frame();
1013 bgfx::frame();
1014}
1015
1016auto screen_quad(float dest_width, float dest_height, float depth, float width, float height) -> uint64_t
1017{
1018 float texture_half = get_half_texel();
1019 bool origin_bottom_left = is_origin_bottom_left();
1020
1021 if(3 == getAvailTransientVertexBuffer(3, pos_texcoord0_vertex::get_layout()))
1022 {
1025 auto vertex = reinterpret_cast<pos_texcoord0_vertex*>(vb.data);
1026
1027 const float minx = -width;
1028 const float maxx = width;
1029 const float miny = 0.0f;
1030 const float maxy = height * 2.0f;
1031
1032 const float texel_half_w = texture_half / dest_width;
1033 const float texel_half_h = texture_half / dest_height;
1034 const float minu = -1.0f + texel_half_w;
1035 const float maxu = 1.0f + texel_half_h;
1036
1037 const float zz = depth;
1038
1039 float minv = texel_half_h;
1040 float maxv = 2.0f + texel_half_h;
1041
1042 if(origin_bottom_left)
1043 {
1044 float temp = minv;
1045 minv = maxv;
1046 maxv = temp;
1047
1048 minv -= 1.0f;
1049 maxv -= 1.0f;
1050 }
1051
1052 vertex[0].x = minx;
1053 vertex[0].y = miny;
1054 vertex[0].z = zz;
1055 vertex[0].u = minu;
1056 vertex[0].v = minv;
1057
1058 vertex[1].x = maxx;
1059 vertex[1].y = miny;
1060 vertex[1].z = zz;
1061 vertex[1].u = maxu;
1062 vertex[1].v = minv;
1063
1064 vertex[2].x = maxx;
1065 vertex[2].y = maxy;
1066 vertex[2].z = zz;
1067 vertex[2].u = maxu;
1068 vertex[2].v = maxv;
1069
1070 bgfx::setVertexBuffer(0, &vb);
1071 }
1072
1073 return 0;
1074}
1075
1076auto clip_quad(float depth, float width, float height) -> uint64_t
1077{
1078 // float texture_half = get_half_texel();
1079 bool origin_bottom_left = is_origin_bottom_left();
1080
1081 if(4 == getAvailTransientVertexBuffer(4, pos_texcoord0_vertex::get_layout()))
1082 {
1085 auto vertex = reinterpret_cast<pos_texcoord0_vertex*>(vb.data);
1086
1087 const float minx = -width;
1088 const float maxx = width;
1089 const float miny = -height;
1090 const float maxy = height;
1091
1092 // const float texel_half_w = texture_half;
1093 // const float texel_half_h = texture_half;
1094 const float minu = 0.0f;
1095 const float maxu = 1.0f;
1096
1097 const float zz = depth;
1098
1099 float minv = 1.0f;
1100 float maxv = 0.0f;
1101
1102 if(origin_bottom_left)
1103 {
1104 minv = 1.0f - minv;
1105 maxv = 1.0f - maxv;
1106 }
1107
1108 vertex[0].x = minx;
1109 vertex[0].y = maxy;
1110 vertex[0].z = zz;
1111 vertex[0].u = minu;
1112 vertex[0].v = maxv;
1113
1114 vertex[1].x = maxx;
1115 vertex[1].y = maxy;
1116 vertex[1].z = zz;
1117 vertex[1].u = maxu;
1118 vertex[1].v = maxv;
1119
1120 vertex[2].x = minx;
1121 vertex[2].y = miny;
1122 vertex[2].z = zz;
1123 vertex[2].u = minu;
1124 vertex[2].v = minv;
1125
1126 vertex[3].x = maxx;
1127 vertex[3].y = miny;
1128 vertex[3].z = zz;
1129 vertex[3].u = maxu;
1130 vertex[3].v = minv;
1131
1132 bgfx::setVertexBuffer(0, &vb);
1133 }
1134
1135 return BGFX_STATE_PT_TRISTRIP;
1136}
1137
1138uint64_t clip_quad_ex(const clip_quad_def& def)
1139{
1140 // float texture_half = get_half_texel();
1141 bool origin_bottom_left = is_origin_bottom_left();
1142
1143 if(4 == getAvailTransientVertexBuffer(4, pos_texcoord0_vertex::get_layout()))
1144 {
1147 auto vertex = reinterpret_cast<pos_texcoord0_vertex*>(vb.data);
1148
1149 // Apply position offset to the quad geometry
1150 const float minx = -def.width + def.offset_x;
1151 const float maxx = def.width + def.offset_x;
1152 const float miny = -def.height + def.offset_y;
1153 const float maxy = def.height + def.offset_y;
1154
1155 // const float texel_half_w = texture_half;
1156 // const float texel_half_h = texture_half;
1157 const float minu = 0.0f;
1158 const float maxu = 1.0f;
1159
1160 const float zz = def.depth;
1161
1162 float minv = 1.0f;
1163 float maxv = 0.0f;
1164
1165 vertex[0].x = minx;
1166 vertex[0].y = maxy;
1167 vertex[0].z = zz;
1168 vertex[0].u = minu;
1169 vertex[0].v = maxv;
1170
1171 vertex[1].x = maxx;
1172 vertex[1].y = maxy;
1173 vertex[1].z = zz;
1174 vertex[1].u = maxu;
1175 vertex[1].v = maxv;
1176
1177 vertex[2].x = minx;
1178 vertex[2].y = miny;
1179 vertex[2].z = zz;
1180 vertex[2].u = minu;
1181 vertex[2].v = minv;
1182
1183 vertex[3].x = maxx;
1184 vertex[3].y = miny;
1185 vertex[3].z = zz;
1186 vertex[3].u = maxu;
1187 vertex[3].v = minv;
1188
1189 // Apply UV offset and scaling
1190 for(int i = 0; i < 4; i++)
1191 {
1192 vertex[i].u = (vertex[i].u * def.uv_scaling_x) + def.uv_offset_x;
1193 vertex[i].v = (vertex[i].v * def.uv_scaling_y) + def.uv_offset_y;
1194 if(origin_bottom_left)
1195 {
1196 vertex[i].v = 1.0f - vertex[i].v;
1197 }
1198 }
1199
1200 bgfx::setVertexBuffer(0, &vb);
1201 }
1202
1203 return BGFX_STATE_PT_TRISTRIP;
1204}
1205
1206void get_size_from_ratio(backbuffer_ratio _ratio, uint16_t& _width, uint16_t& _height)
1207{
1208 auto stats = bgfx::getStats();
1209 _width = stats->width;
1210 _height = stats->height;
1211 switch(_ratio)
1212 {
1213 case backbuffer_ratio::Half:
1214 _width /= 2;
1215 _height /= 2;
1216 break;
1217 case backbuffer_ratio::Quarter:
1218 _width /= 4;
1219 _height /= 4;
1220 break;
1221 case backbuffer_ratio::Eighth:
1222 _width /= 8;
1223 _height /= 8;
1224 break;
1225 case backbuffer_ratio::Sixteenth:
1226 _width /= 16;
1227 _height /= 16;
1228 break;
1229 case backbuffer_ratio::Double:
1230 _width *= 2;
1231 _height *= 2;
1232 break;
1233
1234 default:
1235 break;
1236 }
1237
1238 _width = std::max<uint16_t>(1, _width);
1239 _height = std::max<uint16_t>(1, _height);
1240}
1241
1242auto get_renderer_filename_extension(renderer_type _type) -> const std::string&
1243{
1244 static const std::map<renderer_type, std::string> types = {{renderer_type::Direct3D11, ".dx11"},
1245 {renderer_type::Direct3D12, ".dx12"},
1246 {renderer_type::Gnm, ".pssl"},
1247 {renderer_type::Metal, ".metal"},
1248 {renderer_type::Nvn, ".nvn"},
1249
1250 {renderer_type::OpenGL, ".gl"},
1251 {renderer_type::OpenGLES, ".essl"},
1252 {renderer_type::Vulkan, ".spirv"}};
1253
1254 const auto it = types.find(_type);
1255 if(it != types.cend())
1256 {
1257 return it->second;
1258 }
1259 static std::string unknown = ".unknown";
1260 return unknown;
1261}
1262
1263
1264
1266{
1267 return get_renderer_filename_extension(bgfx::getRendererType());
1268}
1269
1270auto get_renderer_platform_supported_filename_extensions() ->const std::vector<std::string>&
1271{
1272#if BX_PLATFORM_WINDOWS
1273 static const std::vector<std::string> supported = {get_renderer_filename_extension(renderer_type::Direct3D11),
1274 get_renderer_filename_extension(renderer_type::Direct3D12),
1275 get_renderer_filename_extension(renderer_type::OpenGL),
1276 get_renderer_filename_extension(renderer_type::Vulkan)};
1277 return supported;
1278#else
1279 static const std::vector<std::string> supported = {get_current_renderer_filename_extension()};
1280 return supported;
1281#endif
1282}
1283
1284
1286{
1287 for(int i = renderer_type::Noop; i < renderer_type::Count; ++i)
1288 {
1289 auto rtype = renderer_type(i);
1290 if(get_renderer_filename_extension(rtype) == _type)
1291 {
1292 return rtype;
1293 }
1294 }
1295
1296 return get_renderer_type();
1297}
1298
1299
1300
1302{
1303 //We handle this in shaders.
1304 return false;//get_caps()->homogeneousDepth;
1305}
1306
1308{
1309 return get_caps()->originBottomLeft;
1310}
1311
1313{
1314 return 128;
1315}
1316
1317auto get_half_texel() -> float
1318{
1319 float half_texel = 0.0f;
1320 return half_texel;
1321}
1322
1323auto is_supported(uint64_t flag) -> bool
1324{
1325 const auto caps = gfx::get_caps();
1326 bool supported = 0 != (caps->supported & flag);
1327 return supported;
1328}
1329
1330bool check_avail_transient_buffers(uint32_t _numVertices,
1331 const vertex_layout& _layout,
1332 uint32_t _numIndices,
1333 bool _index32)
1334{
1335 return _numVertices == bgfx::getAvailTransientVertexBuffer(_numVertices, _layout) &&
1336 (0 == _numIndices || _numIndices == bgfx::getAvailTransientIndexBuffer(_numIndices, _index32));
1337}
1338
1340{
1341 return s_context.frame;
1342}
1343
1344void set_world_transform(const void* _mtx, uint16_t _num)
1345{
1346 bgfx::setUniform(s_context.u_world, _mtx, _num);
1347}
1348
1349} // namespace gfx
uniform_handle u_world
Definition graphics.cpp:23
uint32_t frame
Definition graphics.cpp:21
bool initted
Definition graphics.cpp:20
uint32_t flag
void alloc_transient_index_buffer(transient_index_buffer *_tib, uint32_t _num, bool _index32)
Definition graphics.cpp:414
bgfx::ReleaseFn release_fn
Definition graphics.h:37
void get_uniform_info(uniform_handle _handle, uniform_info &_info)
Definition graphics.cpp:458
bgfx::FrameBufferHandle frame_buffer_handle
Definition graphics.h:43
void dispatch(view_id _id, program_handle _handle, uint32_t _numX, uint32_t _numY, uint32_t _numZ)
Definition graphics.cpp:955
bgfx::Init init_type
Definition graphics.h:19
void alloc_instance_data_buffer(instance_data_buffer *_idb, uint32_t _num, uint16_t _stride)
Definition graphics.cpp:433
void submit(view_id _id, program_handle _handle, int32_t _depth, bool _preserveState)
Definition graphics.cpp:900
void set_marker(const char *_marker)
Definition graphics.cpp:759
const memory_view * alloc(uint32_t _size)
Definition graphics.cpp:297
bgfx::Stats stats
Definition graphics.h:30
uint64_t clip_quad_ex(const clip_quad_def &def)
void alloc_transient_vertex_buffer(transient_vertex_buffer *_tvb, uint32_t _num, const vertex_layout &_decl)
Definition graphics.cpp:419
uint32_t read_texture(texture_handle _handle, void *_data, uint8_t _mip)
Definition graphics.cpp:591
void set_view_scissor(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
Definition graphics.cpp:708
uint16_t weld_vertices(uint16_t *_output, const vertex_layout &_decl, const void *_data, uint16_t _num, float _epsilon)
Definition graphics.cpp:217
void vertex_convert(const vertex_layout &_destDecl, void *_destData, const vertex_layout &_srcDecl, const void *_srcData, uint32_t _num)
Definition graphics.cpp:208
bgfx::VertexLayout vertex_layout
Definition vertex_decl.h:8
void set_view_mode(view_id _id, view_mode _mode)
Definition graphics.cpp:734
renderer_type get_renderer_type()
Definition graphics.cpp:282
uint32_t alloc_transform(transform *_transform, uint16_t _num)
Definition graphics.cpp:794
bgfx::TopologyConvert::Enum topology_conversion
Definition graphics.h:34
void set_view_clear(view_id _id, uint16_t _flags, uint32_t _rgba, float _depth, uint8_t _stencil)
Definition graphics.cpp:713
texture_handle create_texture(const memory_view *_mem, uint64_t _flags, uint8_t _skip, texture_info *_info)
Definition graphics.cpp:505
uint16_t set_scissor(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
Definition graphics.cpp:779
void reset_view(view_id _id)
Definition graphics.cpp:754
bgfx::TextureFormat::Enum texture_format
Definition format.h:10
uint32_t get_avail_transient_index_buffer(uint32_t _num, bool _index32)
Definition graphics.cpp:399
auto get_renderer_platform_supported_filename_extensions() -> const std::vector< std::string > &
void set_state(uint64_t _state, uint32_t _rgba)
Definition graphics.cpp:764
void update_texture_2d(texture_handle _handle, uint16_t _layer, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const memory_view *_mem, uint16_t _pitch)
Definition graphics.cpp:551
bgfx::BackbufferRatio::Enum backbuffer_ratio
Definition graphics.h:22
uint32_t topology_convert(topology_conversion _conversion, void *_dst, uint32_t _dstSize, const void *_indices, uint32_t _numIndices, bool _index32)
Definition graphics.cpp:222
void touch(view_id _id)
Definition graphics.cpp:895
bgfx::Attrib::Enum attribute
Definition vertex_decl.h:9
bgfx::DynamicVertexBufferHandle dynamic_vertex_buffer_handle
Definition graphics.h:42
void set_view_frame_buffer(view_id _id, frame_buffer_handle _handle)
Definition graphics.cpp:739
void set_debug(uint32_t _debug)
Definition graphics.cpp:312
bool alloc_transient_buffers(transient_vertex_buffer *_tvb, const vertex_layout &_decl, uint32_t _numVertices, transient_index_buffer *_tib, uint32_t _numIndices)
Definition graphics.cpp:424
void shutdown()
Definition graphics.cpp:168
texture_handle create_texture_cube(uint16_t _size, bool _hasMips, uint16_t _numLayers, texture_format _format, uint64_t _flags, const memory_view *_mem)
Definition graphics.cpp:541
texture_handle create_texture_3d(uint16_t _width, uint16_t _height, uint16_t _depth, bool _hasMips, texture_format _format, uint64_t _flags, const memory_view *_mem)
Definition graphics.cpp:530
bgfx::Attachment attachment
Definition graphics.h:27
void set_view_rect(view_id _id, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height)
Definition graphics.cpp:698
bool init(init_type init_data)
Definition graphics.cpp:178
bgfx::ShaderHandle shader_handle
Definition graphics.h:48
void set_name(shader_handle _handle, const char *_name, int32_t _len)
Definition graphics.cpp:463
void update_texture_3d(texture_handle _handle, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _z, uint16_t _width, uint16_t _height, uint16_t _depth, const memory_view *_mem)
Definition graphics.cpp:564
indirect_buffer_handle create_indirect_buffer(uint32_t _num)
Definition graphics.cpp:438
void set_view_name(view_id _id, const char *_name)
Definition graphics.cpp:693
const memory_view * make_ref(const void *_data, uint32_t _size, release_fn _releaseFn, void *_userData)
Definition graphics.cpp:307
uniform_handle create_uniform(const char *_name, uniform_type _type, uint16_t _num)
Definition graphics.cpp:653
bgfx::Access::Enum access
Definition graphics.h:31
bgfx::TransientVertexBuffer transient_vertex_buffer
Definition graphics.h:54
void set_view_order(view_id _id, uint16_t _num, const view_id *_order)
Definition graphics.cpp:749
void set_stencil(uint32_t _fstencil, uint32_t _bstencil)
Definition graphics.cpp:774
bool is_texture_valid(uint16_t _depth, bool _cubeMap, uint16_t _numLayers, texture_format _format, uint64_t _flags)
Definition graphics.cpp:488
void topology_sort_tri_list(topology_sort _sort, void *_dst, uint32_t _dstSize, const float _dir[], const float _pos[], const void *_vertices, uint32_t _stride, const void *_indices, uint32_t _numIndices, bool _index32)
Definition graphics.cpp:232
void set_info_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
Definition graphics.cpp:35
shader_handle create_embedded_shader(const embedded_shader *_es, renderer_type _type, const char *_name)
Definition graphics.cpp:246
auto is_supported(uint64_t flag) -> bool
void vertex_pack(const float _input[4], bool _inputNormalized, attribute _attr, const vertex_layout &_decl, void *_data, uint32_t _index)
Definition graphics.cpp:193
uint8_t get_supported_renderers(uint8_t _max, renderer_type *_enum)
Definition graphics.cpp:251
encoder * begin()
Definition graphics.cpp:266
bgfx::UniformHandle uniform_handle
Definition graphics.h:50
shader_handle create_shader(const memory_view *_mem)
Definition graphics.cpp:448
void set_world_transform(const void *_mtx, uint16_t _num)
bgfx::TransientIndexBuffer transient_index_buffer
Definition graphics.h:55
uint32_t set_transform(const void *_mtx, uint16_t _num)
Definition graphics.cpp:789
const stats * get_stats()
Definition graphics.cpp:292
program_handle create_program(shader_handle _vsh, shader_handle _fsh, bool _destroyShaders)
Definition graphics.cpp:473
bgfx::TopologySort::Enum topology_sort
Definition graphics.h:35
bgfx::UniformInfo uniform_info
Definition graphics.h:26
void set_buffer(uint8_t _stage, index_buffer_handle _handle, access _access)
Definition graphics.cpp:930
void get_size_from_ratio(backbuffer_ratio _ratio, uint16_t &_width, uint16_t &_height)
void log(const std::string &category, const std::string &log_msg, const char *_filePath, uint16_t _line)
Definition graphics.cpp:47
bgfx::TextureHandle texture_handle
Definition graphics.h:49
bgfx::InstanceDataBuffer instance_data_buffer
Definition graphics.h:56
void dbg_text_vprintf(uint16_t _x, uint16_t _y, uint8_t _attr, const char *_format, va_list _argList)
Definition graphics.cpp:327
void dbg_text_image(uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const void *_data, uint16_t _pitch)
Definition graphics.cpp:332
auto screen_quad(float dest_width, float dest_height, float depth, float width, float height) -> uint64_t
occlusion_query_handle create_occlusion_query()
Definition graphics.cpp:663
void set_instance_data_buffer(const instance_data_buffer *_idb, uint32_t _start, uint32_t _num)
Definition graphics.cpp:875
void set_view_transform(view_id _id, const void *_view, const void *_proj)
Definition graphics.cpp:744
void set_vertex_buffer(uint8_t _stream, vertex_buffer_handle _handle)
Definition graphics.cpp:839
bgfx::OcclusionQueryResult::Enum occlusion_query_result
Definition graphics.h:33
const caps * get_caps()
Definition graphics.cpp:287
uint32_t get_avail_instance_data_buffer(uint32_t _num, uint16_t _stride)
Definition graphics.cpp:409
const char * get_renderer_name(renderer_type _type)
Definition graphics.cpp:256
uint16_t get_shader_uniforms(shader_handle _handle, uniform_handle *_uniforms, uint16_t _max)
Definition graphics.cpp:453
bgfx::UniformType::Enum uniform_type
Definition graphics.h:25
void blit(view_id _id, texture_handle _dst, uint16_t _dstX, uint16_t _dstY, texture_handle _src, uint16_t _srcX, uint16_t _srcY, uint16_t _width, uint16_t _height)
Definition graphics.cpp:974
void reset(uint32_t _width, uint32_t _height, uint32_t _flags)
Definition graphics.cpp:261
void calc_texture_size(texture_info &_info, uint16_t _width, uint16_t _height, uint16_t _depth, bool _cubeMap, bool _hasMips, uint16_t _numLayers, texture_format _format)
Definition graphics.cpp:493
auto get_half_texel() -> float
void request_screen_shot(frame_buffer_handle _handle, const char *_filePath)
bgfx::ViewId view_id
Definition graphics.h:20
bgfx::OcclusionQueryHandle occlusion_query_handle
Definition graphics.h:46
auto get_renderer_based_on_filename_extension(const std::string &_type) -> renderer_type
texture_handle create_texture_2d(uint16_t _width, uint16_t _height, bool _hasMips, uint16_t _numLayers, texture_format _format, uint64_t _flags, const memory_view *_mem)
Definition graphics.cpp:510
texture_handle get_texture(frame_buffer_handle _handle, uint8_t _attachment)
Definition graphics.cpp:638
auto get_renderer_filename_extension(renderer_type _type) -> const std::string &
void discard(uint8_t _flags)
Definition graphics.cpp:969
void dbg_text_printf(uint16_t _x, uint16_t _y, uint8_t _attr, const char *_format)
Definition graphics.cpp:322
void set_warning_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
Definition graphics.cpp:39
void destroy(index_buffer_handle _handle)
Definition graphics.cpp:342
void set_trace_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
Definition graphics.cpp:30
bgfx::IndirectBufferHandle indirect_buffer_handle
Definition graphics.h:45
dynamic_vertex_buffer_handle create_dynamic_vertex_buffer(uint32_t _num, const vertex_layout &_decl, uint16_t _flags)
Definition graphics.cpp:377
const memory_view * copy(const void *_data, uint32_t _size)
Definition graphics.cpp:302
auto get_max_blend_transforms() -> uint32_t
void update_texture_cube(texture_handle _handle, uint16_t _layer, uint8_t _side, uint8_t _mip, uint16_t _x, uint16_t _y, uint16_t _width, uint16_t _height, const memory_view *_mem, uint16_t _pitch)
Definition graphics.cpp:577
bgfx::RendererType::Enum renderer_type
Definition graphics.h:21
bgfx::EmbeddedShader embedded_shader
Definition graphics.h:53
void set_palette_color(uint8_t _index, uint32_t _rgba)
Definition graphics.cpp:678
void set_image(uint8_t _stage, texture_handle _handle, uint8_t _mip, access _access, texture_format _format)
Definition graphics.cpp:925
void set_platform_data(const platform_data &_data)
Definition graphics.cpp:163
bgfx::DynamicIndexBufferHandle dynamic_index_buffer_handle
Definition graphics.h:41
vertex_buffer_handle create_vertex_buffer(const memory_view *_mem, const vertex_layout &_decl, uint16_t _flags)
Definition graphics.cpp:347
auto get_current_renderer_filename_extension() -> const std::string &
void flush()
bgfx::Caps caps
Definition graphics.h:29
void set_uniform(uniform_handle _handle, const void *_value, uint16_t _num)
Definition graphics.cpp:804
bgfx::IndexBufferHandle index_buffer_handle
Definition graphics.h:44
bgfx::ProgramHandle program_handle
Definition graphics.h:47
void update(dynamic_index_buffer_handle _handle, uint32_t _startIndex, const memory_view *_mem)
Definition graphics.cpp:367
bgfx::TextureInfo texture_info
Definition graphics.h:24
void dbg_text_clear(uint8_t _attr, bool _small)
Definition graphics.cpp:317
bgfx::VertexBufferHandle vertex_buffer_handle
Definition graphics.h:51
dynamic_index_buffer_handle create_dynamic_index_buffer(uint32_t _num, uint16_t _flags)
Definition graphics.cpp:357
auto is_homogeneous_depth() -> bool
void set_error_logger(const std::function< void(const std::string &, const char *, uint16_t)> &logger)
Definition graphics.cpp:43
bool check_avail_transient_buffers(uint32_t _numVertices, const vertex_layout &_layout, uint32_t _numIndices, bool _index32)
bgfx::ViewMode::Enum view_mode
Definition graphics.h:32
void set_index_buffer(index_buffer_handle _handle)
Definition graphics.cpp:809
bgfx::Transform transform
Definition graphics.h:40
auto is_origin_bottom_left() -> bool
index_buffer_handle create_index_buffer(const memory_view *_mem, uint16_t _flags)
Definition graphics.cpp:337
bgfx::PlatformData platform_data
Definition graphics.h:28
frame_buffer_handle create_frame_buffer(uint16_t _width, uint16_t _height, texture_format _format, uint64_t _textureFlags)
Definition graphics.cpp:606
uint32_t get_avail_transient_vertex_buffer(uint32_t _num, const vertex_layout &_decl)
Definition graphics.cpp:404
bgfx::Memory memory_view
Definition graphics.h:23
occlusion_query_result get_result(occlusion_query_handle _handle, int32_t *_result)
Definition graphics.cpp:668
uint32_t get_render_frame()
auto clip_quad(float depth, float width, float height) -> uint64_t
bgfx::Encoder encoder
Definition graphics.h:38
void set_texture(uint8_t _stage, uniform_handle _sampler, texture_handle _handle, uint32_t _flags)
Definition graphics.cpp:890
void set_condition(occlusion_query_handle _handle, bool _visible)
Definition graphics.cpp:769
void vertex_unpack(float _output[4], attribute _attr, const vertex_layout &_decl, const void *_data, uint32_t _index)
Definition graphics.cpp:203
void end(encoder *_encoder)
Definition graphics.cpp:271
void fatal(const char *_filePath, uint16_t _line, bgfx::Fatal::Enum, const char *_str) final
Definition graphics.cpp:94
void profilerEnd() final
Definition graphics.cpp:91
virtual void screenShot(const char *_filePath, uint32_t _width, uint32_t _height, uint32_t _pitch, const void *_data, uint32_t _size, bool _yflip) override
Definition graphics.cpp:113
void traceVargs(const char *_filePath, uint16_t _line, const char *_format, va_list _argList) final
Definition graphics.cpp:59
bool cacheRead(uint64_t, void *, uint32_t) final
Definition graphics.cpp:104
void profilerBegin(const char *, uint32_t, const char *, uint16_t) final
Definition graphics.cpp:80
void captureEnd() final
Definition graphics.cpp:154
void profilerBeginLiteral(const char *, uint32_t, const char *, uint16_t) final
Definition graphics.cpp:84
void captureBegin(uint32_t, uint32_t, uint32_t, texture_format, bool) final
Definition graphics.cpp:146
uint32_t cacheReadSize(uint64_t) final
Definition graphics.cpp:99
void captureFrame(const void *, uint32_t) final
Definition graphics.cpp:158
~gfx_callback()=default
void cacheWrite(uint64_t, const void *, uint32_t) final
Definition graphics.cpp:109
static auto get_layout() -> const vertex_layout &
Definition vertex_decl.h:15