yum-mirror/slang
Making it easier to work with shaders
git clone https://git.yummers.dev/yum-mirror/slang
43d0c2100
master
1// model.h 2#pragma once 3 4#include "platform-api.h" 5#include "slang-com-ptr.h" 6#include "slang-rhi.h" 7#include "vector-math.h" 8 9#include <string> 10#include <vector> 11 12namespace platform 13{ 14 15struct ModelLoader 16{ 17struct MaterialData 18 { 19glm ::vec3 diffuseColor ; 20glm ::vec3 specularColor ; 21float specularity ; 22 23Slang ::ComPtr < rhi ::ITexture > diffuseMap ; 24 }; 25 26struct Vertex 27 { 28glm ::vec3 position ; 29glm ::vec3 normal ; 30glm ::vec2 uv ; 31 }; 32 33typedef uint32_t Index ; 34 35struct MeshData 36 { 37int firstIndex ; 38int indexCount ; 39 40void * material ; 41 }; 42 43struct ModelData 44 { 45Slang ::ComPtr < rhi ::IBuffer > vertexBuffer ; 46Slang ::ComPtr < rhi ::IBuffer > indexBuffer ; 47rhi ::PrimitiveTopology primitiveTopology ; 48int vertexCount ; 49int indexCount ; 50int meshCount ; 51void * const * meshes ; 52 }; 53 54struct ICallbacks 55 { 56typedef ModelLoader ::MaterialData MaterialData ; 57typedef ModelLoader ::MeshData MeshData ; 58typedef ModelLoader ::ModelData ModelData ; 59 60virtual void * createMaterial (MaterialData const & data )= 0 ; 61virtual void * createMesh (MeshData const & data )= 0 ; 62virtual void * createModel (ModelData const & data )= 0 ; 63 }; 64 65typedef uint32_t LoadFlags ; 66enum LoadFlag :LoadFlags 67 { 68FlipWinding = 1 <<0 , 69 }; 70 71ICallbacks * callbacks = nullptr; 72rhi ::IDevice * device ; 73LoadFlags loadFlags = 0 ; 74float scale = 1.0f ; 75 76SLANG_PLATFORM_API SlangResult load (char const * inputPath ,void ** outModel ); 77}; 78 79 80}// namespace platform