#pragma once #if _WIN32 #include #include #include "boo/BooObject.hpp" #include "boo/System.hpp" #include "boo/graphicsdev/IGraphicsDataFactory.hpp" using pD3DCreateBlob = HRESULT(WINAPI*)(SIZE_T Size, ID3DBlob** ppBlob); extern pD3DCreateBlob D3DCreateBlobPROC; namespace boo { struct BaseGraphicsData; class D3D11DataFactory : public IGraphicsDataFactory { public: ~D3D11DataFactory() override = default; Platform platform() const override { return Platform::D3D11; } const char* platformName() const override { return "D3D11"; } class Context final : public IGraphicsDataFactory::Context { friend class D3D11DataFactoryImpl; D3D11DataFactory& m_parent; ObjToken m_data; Context(D3D11DataFactory& parent __BooTraceArgs); ~Context(); public: Platform platform() const override { return Platform::D3D11; } const char* platformName() const override { return "D3D11"; } ObjToken newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) override; ObjToken newDynamicBuffer(BufferUse use, size_t stride, size_t count) override; ObjToken newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt, TextureClampMode clampMode, const void* data, size_t sz) override; ObjToken newStaticArrayTexture(size_t width, size_t height, size_t layers, size_t mips, TextureFormat fmt, TextureClampMode clampMode, const void* data, size_t sz) override; ObjToken newDynamicTexture(size_t width, size_t height, TextureFormat fmt, TextureClampMode clampMode) override; ObjToken newRenderTexture(size_t width, size_t height, TextureClampMode clampMode, size_t colorBindCount, size_t depthBindCount) override; ObjToken newCubeRenderTexture(size_t width, size_t mips) override; ObjToken newShaderStage(const uint8_t* data, size_t size, PipelineStage stage) override; ObjToken newShaderPipeline(ObjToken vertex, ObjToken fragment, ObjToken geometry, ObjToken control, ObjToken evaluation, const VertexFormatInfo& vtxFmt, const AdditionalPipelineInfo& additionalInfo, bool asynchronous = true) override; ObjToken newShaderDataBinding(const ObjToken& pipeline, const ObjToken& vbo, const ObjToken& instVbo, const ObjToken& ibo, size_t ubufCount, const ObjToken* ubufs, const PipelineStage* ubufStages, const size_t* ubufOffs, const size_t* ubufSizes, size_t texCount, const ObjToken* texs, const int* bindIdxs, const bool* bindDepth, size_t baseVert = 0, size_t baseInst = 0) override; }; static std::vector CompileHLSL(const char* source, PipelineStage stage); }; } // namespace boo #endif // _WIN32