80 lines
2.7 KiB
C++
80 lines
2.7 KiB
C++
#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<VertexElement>& 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<VertexElement> m_VertexElements;
|
|
D3D10_INPUT_ELEMENT_DESC* m_InputElementDesc;
|
|
|
|
typedef std::map<IShader*, std::vector<ID3D10InputLayout*> > tk_VertexLayoutsPerShaderAndPass;
|
|
tk_VertexLayoutsPerShaderAndPass m_VertexLayoutsPerShaderAndPass;
|
|
};
|