@@ -41,9 +41,7 @@ public: | |||||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | ||||
m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, vertices.data(), vertices.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(vertices.data(), vertices.bytes()); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -84,19 +84,13 @@ public: | |||||
VertexUsage::Color)); | VertexUsage::Color)); | ||||
m_vbo = std::make_shared<VertexBuffer>(mesh.bytes()); | m_vbo = std::make_shared<VertexBuffer>(mesh.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, mesh.data(), mesh.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(mesh.data(), mesh.bytes()); | |||||
m_lines_ibo = std::make_shared<IndexBuffer>(lines_indices.bytes()); | m_lines_ibo = std::make_shared<IndexBuffer>(lines_indices.bytes()); | ||||
data = m_lines_ibo->Lock(0, 0); | |||||
memcpy(data, lines_indices.data(), lines_indices.bytes()); | |||||
m_lines_ibo->Unlock(); | |||||
m_lines_ibo->set_data(lines_indices.data(), lines_indices.bytes()); | |||||
m_faces_ibo = std::make_shared<IndexBuffer>(faces_indices.bytes()); | m_faces_ibo = std::make_shared<IndexBuffer>(faces_indices.bytes()); | ||||
data = m_faces_ibo->Lock(0, 0); | |||||
memcpy(data, faces_indices.data(), faces_indices.bytes()); | |||||
m_faces_ibo->Unlock(); | |||||
m_faces_ibo->set_data(faces_indices.data(), faces_indices.bytes()); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -146,12 +140,12 @@ public: | |||||
m_shader->SetUniform(m_mvp, m_matrix); | m_shader->SetUniform(m_mvp, m_matrix); | ||||
m_lines_ibo->Bind(); | m_lines_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Lines, m_lines_ibo->GetSize() / sizeof(uint16_t)); | |||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Lines, m_lines_ibo->size() / sizeof(uint16_t)); | |||||
m_lines_ibo->Unbind(); | m_lines_ibo->Unbind(); | ||||
m_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | m_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | ||||
m_faces_ibo->Bind(); | m_faces_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, m_faces_ibo->GetSize() / sizeof(uint16_t)); | |||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, m_faces_ibo->size() / sizeof(uint16_t)); | |||||
m_faces_ibo->Unbind(); | m_faces_ibo->Unbind(); | ||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
@@ -45,9 +45,7 @@ public: | |||||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | ||||
m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, vertices.data(), vertices.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(vertices.data(), vertices.bytes()); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -73,9 +73,7 @@ public: | |||||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | ||||
m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, vertices.data(), vertices.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(vertices.data(), vertices.bytes()); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -141,19 +141,13 @@ public: | |||||
VertexUsage::Color)); | VertexUsage::Color)); | ||||
m_vbo = std::make_shared<VertexBuffer>(mesh.bytes()); | m_vbo = std::make_shared<VertexBuffer>(mesh.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, mesh.data(), mesh.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(mesh.data(), mesh.bytes()); | |||||
m_lines_ibo = std::make_shared<IndexBuffer>(lines_indices.bytes()); | m_lines_ibo = std::make_shared<IndexBuffer>(lines_indices.bytes()); | ||||
data = m_lines_ibo->Lock(0, 0); | |||||
memcpy(data, lines_indices.data(), lines_indices.bytes()); | |||||
m_lines_ibo->Unlock(); | |||||
m_lines_ibo->set_data(lines_indices.data(), lines_indices.bytes()); | |||||
m_faces_ibo = std::make_shared<IndexBuffer>(faces_indices.bytes()); | m_faces_ibo = std::make_shared<IndexBuffer>(faces_indices.bytes()); | ||||
data = m_faces_ibo->Lock(0, 0); | |||||
memcpy(data, faces_indices.data(), faces_indices.bytes()); | |||||
m_faces_ibo->Unlock(); | |||||
m_faces_ibo->set_data(faces_indices.data(), faces_indices.bytes()); | |||||
return WorldEntity::init_draw(); | return WorldEntity::init_draw(); | ||||
} | } | ||||
@@ -170,12 +164,12 @@ public: | |||||
m_shader->SetUniform(m_mvp, m_matrix); | m_shader->SetUniform(m_mvp, m_matrix); | ||||
m_lines_ibo->Bind(); | m_lines_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Lines, m_lines_ibo->GetSize() / sizeof(uint16_t)); | |||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Lines, m_lines_ibo->size() / sizeof(uint16_t)); | |||||
m_lines_ibo->Unbind(); | m_lines_ibo->Unbind(); | ||||
m_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | m_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | ||||
m_faces_ibo->Bind(); | m_faces_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, m_faces_ibo->GetSize() / sizeof(uint16_t)); | |||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, m_faces_ibo->size() / sizeof(uint16_t)); | |||||
m_faces_ibo->Unbind(); | m_faces_ibo->Unbind(); | ||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
@@ -64,9 +64,7 @@ public: | |||||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | ||||
m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | m_vbo = std::make_shared<VertexBuffer>(vertices.bytes()); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, vertices.data(), vertices.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(vertices.data(), vertices.bytes()); | |||||
m_fbo = std::make_shared<Framebuffer>(Video::GetSize()); | m_fbo = std::make_shared<Framebuffer>(Video::GetSize()); | ||||
m_fbo->Bind(); | m_fbo->Bind(); | ||||
@@ -460,15 +460,9 @@ public: | |||||
VertexStream<vec2>(VertexUsage::Position), | VertexStream<vec2>(VertexUsage::Position), | ||||
VertexStream<vec2>(VertexUsage::TexCoord)); | VertexStream<vec2>(VertexUsage::TexCoord)); | ||||
m_vbo = std::make_shared<VertexBuffer>(sizeof(vertices)); | m_vbo = std::make_shared<VertexBuffer>(sizeof(vertices)); | ||||
m_vbo->set_data(vertices, sizeof(vertices)); | |||||
m_tbo = std::make_shared<VertexBuffer>(sizeof(texcoords)); | m_tbo = std::make_shared<VertexBuffer>(sizeof(texcoords)); | ||||
void *data = m_vbo->Lock(0, 0); | |||||
memcpy(data, vertices, sizeof(vertices)); | |||||
m_vbo->Unlock(); | |||||
data = m_tbo->Lock(0, 0); | |||||
memcpy(data, texcoords, sizeof(texcoords)); | |||||
m_tbo->Unlock(); | |||||
m_tbo->set_data(texcoords, sizeof(texcoords)); | |||||
return true; | return true; | ||||
} | } | ||||
@@ -87,9 +87,7 @@ public: | |||||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | ||||
m_vbo = std::make_shared<VertexBuffer>(m_vertices.bytes()); | m_vbo = std::make_shared<VertexBuffer>(m_vertices.bytes()); | ||||
void *vertices = m_vbo->Lock(0, 0); | |||||
memcpy(vertices, &m_vertices[0], m_vertices.bytes()); | |||||
m_vbo->Unlock(); | |||||
m_vbo->set_data(m_vertices.data(), m_vertices.bytes()); | |||||
m_screen_shader = Shader::Create(LOLFX_RESOURCE_NAME(12_texture_to_screen)); | m_screen_shader = Shader::Create(LOLFX_RESOURCE_NAME(12_texture_to_screen)); | ||||
m_screen_coord = m_screen_shader->GetAttribLocation(VertexUsage::Position, 0); | m_screen_coord = m_screen_shader->GetAttribLocation(VertexUsage::Position, 0); | ||||
@@ -33,10 +33,10 @@ void EasyMesh::MeshConvert() | |||||
/* Push index buffer to GPU */ | /* Push index buffer to GPU */ | ||||
auto ibo = std::make_shared<IndexBuffer>(m_indices.count() * sizeof(uint16_t)); | auto ibo = std::make_shared<IndexBuffer>(m_indices.count() * sizeof(uint16_t)); | ||||
uint16_t *indices = (uint16_t *)ibo->Lock(0, 0); | |||||
uint16_t *indices = (uint16_t *)ibo->lock(0, 0); | |||||
for (int i = 0; i < m_indices.count(); ++i) | for (int i = 0; i < m_indices.count(); ++i) | ||||
indices[i] = m_indices[i]; | indices[i] = m_indices[i]; | ||||
ibo->Unlock(); | |||||
ibo->unlock(); | |||||
/* Push vertex buffer to GPU */ | /* Push vertex buffer to GPU */ | ||||
struct Vertex | struct Vertex | ||||
@@ -53,7 +53,7 @@ void EasyMesh::MeshConvert() | |||||
VertexUsage::TexCoord)); | VertexUsage::TexCoord)); | ||||
auto vbo = std::make_shared<VertexBuffer>(m_vert.count() * sizeof(Vertex)); | auto vbo = std::make_shared<VertexBuffer>(m_vert.count() * sizeof(Vertex)); | ||||
Vertex *vert = (Vertex *)vbo->Lock(0, 0); | |||||
Vertex *vert = (Vertex *)vbo->lock(0, 0); | |||||
for (int i = 0; i < m_vert.count(); ++i) | for (int i = 0; i < m_vert.count(); ++i) | ||||
{ | { | ||||
vert[i].pos = m_vert[i].m_coord, | vert[i].pos = m_vert[i].m_coord, | ||||
@@ -61,7 +61,7 @@ void EasyMesh::MeshConvert() | |||||
vert[i].color = (u8vec4)(m_vert[i].m_color * 255.f); | vert[i].color = (u8vec4)(m_vert[i].m_color * 255.f); | ||||
vert[i].texcoord = m_vert[i].m_texcoord; | vert[i].texcoord = m_vert[i].m_texcoord; | ||||
} | } | ||||
vbo->Unlock(); | |||||
vbo->unlock(); | |||||
/* Reference our new data in our submesh */ | /* Reference our new data in our submesh */ | ||||
m_submeshes.push_back(std::make_shared<SubMesh>(shader, vdecl)); | m_submeshes.push_back(std::make_shared<SubMesh>(shader, vdecl)); | ||||
@@ -271,9 +271,7 @@ void GpuEasyMeshData::AddGpuData(std::shared_ptr<GpuShaderData> gpudata, std::sh | |||||
} | } | ||||
m_ibo = std::make_shared<IndexBuffer>(indexlist.bytes()); | m_ibo = std::make_shared<IndexBuffer>(indexlist.bytes()); | ||||
void *indices = m_ibo->Lock(0, 0); | |||||
memcpy(indices, &indexlist[0], indexlist.bytes()); | |||||
m_ibo->Unlock(); | |||||
m_ibo->set_data(indexlist.data(), indexlist.bytes()); | |||||
m_indexcount = indexlist.count(); | m_indexcount = indexlist.count(); | ||||
} | } | ||||
@@ -307,9 +305,7 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr<EasyMesh> | |||||
vbo_bytes = vertexlist.bytes(); \ | vbo_bytes = vertexlist.bytes(); \ | ||||
m_vertexcount = vertexlist.count(); \ | m_vertexcount = vertexlist.count(); \ | ||||
new_vbo = std::make_shared<VertexBuffer>(vbo_bytes); \ | new_vbo = std::make_shared<VertexBuffer>(vbo_bytes); \ | ||||
void *mesh = new_vbo->Lock(0, 0); \ | |||||
memcpy(mesh, vbo_data, vbo_bytes); \ | |||||
new_vbo->Unlock(); | |||||
new_vbo->set_data(vbo_data, vbo_bytes); | |||||
//Keep a count of the flags | //Keep a count of the flags | ||||
uint16_t saveflags = vflags; | uint16_t saveflags = vflags; | ||||
@@ -59,12 +59,12 @@ IndexBuffer::~IndexBuffer() | |||||
delete m_data; | delete m_data; | ||||
} | } | ||||
size_t IndexBuffer::GetSize() | |||||
size_t IndexBuffer::size() | |||||
{ | { | ||||
return m_data->m_size; | return m_data->m_size; | ||||
} | } | ||||
void *IndexBuffer::Lock(size_t offset, size_t size) | |||||
void *IndexBuffer::lock(size_t offset, size_t size) | |||||
{ | { | ||||
if (!m_data->m_size) | if (!m_data->m_size) | ||||
return nullptr; | return nullptr; | ||||
@@ -73,7 +73,7 @@ void *IndexBuffer::Lock(size_t offset, size_t size) | |||||
return m_data->m_memory + offset; | return m_data->m_memory + offset; | ||||
} | } | ||||
void IndexBuffer::Unlock() | |||||
void IndexBuffer::unlock() | |||||
{ | { | ||||
if (!m_data->m_size) | if (!m_data->m_size) | ||||
return; | return; | ||||
@@ -364,12 +364,12 @@ VertexBuffer::~VertexBuffer() | |||||
delete m_data; | delete m_data; | ||||
} | } | ||||
size_t VertexBuffer::GetSize() | |||||
size_t VertexBuffer::size() | |||||
{ | { | ||||
return m_data->m_size; | return m_data->m_size; | ||||
} | } | ||||
void *VertexBuffer::Lock(size_t offset, size_t size) | |||||
void *VertexBuffer::lock(size_t offset, size_t size) | |||||
{ | { | ||||
if (!m_data->m_size) | if (!m_data->m_size) | ||||
return nullptr; | return nullptr; | ||||
@@ -379,7 +379,7 @@ void *VertexBuffer::Lock(size_t offset, size_t size) | |||||
return m_data->m_memory + offset; | return m_data->m_memory + offset; | ||||
} | } | ||||
void VertexBuffer::Unlock() | |||||
void VertexBuffer::unlock() | |||||
{ | { | ||||
if (!m_data->m_size) | if (!m_data->m_size) | ||||
return; | return; | ||||
@@ -100,13 +100,8 @@ void Gradient::tick_draw(float seconds, Scene &scene) | |||||
data->shader->Bind(); | data->shader->Bind(); | ||||
data->m_vdecl->Bind(); | data->m_vdecl->Bind(); | ||||
void *tmp = data->m_vbo->Lock(0, 0); | |||||
memcpy(tmp, vertex, sizeof(vertex)); | |||||
data->m_vbo->Unlock(); | |||||
tmp = data->m_cbo->Lock(0, 0); | |||||
memcpy(tmp, color, sizeof(color)); | |||||
data->m_cbo->Unlock(); | |||||
data->m_vbo->set_data(vertex, sizeof(vertex)); | |||||
data->m_cbo->set_data(color, sizeof(color)); | |||||
/* Bind vertex and color buffers */ | /* Bind vertex and color buffers */ | ||||
data->m_vdecl->SetStream(data->m_vbo, attr_pos); | data->m_vdecl->SetStream(data->m_vbo, attr_pos); | ||||
@@ -28,10 +28,17 @@ public: | |||||
IndexBuffer(size_t size); | IndexBuffer(size_t size); | ||||
~IndexBuffer(); | ~IndexBuffer(); | ||||
size_t GetSize(); | |||||
size_t size(); | |||||
void *Lock(size_t offset, size_t size); | |||||
void Unlock(); | |||||
void set_data(void const *data, size_t size) | |||||
{ | |||||
auto ptr = lock(0, size); | |||||
::memcpy(ptr, data, size); | |||||
unlock(); | |||||
} | |||||
void *lock(size_t offset, size_t size); | |||||
void unlock(); | |||||
void Bind(); | void Bind(); | ||||
void Unbind(); | void Unbind(); | ||||
@@ -31,10 +31,17 @@ public: | |||||
VertexBuffer(size_t size); | VertexBuffer(size_t size); | ||||
~VertexBuffer(); | ~VertexBuffer(); | ||||
size_t GetSize(); | |||||
size_t size(); | |||||
void *Lock(size_t offset, size_t size); | |||||
void Unlock(); | |||||
void set_data(void const *data, size_t size) | |||||
{ | |||||
auto ptr = lock(0, size); | |||||
::memcpy(ptr, data, size); | |||||
unlock(); | |||||
} | |||||
void *lock(size_t offset, size_t size); | |||||
void unlock(); | |||||
private: | private: | ||||
class VertexBufferData *m_data; | class VertexBufferData *m_data; | ||||
@@ -130,7 +130,7 @@ void SubMesh::Render() | |||||
attribs[j] = m_shader->GetAttribLocation(usage, usages[usage_index]++); | attribs[j] = m_shader->GetAttribLocation(usage, usages[usage_index]++); | ||||
} | } | ||||
vertex_count += m_vbos[i]->GetSize() / m_vdecl->GetStream(i).GetSize(); | |||||
vertex_count += m_vbos[i]->size() / m_vdecl->GetStream(i).GetSize(); | |||||
m_vdecl->SetStream(m_vbos[i], attribs); | m_vdecl->SetStream(m_vbos[i], attribs); | ||||
} | } | ||||
@@ -145,7 +145,7 @@ void SubMesh::Render() | |||||
} | } | ||||
m_ibo->Bind(); | m_ibo->Bind(); | ||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, (int)(m_ibo->GetSize() / sizeof(uint16_t))); | |||||
m_vdecl->DrawIndexedElements(MeshPrimitive::Triangles, (int)(m_ibo->size() / sizeof(uint16_t))); | |||||
m_vdecl->Unbind(); | m_vdecl->Unbind(); | ||||
m_ibo->Unbind(); | m_ibo->Unbind(); | ||||
} | } | ||||
@@ -139,9 +139,7 @@ Scene::Scene(ivec2 size) | |||||
vec2(-1.0, -1.0), vec2( 1.0, 1.0), vec2(-1.0, 1.0), }; | vec2(-1.0, -1.0), vec2( 1.0, 1.0), vec2(-1.0, 1.0), }; | ||||
m_pp.m_vbo = std::make_shared<VertexBuffer>(quad.bytes()); | m_pp.m_vbo = std::make_shared<VertexBuffer>(quad.bytes()); | ||||
void *vertices = m_pp.m_vbo->Lock(0, 0); | |||||
memcpy(vertices, quad.data(), quad.bytes()); | |||||
m_pp.m_vbo->Unlock(); | |||||
m_pp.m_vbo->set_data(quad.data(), quad.bytes()); | |||||
/* Create a default orthographic camera, in case the user doesn’t. */ | /* Create a default orthographic camera, in case the user doesn’t. */ | ||||
m_default_cam = new Camera(); | m_default_cam = new Camera(); | ||||
@@ -637,9 +635,9 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||||
/* Create a vertex array object */ | /* Create a vertex array object */ | ||||
auto vb1 = std::make_shared<VertexBuffer>(6 * (n - i) * sizeof(vec3)); | auto vb1 = std::make_shared<VertexBuffer>(6 * (n - i) * sizeof(vec3)); | ||||
vec3 *vertex = (vec3 *)vb1->Lock(0, 0); | |||||
vec3 *vertex = (vec3 *)vb1->lock(0, 0); | |||||
auto vb2 = std::make_shared<VertexBuffer>(6 * (n - i) * sizeof(vec2)); | auto vb2 = std::make_shared<VertexBuffer>(6 * (n - i) * sizeof(vec2)); | ||||
vec2 *texture = (vec2 *)vb2->Lock(0, 0); | |||||
vec2 *texture = (vec2 *)vb2->lock(0, 0); | |||||
m_tile_api.m_bufs.push(vb1); | m_tile_api.m_bufs.push(vb1); | ||||
m_tile_api.m_bufs.push(vb2); | m_tile_api.m_bufs.push(vb2); | ||||
@@ -650,8 +648,8 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||||
vertex + 6 * (j - i), texture + 6 * (j - i)); | vertex + 6 * (j - i), texture + 6 * (j - i)); | ||||
} | } | ||||
vb1->Unlock(); | |||||
vb2->Unlock(); | |||||
vb1->unlock(); | |||||
vb2->unlock(); | |||||
/* Bind texture */ | /* Bind texture */ | ||||
if (tiles[i].m_tileset->GetPalette()) | if (tiles[i].m_tileset->GetPalette()) | ||||
@@ -736,9 +734,7 @@ void Scene::render_lines(float seconds) | |||||
} | } | ||||
} | } | ||||
auto vb = std::make_shared<VertexBuffer>(buff.bytes()); | auto vb = std::make_shared<VertexBuffer>(buff.bytes()); | ||||
float *vertex = (float *)vb->Lock(0, 0); | |||||
memcpy(vertex, buff.data(), buff.bytes()); | |||||
vb->Unlock(); | |||||
vb->set_data(buff.data(), buff.bytes()); | |||||
m_line_api.m_shader->Bind(); | m_line_api.m_shader->Bind(); | ||||
@@ -353,14 +353,10 @@ void gui::render_draw_lists(ImDrawData* draw_data) | |||||
}; | }; | ||||
auto vbo = std::make_shared<VertexBuffer>(command_list.VtxBuffer.Size * sizeof(ImDrawVert)); | auto vbo = std::make_shared<VertexBuffer>(command_list.VtxBuffer.Size * sizeof(ImDrawVert)); | ||||
ImDrawVert *vert = (ImDrawVert *)vbo->Lock(0, 0); | |||||
memcpy(vert, command_list.VtxBuffer.Data, command_list.VtxBuffer.Size * sizeof(ImDrawVert)); | |||||
vbo->Unlock(); | |||||
vbo->set_data(command_list.VtxBuffer.Data, command_list.VtxBuffer.Size * sizeof(ImDrawVert)); | |||||
auto ibo = std::make_shared<IndexBuffer>(command_list.IdxBuffer.Size * sizeof(ImDrawIdx)); | auto ibo = std::make_shared<IndexBuffer>(command_list.IdxBuffer.Size * sizeof(ImDrawIdx)); | ||||
ImDrawIdx *indices = (ImDrawIdx *)ibo->Lock(0, 0); | |||||
memcpy(indices, command_list.IdxBuffer.Data, command_list.IdxBuffer.Size * sizeof(ImDrawIdx)); | |||||
ibo->Unlock(); | |||||
ibo->set_data(command_list.IdxBuffer.Data, command_list.IdxBuffer.Size * sizeof(ImDrawIdx)); | |||||
m_vdecl->Bind(); | m_vdecl->Bind(); | ||||
ibo->Bind(); | ibo->Bind(); | ||||