From 1a8f2df0859ec5a4b41a666e089e86a696d66cd7 Mon Sep 17 00:00:00 2001 From: korenkonder Date: Tue, 26 May 2026 10:29:34 +0300 Subject: [PATCH] glTextureSubImage2D should be called via gl_rend_state --- src/CRE/gl_rend_state.cpp | 17 +++++++++++++++-- src/CRE/gl_rend_state.hpp | 4 +++- src/CRE/render.cpp | 2 +- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/src/CRE/gl_rend_state.cpp b/src/CRE/gl_rend_state.cpp index 31b6de81..0ad3481f 100644 --- a/src/CRE/gl_rend_state.cpp +++ b/src/CRE/gl_rend_state.cpp @@ -270,6 +270,8 @@ struct gl_rend_state { void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height); void tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); + void texture_sub_image_2d(GLuint texture, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); void unmap_array_buffer(GLuint buffer); void unmap_element_array_buffer(GLuint buffer); void unmap_uniform_buffer(GLuint buffer); @@ -657,13 +659,18 @@ void p_gl_rend_state::set_viewport(const gl_rend_state_rect& rect) { ptr.set_viewport(rect); } +void p_gl_rend_state::set_viewport(GLint x, GLint y, GLsizei width, GLsizei height) { + ptr.set_viewport(x, y, width, height); +} + void p_gl_rend_state::tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { ptr.tex_sub_image_2d(target, level, xoffset, yoffset, width, height, format, type, pixels); } -void p_gl_rend_state::set_viewport(GLint x, GLint y, GLsizei width, GLsizei height) { - ptr.set_viewport(x, y, width, height); +void p_gl_rend_state::texture_sub_image_2d(GLuint texture, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { + ptr.texture_sub_image_2d(texture, level, xoffset, yoffset, width, height, format, type, pixels); } void p_gl_rend_state::use_program(GLuint program) { @@ -1632,6 +1639,12 @@ inline void gl_rend_state::tex_sub_image_2d(GLenum target, GLint level, GLint xo enum_or(flags, GL_REND_STATE_EXECUTE); } +inline void gl_rend_state::texture_sub_image_2d(GLuint texture, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels) { + glTextureSubImage2D(texture, level, xoffset, yoffset, width, height, format, type, pixels); + enum_or(flags, GL_REND_STATE_EXECUTE); +} + void gl_rend_state::update() { if (!update_flags) return; diff --git a/src/CRE/gl_rend_state.hpp b/src/CRE/gl_rend_state.hpp index 0e37ea58..cc4539d5 100644 --- a/src/CRE/gl_rend_state.hpp +++ b/src/CRE/gl_rend_state.hpp @@ -118,9 +118,11 @@ struct p_gl_rend_state { void set_stencil_mask(GLuint mask); void set_stencil_op(GLenum sfail, GLenum dpfail, GLenum dppass); void set_viewport(const gl_rend_state_rect& rect); + void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height); void tex_sub_image_2d(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); - void set_viewport(GLint x, GLint y, GLsizei width, GLsizei height); + void texture_sub_image_2d(GLuint texture, GLint level, GLint xoffset, GLint yoffset, + GLsizei width, GLsizei height, GLenum format, GLenum type, const void* pixels); void unmap_array_buffer(GLuint buffer); void unmap_element_array_buffer(GLuint buffer); void unmap_uniform_buffer(GLuint buffer); diff --git a/src/CRE/render.cpp b/src/CRE/render.cpp index c1a8b542..84451bce 100644 --- a/src/CRE/render.cpp +++ b/src/CRE/render.cpp @@ -2327,7 +2327,7 @@ namespace rndr { } if (GLAD_GL_VERSION_4_5) - glTextureSubImage2D(tonemap_lut_texture, 0, 0, 0, + p_gl_rend_st.texture_sub_image_2d(tonemap_lut_texture, 0, 0, 0, 16 * TONE_MAP_SAT_GAMMA_SAMPLES, 1, GL_RG, GL_FLOAT, tex_data); else { p_gl_rend_st.bind_texture_2d(tonemap_lut_texture);