#pragma once #include #include #include #include #include class DrawingContext; class DirectXShaderProgram; class SceneModel; struct CD3DX12_CPU_DESCRIPTOR_HANDLE; class DirectXMeshPainter { public: DirectXMeshPainter(); void paint(SceneModel* model, DrawingContext* context); DirectXShaderProgram* getShaderProgram() const; void createVertexBuffer(ID3D12Device* device); void createRootSignature(ID3D12Device* device); void createPipelineStateObject(ID3D12Device* device); ID3D12PipelineState* getPipelineState() const; ID3D12RootSignature* getRootSignature() const; void updateCommandList(const CD3DX12_CPU_DESCRIPTOR_HANDLE& rtvHandle, ID3D12GraphicsCommandList* commandList); private: struct Vertex { DirectX::XMFLOAT3 position; DirectX::XMFLOAT4 color; }; void initializeShader(); void initializeBuffers(); unsigned int getVertexBufferSize() const; unsigned int getVertexSize() const; void updateVertexBuffer(unsigned char* pBuffer) const; void paint(const std::vector& verts, const std::vector& elements, const std::vector& color, bool lines = false); unsigned int mVertexBufferSize{ 0 }; std::vector mVertexBuffer; Microsoft::WRL::ComPtr mD3dVertexBuffer; D3D12_VERTEX_BUFFER_VIEW mVertexBufferView{}; Microsoft::WRL::ComPtr mRootSignature; Microsoft::WRL::ComPtr mPipelineState; std::unique_ptr mShaderProgram; };