mirror of https://github.com/axmolengine/axmol.git
102 lines
3.3 KiB
C++
102 lines
3.3 KiB
C++
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
#include "EffekseerRendererGL.IndexBuffer.h"
|
|
#include "EffekseerRendererGL.GLExtension.h"
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
namespace EffekseerRendererGL
|
|
{
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
IndexBuffer::IndexBuffer(const Backend::GraphicsDeviceRef& graphicsDevice, GLuint buffer, int maxCount, bool isDynamic, int32_t stride)
|
|
: DeviceObject(graphicsDevice.Get())
|
|
, IndexBufferBase(maxCount, isDynamic)
|
|
, m_buffer(buffer)
|
|
{
|
|
stride_ = stride;
|
|
m_resource = new uint8_t[m_indexMaxCount * stride_];
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
IndexBuffer::~IndexBuffer()
|
|
{
|
|
delete[] m_resource;
|
|
glDeleteBuffers(1, &m_buffer);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
IndexBuffer* IndexBuffer::Create(const Backend::GraphicsDeviceRef& graphicsDevice, int maxCount, bool isDynamic, int32_t stride)
|
|
{
|
|
GLuint ib;
|
|
glGenBuffers(1, &ib);
|
|
return new IndexBuffer(graphicsDevice, ib, maxCount, isDynamic, stride);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
void IndexBuffer::OnLostDevice()
|
|
{
|
|
glDeleteBuffers(1, &m_buffer);
|
|
m_buffer = 0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
void IndexBuffer::OnResetDevice()
|
|
{
|
|
if (IsValid())
|
|
return;
|
|
GLuint ib;
|
|
glGenBuffers(1, &ib);
|
|
m_buffer = ib;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
void IndexBuffer::Lock()
|
|
{
|
|
assert(!m_isLock);
|
|
|
|
m_isLock = true;
|
|
m_indexCount = 0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
void IndexBuffer::Unlock()
|
|
{
|
|
assert(m_isLock);
|
|
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buffer);
|
|
glBufferData(GL_ELEMENT_ARRAY_BUFFER, m_indexCount * stride_, m_resource, GL_DYNAMIC_DRAW);
|
|
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
|
|
|
|
m_isLock = false;
|
|
}
|
|
|
|
bool IndexBuffer::IsValid()
|
|
{
|
|
return m_buffer != 0;
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|
|
} // namespace EffekseerRendererGL
|
|
//-----------------------------------------------------------------------------------
|
|
//
|
|
//-----------------------------------------------------------------------------------
|