summaryrefslogtreecommitdiff
path: root/Runtime/Shaders/BufferedVBO.h
blob: 5932b286813482cc298186e82388712181ec3268 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#ifndef BUFFEREDVBO_H
#define BUFFEREDVBO_H

#include "VBO.h"
#include "Runtime/Utilities/dynamic_array.h"

class BufferedVBO : public VBO
{
public:
	BufferedVBO();
	~BufferedVBO();

	virtual bool MapVertexStream( VertexStreamData& outData, unsigned stream );
	virtual void UnmapVertexStream( unsigned stream );

	virtual int GetRuntimeMemorySize() const;

	virtual void UnloadSourceVertices();

protected:
	void BufferAllVertexData( const VertexBufferData& buffer );
	void BufferAccessibleVertexData( const VertexBufferData& buffer );
	void BufferVertexData( const VertexBufferData& buffer, bool copyModes[kStreamModeCount] );
	void UnbufferVertexData();

	UInt8* GetStreamBuffer(unsigned stream);
	UInt8* GetChannelDataAndStride(ShaderChannel channel, UInt32& outStride);
	void GetChannelDataAndStrides(void* channelData[kShaderChannelCount], UInt32 outStrides[kShaderChannelCount]);
	void GetChannelOffsetsAndStrides(void* channelOffsets[kShaderChannelCount], UInt32 outStrides[kShaderChannelCount]);

	VertexBufferData m_VertexData;
	size_t m_AllocatedSize;
};

#endif