diff --git a/src/CRE/GL/array_buffer.cpp b/src/CRE/GL/array_buffer.cpp index 7b5cb1b7..1dab7644 100644 --- a/src/CRE/GL/array_buffer.cpp +++ b/src/CRE/GL/array_buffer.cpp @@ -12,14 +12,14 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); } else { glGenBuffers(1, &buffer); gl_st.bind_array_buffer(buffer); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); else @@ -31,7 +31,7 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -39,7 +39,7 @@ namespace GL { else { glGenBuffers(1, &buffer); gl_st.bind_array_buffer(buffer); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_ARRAY_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); else @@ -60,7 +60,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { gl_st.bind_array_buffer(buffer); @@ -70,7 +70,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); @@ -84,7 +84,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { p_gl_rend_st.bind_array_buffer(buffer); @@ -94,7 +94,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); @@ -107,7 +107,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); @@ -119,7 +119,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ARRAY_BUFFER); @@ -131,7 +131,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { gl_st.bind_array_buffer(buffer); @@ -143,7 +143,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { p_gl_rend_st.bind_array_buffer(buffer); diff --git a/src/CRE/GL/element_array_buffer.cpp b/src/CRE/GL/element_array_buffer.cpp index 9ae36251..d082db94 100644 --- a/src/CRE/GL/element_array_buffer.cpp +++ b/src/CRE/GL/element_array_buffer.cpp @@ -12,14 +12,14 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); } else { glGenBuffers(1, &buffer); gl_st.bind_element_array_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); else @@ -31,7 +31,7 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -39,7 +39,7 @@ namespace GL { else { glGenBuffers(1, &buffer); gl_st.bind_element_array_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_ELEMENT_ARRAY_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); else @@ -60,7 +60,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { gl_st.bind_element_array_buffer(buffer); @@ -70,7 +70,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); @@ -84,7 +84,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { p_gl_rend_st.bind_element_array_buffer(buffer); @@ -94,7 +94,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); @@ -107,7 +107,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); @@ -119,7 +119,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_ELEMENT_ARRAY_BUFFER); @@ -131,7 +131,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { gl_st.bind_element_array_buffer(buffer); @@ -143,7 +143,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { p_gl_rend_st.bind_element_array_buffer(buffer); diff --git a/src/CRE/GL/shader_storage_buffer.cpp b/src/CRE/GL/shader_storage_buffer.cpp index e43354f0..131cebef 100644 --- a/src/CRE/GL/shader_storage_buffer.cpp +++ b/src/CRE/GL/shader_storage_buffer.cpp @@ -12,14 +12,14 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); } else { glGenBuffers(1, &buffer); gl_st.bind_shader_storage_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); else @@ -31,7 +31,7 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -39,7 +39,7 @@ namespace GL { else { glGenBuffers(1, &buffer); gl_st.bind_shader_storage_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_SHADER_STORAGE_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); else @@ -60,7 +60,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { gl_st.bind_shader_storage_buffer(buffer); @@ -70,7 +70,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); @@ -84,7 +84,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { p_gl_rend_st.bind_shader_storage_buffer(buffer); @@ -94,7 +94,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); @@ -107,7 +107,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); @@ -119,7 +119,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_SHADER_STORAGE_BUFFER); @@ -131,7 +131,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { gl_st.bind_shader_storage_buffer(buffer); @@ -143,7 +143,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { p_gl_rend_st.bind_shader_storage_buffer(buffer); diff --git a/src/CRE/GL/uniform_buffer.cpp b/src/CRE/GL/uniform_buffer.cpp index 78ab0ec7..46694db8 100644 --- a/src/CRE/GL/uniform_buffer.cpp +++ b/src/CRE/GL/uniform_buffer.cpp @@ -12,14 +12,14 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); } else { glGenBuffers(1, &buffer); gl_st.bind_uniform_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, 0, GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT); else @@ -31,7 +31,7 @@ namespace GL { if (buffer) return; - if (GL_VERSION_4_5) { + if (GLAD_GL_VERSION_4_5) { glCreateBuffers(1, &buffer); glNamedBufferStorage(buffer, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); @@ -39,7 +39,7 @@ namespace GL { else { glGenBuffers(1, &buffer); gl_st.bind_uniform_buffer(buffer, true); - if (GL_VERSION_4_4) + if (GLAD_GL_VERSION_4_4) glBufferStorage(GL_UNIFORM_BUFFER, (GLsizeiptr)size, data, dynamic ? GL_DYNAMIC_STORAGE_BIT | GL_MAP_WRITE_BIT : 0); else @@ -60,7 +60,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { gl_st.bind_uniform_buffer(buffer); @@ -70,7 +70,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); @@ -84,7 +84,7 @@ namespace GL { return 0; void* data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) data = glMapNamedBuffer(buffer, GL_WRITE_ONLY); else { p_gl_rend_st.bind_uniform_buffer(buffer); @@ -94,7 +94,7 @@ namespace GL { if (data) return data; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); @@ -107,7 +107,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); @@ -119,7 +119,7 @@ namespace GL { if (!buffer) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glUnmapNamedBuffer(buffer); else { glUnmapBuffer(GL_UNIFORM_BUFFER); @@ -131,7 +131,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { gl_st.bind_uniform_buffer(buffer); @@ -143,7 +143,7 @@ namespace GL { if (!buffer || !size) return; - if (GL_VERSION_4_5) + if (GLAD_GL_VERSION_4_5) glNamedBufferSubData(buffer, (GLsizeiptr)offset, (GLsizeiptr)size, data); else { p_gl_rend_st.bind_uniform_buffer(buffer); diff --git a/src/CRE/render.cpp b/src/CRE/render.cpp index 66e2448e..b3f15cad 100644 --- a/src/CRE/render.cpp +++ b/src/CRE/render.cpp @@ -855,7 +855,7 @@ namespace rndr { vec2 Render::get_taa_offset() { if (taa) { float_t offset = taa_texture_selector == 1 ? -0.25f : 0.25f; - return offset / vec2((float_t)render_width[0], (float_t)render_height[0]); + return -offset / vec2((float_t)render_width[0], (float_t)render_height[0]); } return 0.0; } @@ -1855,7 +1855,6 @@ namespace rndr { 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); rend_data_ctx.state.active_bind_texture_2d(0, exposure_history->glid); - rend_data_ctx.state.bind_sampler(0, rctx->render_samplers[2]); if (reset_exposure) glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 32, 1); else diff --git a/src/CRE/render_manager.cpp b/src/CRE/render_manager.cpp index 9aeac49d..beb058bd 100644 --- a/src/CRE/render_manager.cpp +++ b/src/CRE/render_manager.cpp @@ -293,7 +293,6 @@ namespace rndr { { render_data_context rend_data_ctx(GL_REND_STATE_PRE_3D); - rend_data_ctx.state.get(); rend_data_ctx.state.bind_framebuffer(0); glClearBufferfv(GL_COLOR, 0, (float_t*)&color_clear); diff --git a/src/CRE/renderer/dof.cpp b/src/CRE/renderer/dof.cpp index 4674e966..f00e01fa 100644 --- a/src/CRE/renderer/dof.cpp +++ b/src/CRE/renderer/dof.cpp @@ -308,9 +308,14 @@ namespace renderer { rend_data_ctx.state.bind_sampler(4, samplers[1]); rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); - glCopyImageSubData( - buf_rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, - rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, width, height, 1); + if (GLAD_GL_VERSION_4_3) + glCopyImageSubData( + buf_rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, + rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, width, height, 1); + else + fbo_blit(rend_data_ctx.state, buf_rt->fbos[0], rt->fbos[0], + 0, 0, width, height, + 0, 0, width, height, GL_COLOR_BUFFER_BIT, GL_NEAREST); rend_data_ctx.state.end_event(); } diff --git a/src/CRE/renderer/transparency.cpp b/src/CRE/renderer/transparency.cpp index ffbedd8d..37c282cd 100644 --- a/src/CRE/renderer/transparency.cpp +++ b/src/CRE/renderer/transparency.cpp @@ -55,15 +55,36 @@ namespace renderer { rend_data_ctx.state.draw_arrays(GL_TRIANGLE_STRIP, 0, 4); rend_data_ctx.state.enable_depth_test(); - glCopyImageSubData(rctx_ptr->render_buffer.GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, + (rctx_ptr->render_buffer.GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); + if (GLAD_GL_VERSION_4_3) + glCopyImageSubData( + rctx_ptr->render_buffer.GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, + rt->GetColorTex(), GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); + else + fbo_blit(rend_data_ctx.state, rctx_ptr->render_buffer.fbos[0], rt->fbos[0], + 0, 0, fbo.width, fbo.height, + 0, 0, fbo.width, fbo.height, GL_COLOR_BUFFER_BIT, GL_NEAREST); } void Transparency::copy(render_data_context& rend_data_ctx, GLuint texture) { - glCopyImageSubData(texture, GL_TEXTURE_2D, 0, 0, 0, 0, - fbo.textures[0], GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); + if (GLAD_GL_VERSION_4_3) + glCopyImageSubData(texture, GL_TEXTURE_2D, 0, 0, 0, 0, + fbo.textures[0], GL_TEXTURE_2D, 0, 0, 0, 0, fbo.width, fbo.height, 1); + rend_data_ctx.state.bind_framebuffer(fbo.buffer); rend_data_ctx.state.set_viewport(0, 0, fbo.width, fbo.height); + + if (!GLAD_GL_VERSION_4_3) { + rend_data_ctx.state.disable_depth_test(); + rend_data_ctx.shader_flags.arr[U_REDUCE] = 0; + shaders_ft.set(rend_data_ctx.state, rend_data_ctx.shader_flags, SHADER_FT_REDUCE); + rend_data_ctx.state.active_bind_texture_2d(0, texture); + rend_data_ctx.state.bind_sampler(0, rctx_ptr->render_samplers[1]); + rctx_ptr->render.draw_quad(rend_data_ctx, fbo.width, fbo.height, 1.0f, 1.0f, + 0.0f, 0.0f, 1.0f, 1.0f, 1.0f, 1.0f, 1.0f); + rend_data_ctx.state.enable_depth_test(); + } } void Transparency::resize(GLuint color_texture, GLuint depth_texture, int32_t width, int32_t height) { diff --git a/src/CRE/shader.cpp b/src/CRE/shader.cpp index 29f28556..ee45ac3a 100644 --- a/src/CRE/shader.cpp +++ b/src/CRE/shader.cpp @@ -266,11 +266,12 @@ static void parse_define_inner(std::string& temp, bool vulkan) { if (!vulkan) { size_t off = 0; while (true) { - size_t pos_set = temp.find("set = ", off); + size_t pos_set = temp.find("(set = ", off); size_t pos_binding = temp.find("binding = ", off); if (pos_set == -1 || pos_binding == -1) break; + pos_set++; temp.erase(pos_set, pos_binding - pos_set); off = pos_set + 10; } diff --git a/src/CRE/sprite.cpp b/src/CRE/sprite.cpp index a538e1c6..a5049ea5 100644 --- a/src/CRE/sprite.cpp +++ b/src/CRE/sprite.cpp @@ -620,7 +620,7 @@ namespace spr { static const GLsizei buffer_size = sizeof(sprite_draw_vertex); vbo.Create(gl_state, buffer_size * vbo_vertex_count); - gl_state.bind_array_buffer(vbo); + gl_state.bind_array_buffer(vbo, true); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, buffer_size, @@ -635,7 +635,7 @@ namespace spr { ebo_index_count = 4096; ebo.Create(gl_state, sizeof(uint32_t) * ebo_index_count); - gl_state.bind_element_array_buffer(ebo); + gl_state.bind_element_array_buffer(ebo, true); gl_state.bind_array_buffer(0); gl_state.bind_vertex_array(0); @@ -670,7 +670,7 @@ namespace spr { gl_state.bind_vertex_array(vao); vbo.Create(gl_state, buffer_size * vbo_vertex_count); - gl_state.bind_array_buffer(vbo); + gl_state.bind_array_buffer(vbo, true); glBufferSubData(GL_ARRAY_BUFFER, 0, (GLsizeiptr)(buffer_size * vertex_buffer.size()), vertex_buffer.data()); @@ -700,7 +700,7 @@ namespace spr { gl_state.bind_vertex_array(vao); ebo.Create(gl_state, sizeof(uint32_t) * ebo_index_count); - gl_state.bind_element_array_buffer(ebo); + gl_state.bind_element_array_buffer(ebo, true); glBufferSubData(GL_ELEMENT_ARRAY_BUFFER, 0, (GLsizeiptr)(sizeof(uint32_t) * index_buffer.size()), index_buffer.data());