Files
bluflame/aiwaz/Aiwaz/Resources/GeometryBuffer/GeometryBuffer.h
2026-04-18 22:31:51 +02:00

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;
};