Initial commit
This commit is contained in:
130
Include/ZRenderer/ZDataBufferBase.hpp
Normal file
130
Include/ZRenderer/ZDataBufferBase.hpp
Normal file
@@ -0,0 +1,130 @@
|
||||
/*
|
||||
ZDataBufferBase.hpp
|
||||
Author: James Russell <jcrussell@762studios.com>
|
||||
Created: 3/20/2011
|
||||
|
||||
Purpose:
|
||||
|
||||
The ZDataBufferBase class is meant to be used by implementations that are
|
||||
required to handle threading and concurrency problems that are not solved by
|
||||
the graphics library.
|
||||
|
||||
License:
|
||||
|
||||
TODO
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#ifndef _ZDATABUFFERBASE_HPP
|
||||
#define _ZDATABUFFERBASE_HPP
|
||||
|
||||
#include <ZRenderer/ZDataBuffer.hpp>
|
||||
|
||||
/*
|
||||
Base class implementation for the Data Buffer.
|
||||
*/
|
||||
class ZDataBufferBase : public ZDataBuffer
|
||||
{
|
||||
protected:
|
||||
//Default Constructor
|
||||
ZDataBufferBase(ZDataBufferType _type, ZDataBufferUsage _usage, size_t _size);
|
||||
|
||||
//Type of the Data Buffer
|
||||
ZDataBufferType Type;
|
||||
|
||||
//Usage setting for the Data Buffer
|
||||
ZDataBufferUsage Usage;
|
||||
|
||||
//Size (in bytes) of the Data Buffer
|
||||
size_t Size;
|
||||
|
||||
//Array of DataBufferBlocks held by this DataBuffer
|
||||
ZArray<ZDataBufferBlock*> Blocks;
|
||||
|
||||
//Array of DataBufferStreams held by this DataBuffer
|
||||
ZArray<ZDataBufferStream*> Streams;
|
||||
|
||||
//Backing buffer, used to double-buffer the graphics device buffer
|
||||
void* MemBuffer;
|
||||
|
||||
//Flag indicating this buffer was mapped or filled
|
||||
bool bIsDirty;
|
||||
|
||||
//Gets the buffer data from graphics memory
|
||||
virtual void GetDeviceData(void* _buffer) = 0;
|
||||
|
||||
//Gets the next block offset we should use from the subclass
|
||||
virtual size_t GetNextBlockOffset(size_t _size) = 0;
|
||||
|
||||
//Resets the block offset to zero
|
||||
virtual void ResetBlockOffset() = 0;
|
||||
|
||||
public:
|
||||
//Destructor
|
||||
virtual ~ZDataBufferBase();
|
||||
|
||||
/*
|
||||
public ZDataBufferBase::GetMemBufferResetDirty
|
||||
|
||||
Gets the backing memory buffer for this device. This will return
|
||||
NULL if the buffer has not been modified since the last call to
|
||||
this function, and in the case it has been modified, a call to this
|
||||
resets the 'dirty' flag for the buffer.
|
||||
|
||||
@return (void*) - the backing memory buffer, NULL if not modified
|
||||
@context (renderer)
|
||||
*/
|
||||
void* GetMemBufferResetDirty();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual const ZDataBufferBlock* DefineBlock(ZDataBufferBlockType _type,
|
||||
size_t _size
|
||||
);
|
||||
|
||||
//Subclass Implementation
|
||||
virtual const ZDataBufferStream* DefineStream(ZDataBufferStreamType _type,
|
||||
size_t _elemCount,
|
||||
size_t _offset,
|
||||
size_t _stride,
|
||||
bool _normalize
|
||||
);
|
||||
//Subclass Implementation
|
||||
virtual bool Fill(const void* _data, size_t _offset, size_t _byteCount);
|
||||
|
||||
//Subclass Implementation
|
||||
virtual const ZDataBufferBlock* GetBlock(size_t index) { return Blocks[index]; }
|
||||
|
||||
//Subclass Implementation
|
||||
virtual const ZDataBufferStream* GetStream(size_t index) { return Streams[index]; }
|
||||
|
||||
//Subclass Implementation
|
||||
virtual size_t GetBlockCount() const { return Blocks.Size(); }
|
||||
|
||||
//Subclass Implementation
|
||||
virtual size_t GetStreamCount() const { return Streams.Size(); }
|
||||
|
||||
//Subclass Implementation
|
||||
virtual size_t GetSize();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual ZDataBufferType GetType();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual ZDataBufferUsage GetUsage();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual void* Map( bool _discard = false );
|
||||
|
||||
//Subclass Implementation
|
||||
virtual void UndefBlocks();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual void UndefStreams();
|
||||
|
||||
//Subclass Implementation
|
||||
virtual void Unmap();
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user