mirror of https://github.com/axmolengine/axmol.git
54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
|
|
#pragma once
|
|
|
|
#include "../EffekseerRendererCommon/EffekseerRenderer.VertexBufferBase.h"
|
|
#include "EffekseerRendererLLGI.DeviceObject.h"
|
|
#include "EffekseerRendererLLGI.RendererImplemented.h"
|
|
#include <LLGI.Buffer.h>
|
|
|
|
namespace EffekseerRendererLLGI
|
|
{
|
|
|
|
class VertexBuffer : public DeviceObject, public ::EffekseerRenderer::VertexBufferBase
|
|
{
|
|
protected:
|
|
// TODO make correct ring buffer
|
|
const int ringVertexCount_ = 3;
|
|
|
|
int32_t nextIndex_ = 0;
|
|
|
|
Effekseer::CustomAlignedVector<uint8_t> lockedResource_;
|
|
|
|
bool m_ringBufferLock;
|
|
|
|
int32_t m_ringLockedOffset;
|
|
int32_t m_ringLockedSize;
|
|
|
|
std::vector<std::shared_ptr<LLGI::Buffer>> storedVertexBuffers_;
|
|
std::shared_ptr<LLGI::Buffer> CreateBuffer();
|
|
std::shared_ptr<LLGI::Buffer> GetNextBuffer();
|
|
|
|
std::shared_ptr<LLGI::Buffer> currentVertexBuffer_;
|
|
|
|
bool Init();
|
|
VertexBuffer(Backend::GraphicsDevice* graphicsDevice, int size, bool isDynamic, bool hasRefCount);
|
|
|
|
public:
|
|
~VertexBuffer() override = default;
|
|
|
|
static VertexBuffer* Create(Backend::GraphicsDevice* graphicsDevice, int size, bool isDynamic, bool hasRefCount);
|
|
|
|
LLGI::Buffer* GetVertexBuffer()
|
|
{
|
|
return currentVertexBuffer_.get();
|
|
}
|
|
|
|
public:
|
|
void Lock() override;
|
|
bool RingBufferLock(int32_t size, int32_t& offset, void*& data, int32_t alignment) override;
|
|
bool TryRingBufferLock(int32_t size, int32_t& offset, void*& data, int32_t alignment) override;
|
|
void Unlock() override;
|
|
};
|
|
|
|
} // namespace EffekseerRendererLLGI
|