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