mirror of
https://github.com/love2d/love.git
synced 2026-08-16 08:11:02 +02:00
More consistent naming for vertex and index buffers in love's code.
This commit is contained in:
@@ -33,7 +33,7 @@ love::Type Text::type("Text", &Drawable::type);
|
||||
Text::Text(Font *font, const std::vector<Font::ColoredString> &text)
|
||||
: font(font)
|
||||
, vertexAttributes(Font::vertexFormat, 0)
|
||||
, vbo(nullptr)
|
||||
, vertex_buffer(nullptr)
|
||||
, vert_offset(0)
|
||||
, texture_cache_id((uint32) -1)
|
||||
{
|
||||
@@ -42,40 +42,39 @@ Text::Text(Font *font, const std::vector<Font::ColoredString> &text)
|
||||
|
||||
Text::~Text()
|
||||
{
|
||||
delete vbo;
|
||||
delete vertex_buffer;
|
||||
}
|
||||
|
||||
void Text::uploadVertices(const std::vector<Font::GlyphVertex> &vertices, size_t vertoffset)
|
||||
{
|
||||
size_t offset = vertoffset * sizeof(Font::GlyphVertex);
|
||||
size_t datasize = vertices.size() * sizeof(Font::GlyphVertex);
|
||||
uint8 *vbodata = nullptr;
|
||||
|
||||
// If we haven't created a VBO or the vertices are too big, make a new one.
|
||||
if (datasize > 0 && (!vbo || (offset + datasize) > vbo->getSize()))
|
||||
if (datasize > 0 && (!vertex_buffer || (offset + datasize) > vertex_buffer->getSize()))
|
||||
{
|
||||
// Make it bigger than necessary to reduce potential future allocations.
|
||||
size_t newsize = size_t((offset + datasize) * 1.5);
|
||||
|
||||
if (vbo != nullptr)
|
||||
newsize = std::max(size_t(vbo->getSize() * 1.5), newsize);
|
||||
if (vertex_buffer != nullptr)
|
||||
newsize = std::max(size_t(vertex_buffer->getSize() * 1.5), newsize);
|
||||
|
||||
auto gfx = Module::getInstance<Graphics>(Module::M_GRAPHICS);
|
||||
Buffer *new_vbo = gfx->newBuffer(newsize, nullptr, BUFFER_VERTEX, vertex::USAGE_DYNAMIC, 0);
|
||||
Buffer *new_buffer = gfx->newBuffer(newsize, nullptr, BUFFER_VERTEX, vertex::USAGE_DYNAMIC, 0);
|
||||
|
||||
if (vbo != nullptr)
|
||||
vbo->copyTo(0, vbo->getSize(), new_vbo, 0);
|
||||
if (vertex_buffer != nullptr)
|
||||
vertex_buffer->copyTo(0, vertex_buffer->getSize(), new_buffer, 0);
|
||||
|
||||
delete vbo;
|
||||
vbo = new_vbo;
|
||||
delete vertex_buffer;
|
||||
vertex_buffer = new_buffer;
|
||||
|
||||
vertexBuffers.set(0, vbo, 0);
|
||||
vertexBuffers.set(0, vertex_buffer, 0);
|
||||
}
|
||||
|
||||
if (vbo != nullptr && datasize > 0)
|
||||
if (vertex_buffer != nullptr && datasize > 0)
|
||||
{
|
||||
vbodata = (uint8 *) vbo->map();
|
||||
memcpy(vbodata + offset, &vertices[0], datasize);
|
||||
uint8 *bufferdata = (uint8 *) vertex_buffer->map();
|
||||
memcpy(bufferdata + offset, &vertices[0], datasize);
|
||||
// We unmap when we draw, to avoid unnecessary full map()/unmap() calls.
|
||||
}
|
||||
}
|
||||
@@ -222,10 +221,10 @@ int Text::getWidth(int index) const
|
||||
{
|
||||
if (index < 0)
|
||||
index = std::max((int) text_data.size() - 1, 0);
|
||||
|
||||
|
||||
if (index >= (int) text_data.size())
|
||||
return 0;
|
||||
|
||||
|
||||
return text_data[index].text_info.width;
|
||||
}
|
||||
|
||||
@@ -233,16 +232,16 @@ int Text::getHeight(int index) const
|
||||
{
|
||||
if (index < 0)
|
||||
index = std::max((int) text_data.size() - 1, 0);
|
||||
|
||||
|
||||
if (index >= (int) text_data.size())
|
||||
return 0;
|
||||
|
||||
|
||||
return text_data[index].text_info.height;
|
||||
}
|
||||
|
||||
void Text::draw(Graphics *gfx, const Matrix4 &m)
|
||||
{
|
||||
if (vbo == nullptr || draw_commands.empty())
|
||||
if (vertex_buffer == nullptr || draw_commands.empty())
|
||||
return;
|
||||
|
||||
gfx->flushStreamDraws();
|
||||
@@ -261,7 +260,7 @@ void Text::draw(Graphics *gfx, const Matrix4 &m)
|
||||
for (const Font::DrawCommand &cmd : draw_commands)
|
||||
totalverts = std::max(cmd.startvertex + cmd.vertexcount, totalverts);
|
||||
|
||||
vbo->unmap(); // Make sure all pending data is flushed to the GPU.
|
||||
vertex_buffer->unmap(); // Make sure all pending data is flushed to the GPU.
|
||||
|
||||
Graphics::TempTransform transform(gfx, m);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user