Route font mesh operations through renderer GL

This commit is contained in:
2026-06-03 07:29:09 +02:00
parent e1cce05bd6
commit 4de6f496ad
6 changed files with 279 additions and 77 deletions

View File

@@ -1232,8 +1232,11 @@ pp::foundation::Result<OpenGlMeshObjects> create_opengl_mesh_objects(
if (upload.vertex_byte_count < 0
|| (upload.vertex_byte_count > 0 && upload.vertex_data == nullptr)
|| (upload.indexed && (upload.index_byte_count <= 0 || upload.index_data == nullptr))
|| upload.index_byte_count < 0
|| (upload.index_byte_count > 0 && upload.index_data == nullptr)
|| (!upload.indexed && upload.index_byte_count != 0)
|| upload.vertex_array_count == 0U
|| upload.vertex_array_count > 2U
|| upload.attributes.empty()) {
return pp::foundation::Result<OpenGlMeshObjects>::failure(
pp::foundation::Status::invalid_argument("OpenGL mesh upload parameters are invalid"));
@@ -1254,7 +1257,7 @@ pp::foundation::Result<OpenGlMeshObjects> create_opengl_mesh_objects(
pp::foundation::Status::out_of_range("OpenGL mesh buffer allocation returned id 0"));
}
if (upload.indexed) {
if (upload.indexed && upload.index_byte_count > 0) {
dispatch.bind_buffer(element_array_buffer_target(), buffers[1]);
dispatch.buffer_data(element_array_buffer_target(), upload.index_byte_count, upload.index_data, static_draw_buffer_usage());
}
@@ -1266,13 +1269,14 @@ pp::foundation::Result<OpenGlMeshObjects> create_opengl_mesh_objects(
dispatch.bind_buffer(array_buffer_target(), 0U);
std::array<std::uint32_t, 2> vertex_arrays {};
dispatch.gen_vertex_arrays(static_cast<std::uint32_t>(vertex_arrays.size()), vertex_arrays.data());
if (vertex_arrays[0] == 0U || vertex_arrays[1] == 0U) {
dispatch.gen_vertex_arrays(upload.vertex_array_count, vertex_arrays.data());
if (vertex_arrays[0] == 0U || (upload.vertex_array_count > 1U && vertex_arrays[1] == 0U)) {
return pp::foundation::Result<OpenGlMeshObjects>::failure(
pp::foundation::Status::out_of_range("OpenGL mesh vertex array allocation returned id 0"));
}
for (const auto vertex_array : vertex_arrays) {
for (std::uint32_t vertex_array_index = 0U; vertex_array_index < upload.vertex_array_count; ++vertex_array_index) {
const auto vertex_array = vertex_arrays[vertex_array_index];
dispatch.bind_vertex_array(vertex_array);
for (const auto& attribute : upload.attributes) {
dispatch.enable_vertex_attrib_array(attribute.index);

View File

@@ -183,6 +183,7 @@ struct OpenGlMeshUpload {
const void* index_data = nullptr;
std::intptr_t index_byte_count = 0;
bool indexed = false;
std::uint32_t vertex_array_count = 2;
std::span<const OpenGlVertexAttribute> attributes;
};