mirror of https://github.com/axmolengine/axmol.git
77 lines
2.3 KiB
C++
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__
|