axmol/extensions/Effekseer/EffekseerRendererCommon/EffekseerRenderer.VertexBuf...

77 lines
2.3 KiB
C++

#ifndef __EFFEKSEERRENDERER_VERTEXBUFFER_BASE_H__
#define __EFFEKSEERRENDERER_VERTEXBUFFER_BASE_H__
//----------------------------------------------------------------------------------
// Include
//----------------------------------------------------------------------------------
#include <Effekseer.h>
#include <assert.h>
#include <string.h>
//-----------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------
namespace EffekseerRenderer
{
//-----------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------
class VertexBufferBase
{
protected:
bool m_isDynamic;
int m_size;
int m_offset;
uint8_t* m_resource;
bool m_isLock;
int m_vertexRingOffset = 0;
bool isRingEnabled_ = true;
public:
VertexBufferBase(int size, bool isDynamic);
virtual ~VertexBufferBase();
virtual void Lock() = 0;
virtual bool RingBufferLock(int32_t size, int32_t& offset, void*& data, int32_t alignment) = 0;
/**
@brief try lock as a ring buffer. if failed, it does't lock it.
*/
virtual bool TryRingBufferLock(int32_t size, int32_t& offset, void*& data, int32_t alignment) = 0;
virtual void Unlock() = 0;
virtual void Push(const void* buffer, int size);
virtual int GetMaxSize() const;
virtual int GetSize() const;
virtual void* GetBufferDirect(int size);
int GetVertexRingOffset() const
{
return m_vertexRingOffset;
}
bool GetIsRingEnabled() const
{
return isRingEnabled_;
}
static int GetNextAliginedVertexRingOffset(int vertexRingOffset, int alignment)
{
return (vertexRingOffset + alignment - 1) / alignment * alignment;
}
static int RequireResetRing(int vertexRingOffset, int size, int maxSize)
{
return (int32_t)vertexRingOffset + size > maxSize;
}
};
//-----------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------
} // namespace EffekseerRenderer
//-----------------------------------------------------------------------------------
//
//-----------------------------------------------------------------------------------
#endif // __EFFEKSEERRENDERER_VERTEXBUFFER_BASE_H__