#pragma once #include "IEngine.h" #include "IGeometryBuffer.h" #include "IShader.h" #include "../Commands/CommandUserBase.h" class GeometryBuffer : public IGeometryBuffer , public CommandUserBase { protected: static const unsigned char SetIndexBufferCommandType = 0; static const unsigned char SetVertexBufferCommandType = 1; static const unsigned char DrawGeometryCommandType = 2; public: GeometryBuffer(IEngine& argEngine); virtual ~GeometryBuffer(); virtual void Uninitialize(); virtual void SetVertexData(uint32 argVertexCount, uint32 argVertexElementSize, void* a_VertexData_, const std::vector& argVertexElements, bool argNeedsDynamicAccess); virtual void DeleteVertexData(); virtual void SetIndexData(uint32 argIndexCount, uint32* aui_IndexData_, bool argNeedsDynamicAccess); virtual void DeleteIndexData(); virtual void* MapVertexBuffer(DataAccessMode::Enumeration argAccessMode); virtual void UnmapVertexBuffer(); virtual uint32* MapIndexBuffer(DataAccessMode::Enumeration argAccessMode); virtual void UnmapIndexBuffer(); virtual uint32 get_IndexBufferOffset() const { return m_IndexOffset; } virtual void set_IndexBufferOffset(uint32 argValue) { m_IndexOffset = argValue; } virtual uint32 get_IndexBufferUsableLength() const { return m_UsableIndexCount; } virtual void set_IndexBufferUsableLength(uint32 argValue) { m_UsableIndexCount = argValue; } virtual uint32 get_IndexBufferLength() const { return m_IndexCount; } virtual uint32 get_VertexBufferLength() const { return m_VertexCount; } virtual PrimitiveTopology::Enumeration get_PrimitiveTopology() const { return m_PrimitiveTopology; } virtual void set_PrimitiveTopology(PrimitiveTopology::Enumeration argValue) { m_PrimitiveTopology = argValue; } virtual void ConvertToAdjacency(); // ICommandUser virtual CommandExecuteResult::Enumeration ExecuteCommand(unsigned char argCommandType, ICommandBuffer& argCurrentBuffer, uint32 argCurrentPositon); virtual string8 get_UserName() const { return "GeometryBuffer"; } protected: void Render(IShader& argShader); protected: IEngine& m_Engine; uint32 m_IndexCount; uint32 m_IndexOffset; uint32 m_UsableIndexCount; ID3D10Buffer* m_IndexBuffer; uint32* m_RawIndexData; uint32 m_VertexOffset; uint32 m_VertexCount; uint32 m_VertexElementSize; ID3D10Buffer* m_VertexBuffer; void* m_RawVertexData_; bool m_VertexDataMapped; bool m_IndexDataMapped; PrimitiveTopology::Enumeration m_PrimitiveTopology; std::vector m_VertexElements; D3D10_INPUT_ELEMENT_DESC* m_InputElementDesc; typedef std::map > tk_VertexLayoutsPerShaderAndPass; tk_VertexLayoutsPerShaderAndPass m_VertexLayoutsPerShaderAndPass; };