diff options
Diffstat (limited to '3rdparty/bgfx/examples/common/bgfx_utils.h')
-rw-r--r-- | 3rdparty/bgfx/examples/common/bgfx_utils.h | 72 |
1 files changed, 63 insertions, 9 deletions
diff --git a/3rdparty/bgfx/examples/common/bgfx_utils.h b/3rdparty/bgfx/examples/common/bgfx_utils.h index 87799f2e2c4..7146293f38c 100644 --- a/3rdparty/bgfx/examples/common/bgfx_utils.h +++ b/3rdparty/bgfx/examples/common/bgfx_utils.h @@ -1,15 +1,22 @@ /* - * Copyright 2011-2018 Branimir Karadzic. All rights reserved. - * License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause + * Copyright 2011-2022 Branimir Karadzic. All rights reserved. + * License: https://github.com/bkaradzic/bgfx/blob/master/LICENSE */ #ifndef BGFX_UTILS_H_HEADER_GUARD #define BGFX_UTILS_H_HEADER_GUARD +#include <bx/bounds.h> #include <bx/pixelformat.h> +#include <bx/string.h> #include <bgfx/bgfx.h> #include <bimg/bimg.h> +#include <tinystl/allocator.h> +#include <tinystl/vector.h> +namespace stl = tinystl; + + /// void* load(const char* _filePath, uint32_t* _size = NULL); @@ -23,24 +30,24 @@ bgfx::ShaderHandle loadShader(const char* _name); bgfx::ProgramHandle loadProgram(const char* _vsName, const char* _fsName); /// -bgfx::TextureHandle loadTexture(const char* _name, uint32_t _flags = BGFX_SAMPLER_NONE, uint8_t _skip = 0, bgfx::TextureInfo* _info = NULL, bimg::Orientation::Enum* _orientation = NULL); +bgfx::TextureHandle loadTexture(const char* _name, uint64_t _flags = BGFX_TEXTURE_NONE|BGFX_SAMPLER_NONE, uint8_t _skip = 0, bgfx::TextureInfo* _info = NULL, bimg::Orientation::Enum* _orientation = NULL); /// bimg::ImageContainer* imageLoad(const char* _filePath, bgfx::TextureFormat::Enum _dstFormat); /// -void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexDecl _decl, const uint16_t* _indices, uint32_t _numIndices); +void calcTangents(void* _vertices, uint16_t _numVertices, bgfx::VertexLayout _layout, const uint16_t* _indices, uint32_t _numIndices); /// Returns true if both internal transient index and vertex buffer have /// enough space. /// /// @param[in] _numVertices Number of vertices. -/// @param[in] _decl Vertex declaration. +/// @param[in] _layout Vertex layout. /// @param[in] _numIndices Number of indices. /// -inline bool checkAvailTransientBuffers(uint32_t _numVertices, const bgfx::VertexDecl& _decl, uint32_t _numIndices) +inline bool checkAvailTransientBuffers(uint32_t _numVertices, const bgfx::VertexLayout& _layout, uint32_t _numIndices) { - return _numVertices == bgfx::getAvailTransientVertexBuffer(_numVertices, _decl) + return _numVertices == bgfx::getAvailTransientVertexBuffer(_numVertices, _layout) && (0 == _numIndices || _numIndices == bgfx::getAvailTransientIndexBuffer(_numIndices) ) ; } @@ -78,10 +85,51 @@ struct MeshState bgfx::ViewId m_viewId; }; -struct Mesh; +struct Primitive +{ + uint32_t m_startIndex; + uint32_t m_numIndices; + uint32_t m_startVertex; + uint32_t m_numVertices; + + bx::Sphere m_sphere; + bx::Aabb m_aabb; + bx::Obb m_obb; +}; + +typedef stl::vector<Primitive> PrimitiveArray; + +struct Group +{ + Group(); + void reset(); + + bgfx::VertexBufferHandle m_vbh; + bgfx::IndexBufferHandle m_ibh; + uint16_t m_numVertices; + uint8_t* m_vertices; + uint32_t m_numIndices; + uint16_t* m_indices; + bx::Sphere m_sphere; + bx::Aabb m_aabb; + bx::Obb m_obb; + PrimitiveArray m_prims; +}; +typedef stl::vector<Group> GroupArray; + +struct Mesh +{ + void load(bx::ReaderSeekerI* _reader, bool _ramcopy); + void unload(); + void submit(bgfx::ViewId _id, bgfx::ProgramHandle _program, const float* _mtx, uint64_t _state) const; + void submit(const MeshState*const* _state, uint8_t _numPasses, const float* _mtx, uint16_t _numMatrices) const; + + bgfx::VertexLayout m_layout; + GroupArray m_groups; +}; /// -Mesh* meshLoad(const char* _filePath); +Mesh* meshLoad(const char* _filePath, bool _ramcopy = false); /// void meshUnload(Mesh* _mesh); @@ -98,6 +146,12 @@ void meshSubmit(const Mesh* _mesh, bgfx::ViewId _id, bgfx::ProgramHandle _progra /// void meshSubmit(const Mesh* _mesh, const MeshState*const* _state, uint8_t _numPasses, const float* _mtx, uint16_t _numMatrices = 1); +/// bgfx::RendererType::Enum to name. +bx::StringView getName(bgfx::RendererType::Enum _type); + +/// Name to bgfx::RendererType::Enum. +bgfx::RendererType::Enum getType(const bx::StringView& _name); + /// struct Args { |