@@ -41,9 +41,7 @@ public: | |||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | |||
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; | |||
} | |||
@@ -84,19 +84,13 @@ public: | |||
VertexUsage::Color)); | |||
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()); | |||
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()); | |||
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; | |||
} | |||
@@ -146,12 +140,12 @@ public: | |||
m_shader->SetUniform(m_mvp, m_matrix); | |||
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_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | |||
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_vdecl->Unbind(); | |||
@@ -45,9 +45,7 @@ public: | |||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | |||
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; | |||
} | |||
@@ -73,9 +73,7 @@ public: | |||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | |||
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; | |||
} | |||
@@ -141,19 +141,13 @@ public: | |||
VertexUsage::Color)); | |||
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()); | |||
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()); | |||
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(); | |||
} | |||
@@ -170,12 +164,12 @@ public: | |||
m_shader->SetUniform(m_mvp, m_matrix); | |||
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_shader->SetUniform(m_mvp, m_matrix * mat4::scale(0.5f)); | |||
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_vdecl->Unbind(); | |||
@@ -64,9 +64,7 @@ public: | |||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | |||
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->Bind(); | |||
@@ -460,15 +460,9 @@ public: | |||
VertexStream<vec2>(VertexUsage::Position), | |||
VertexStream<vec2>(VertexUsage::TexCoord)); | |||
m_vbo = std::make_shared<VertexBuffer>(sizeof(vertices)); | |||
m_vbo->set_data(vertices, sizeof(vertices)); | |||
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; | |||
} | |||
@@ -87,9 +87,7 @@ public: | |||
m_vdecl = std::make_shared<VertexDeclaration>(VertexStream<vec2>(VertexUsage::Position)); | |||
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_coord = m_screen_shader->GetAttribLocation(VertexUsage::Position, 0); | |||
@@ -33,10 +33,10 @@ void EasyMesh::MeshConvert() | |||
/* Push index buffer to GPU */ | |||
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) | |||
indices[i] = m_indices[i]; | |||
ibo->Unlock(); | |||
ibo->unlock(); | |||
/* Push vertex buffer to GPU */ | |||
struct Vertex | |||
@@ -53,7 +53,7 @@ void EasyMesh::MeshConvert() | |||
VertexUsage::TexCoord)); | |||
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) | |||
{ | |||
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].texcoord = m_vert[i].m_texcoord; | |||
} | |||
vbo->Unlock(); | |||
vbo->unlock(); | |||
/* Reference our new data in our submesh */ | |||
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()); | |||
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(); | |||
} | |||
@@ -307,9 +305,7 @@ void GpuEasyMeshData::SetupVertexData(uint16_t vflags, std::shared_ptr<EasyMesh> | |||
vbo_bytes = vertexlist.bytes(); \ | |||
m_vertexcount = vertexlist.count(); \ | |||
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 | |||
uint16_t saveflags = vflags; | |||
@@ -59,12 +59,12 @@ IndexBuffer::~IndexBuffer() | |||
delete m_data; | |||
} | |||
size_t IndexBuffer::GetSize() | |||
size_t IndexBuffer::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) | |||
return nullptr; | |||
@@ -73,7 +73,7 @@ void *IndexBuffer::Lock(size_t offset, size_t size) | |||
return m_data->m_memory + offset; | |||
} | |||
void IndexBuffer::Unlock() | |||
void IndexBuffer::unlock() | |||
{ | |||
if (!m_data->m_size) | |||
return; | |||
@@ -364,12 +364,12 @@ VertexBuffer::~VertexBuffer() | |||
delete m_data; | |||
} | |||
size_t VertexBuffer::GetSize() | |||
size_t VertexBuffer::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) | |||
return nullptr; | |||
@@ -379,7 +379,7 @@ void *VertexBuffer::Lock(size_t offset, size_t size) | |||
return m_data->m_memory + offset; | |||
} | |||
void VertexBuffer::Unlock() | |||
void VertexBuffer::unlock() | |||
{ | |||
if (!m_data->m_size) | |||
return; | |||
@@ -100,13 +100,8 @@ void Gradient::tick_draw(float seconds, Scene &scene) | |||
data->shader->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 */ | |||
data->m_vdecl->SetStream(data->m_vbo, attr_pos); | |||
@@ -28,10 +28,17 @@ public: | |||
IndexBuffer(size_t size); | |||
~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 Unbind(); | |||
@@ -31,10 +31,17 @@ public: | |||
VertexBuffer(size_t size); | |||
~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: | |||
class VertexBufferData *m_data; | |||
@@ -130,7 +130,7 @@ void SubMesh::Render() | |||
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); | |||
} | |||
@@ -145,7 +145,7 @@ void SubMesh::Render() | |||
} | |||
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_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), }; | |||
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. */ | |||
m_default_cam = new Camera(); | |||
@@ -637,9 +635,9 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||
/* Create a vertex array object */ | |||
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)); | |||
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(vb2); | |||
@@ -650,8 +648,8 @@ void Scene::render_tiles() // XXX: rename to Blit() | |||
vertex + 6 * (j - i), texture + 6 * (j - i)); | |||
} | |||
vb1->Unlock(); | |||
vb2->Unlock(); | |||
vb1->unlock(); | |||
vb2->unlock(); | |||
/* Bind texture */ | |||
if (tiles[i].m_tileset->GetPalette()) | |||
@@ -736,9 +734,7 @@ void Scene::render_lines(float seconds) | |||
} | |||
} | |||
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(); | |||
@@ -353,14 +353,10 @@ void gui::render_draw_lists(ImDrawData* draw_data) | |||
}; | |||
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)); | |||
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(); | |||
ibo->Bind(); | |||