boo/include/boo/graphicsdev/D3D.hpp

73 lines
3.4 KiB
C++
Raw Normal View History

2018-10-06 20:36:44 -07:00
#pragma once
2015-11-05 19:20:58 -08:00
#if _WIN32
#include <cstddef>
2015-11-05 19:20:58 -08:00
#include <vector>
#include "boo/BooObject.hpp"
#include "boo/System.hpp"
#include "boo/graphicsdev/IGraphicsDataFactory.hpp"
2015-11-05 19:20:58 -08:00
using pD3DCreateBlob = HRESULT(WINAPI*)(SIZE_T Size, ID3DBlob** ppBlob);
extern pD3DCreateBlob D3DCreateBlobPROC;
2018-12-07 21:17:51 -08:00
namespace boo {
2018-10-14 12:59:19 -07:00
struct BaseGraphicsData;
2015-11-05 19:20:58 -08:00
2018-12-07 21:17:51 -08:00
class D3D11DataFactory : public IGraphicsDataFactory {
2015-11-05 19:20:58 -08:00
public:
~D3D11DataFactory() override = default;
2018-12-07 21:17:51 -08:00
Platform platform() const override { return Platform::D3D11; }
const char* platformName() const override { return "D3D11"; }
2018-12-07 21:17:51 -08:00
class Context final : public IGraphicsDataFactory::Context {
friend class D3D11DataFactoryImpl;
D3D11DataFactory& m_parent;
2019-06-01 02:27:11 -07:00
ObjToken<BaseGraphicsData> m_data;
2018-12-07 21:17:51 -08:00
Context(D3D11DataFactory& parent __BooTraceArgs);
~Context();
public:
Platform platform() const override { return Platform::D3D11; }
const char* platformName() const override { return "D3D11"; }
2018-12-07 21:17:51 -08:00
ObjToken<IGraphicsBufferS> newStaticBuffer(BufferUse use, const void* data, size_t stride, size_t count) override;
ObjToken<IGraphicsBufferD> newDynamicBuffer(BufferUse use, size_t stride, size_t count) override;
2018-12-07 21:17:51 -08:00
2019-06-01 02:27:11 -07:00
ObjToken<ITextureS> newStaticTexture(size_t width, size_t height, size_t mips, TextureFormat fmt,
TextureClampMode clampMode, const void* data, size_t sz) override;
2019-06-01 02:27:11 -07:00
ObjToken<ITextureSA> 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<ITextureD> newDynamicTexture(size_t width, size_t height, TextureFormat fmt,
TextureClampMode clampMode) override;
2019-06-30 20:13:12 -07:00
ObjToken<ITextureR> newRenderTexture(size_t width, size_t height, TextureClampMode clampMode, size_t colorBindCount,
size_t depthBindCount) override;
ObjToken<ITextureCubeR> newCubeRenderTexture(size_t width, size_t mips) override;
2018-12-07 21:17:51 -08:00
ObjToken<IShaderStage> newShaderStage(const uint8_t* data, size_t size, PipelineStage stage) override;
2018-12-07 21:17:51 -08:00
ObjToken<IShaderPipeline> newShaderPipeline(ObjToken<IShaderStage> vertex, ObjToken<IShaderStage> fragment,
ObjToken<IShaderStage> geometry, ObjToken<IShaderStage> control,
ObjToken<IShaderStage> evaluation, const VertexFormatInfo& vtxFmt,
const AdditionalPipelineInfo& additionalInfo,
bool asynchronous = true) override;
2019-06-30 20:13:12 -07:00
ObjToken<IShaderDataBinding>
newShaderDataBinding(const ObjToken<IShaderPipeline>& pipeline, const ObjToken<IGraphicsBuffer>& vbo,
const ObjToken<IGraphicsBuffer>& instVbo, const ObjToken<IGraphicsBuffer>& ibo,
size_t ubufCount, const ObjToken<IGraphicsBuffer>* ubufs, const PipelineStage* ubufStages,
const size_t* ubufOffs, const size_t* ubufSizes, size_t texCount,
const ObjToken<ITexture>* texs, const int* bindIdxs, const bool* bindDepth,
size_t baseVert = 0, size_t baseInst = 0) override;
2018-12-07 21:17:51 -08:00
};
static std::vector<uint8_t> CompileHLSL(const char* source, PipelineStage stage);
2015-11-05 19:20:58 -08:00
};
2018-12-07 21:17:51 -08:00
} // namespace boo
2015-11-05 19:20:58 -08:00
#endif // _WIN32