From c22f2e7fa2dcb7e71ef9f48d076ed7c94722603b Mon Sep 17 00:00:00 2001 From: omigamedev Date: Tue, 2 Jun 2026 09:27:42 +0200 Subject: [PATCH] Route remaining canvas GL constants through renderer gl --- docs/modernization/build-inventory.md | 5 ++ docs/modernization/roadmap.md | 5 ++ src/canvas.cpp | 94 ++++++++++++++++----------- 3 files changed, 67 insertions(+), 37 deletions(-) diff --git a/docs/modernization/build-inventory.md b/docs/modernization/build-inventory.md index 7c3eabf..564bc3b 100644 --- a/docs/modernization/build-inventory.md +++ b/docs/modernization/build-inventory.md @@ -226,6 +226,11 @@ Known local toolchain state: unbind targets, and merge framebuffer copy targets. Canvas equirectangular import drawing and depth export rendering also consume backend-owned depth/blend state and active texture units. + Canvas thumbnail generation and object-drawing helpers also consume + backend-owned saved viewport/clear/blend state, active texture units, + readback format/type, framebuffer copy targets, and renderbuffer/depth + attachment parameters; `src/canvas.cpp` no longer contains raw `GL_*` + constants. - `windows-msvc-vcpkg-headless` validates manifest install/configure/build/test for the current headless component matrix; see DEBT-0007 for remaining app and platform triplet migration. diff --git a/docs/modernization/roadmap.md b/docs/modernization/roadmap.md index de21200..84e1107 100644 --- a/docs/modernization/roadmap.md +++ b/docs/modernization/roadmap.md @@ -771,6 +771,11 @@ Results: - Canvas equirectangular import drawing and depth export rendering now route depth/blend state and active texture units through the renderer GL backend mapping. +- Canvas thumbnail generation and object-drawing helpers now route saved + viewport/clear/blend state, active texture units, readback format/type, + framebuffer copy targets, and renderbuffer/depth attachment parameters through + the renderer GL backend mapping; `src/canvas.cpp` no longer contains raw + `GL_*` constants. - Known remaining warnings: legacy project/vendor diagnostics, Visual Studio vcpkg-manifest warning, `LNK4099` missing libyuv PDBs, and `LNK4098` runtime library conflict from retained vendor binaries. diff --git a/src/canvas.cpp b/src/canvas.cpp index 5ee7486..6e4b375 100644 --- a/src/canvas.cpp +++ b/src/canvas.cpp @@ -73,6 +73,26 @@ GLenum blend_state() return static_cast(pp::renderer::gl::blend_state()); } +GLenum renderbuffer_target() +{ + return static_cast(pp::renderer::gl::renderbuffer_target()); +} + +GLenum depth_component24_format() +{ + return static_cast(pp::renderer::gl::depth_component24_format()); +} + +GLenum framebuffer_target() +{ + return static_cast(pp::renderer::gl::framebuffer_target()); +} + +GLenum framebuffer_depth_attachment() +{ + return static_cast(pp::renderer::gl::framebuffer_depth_attachment()); +} + GLint texture_filter_linear() { return static_cast(pp::renderer::gl::linear_texture_filter()); @@ -2739,9 +2759,9 @@ Image Canvas::thumbnail_generate(int w, int h) // save viewport and clear color states GLint vp[4]; GLfloat cc[4]; - glGetIntegerv(GL_VIEWPORT, vp); - glGetFloatv(GL_COLOR_CLEAR_VALUE, cc); - GLboolean blend = glIsEnabled(GL_BLEND); + glGetIntegerv(viewport_query(), vp); + glGetFloatv(color_clear_value_query(), cc); + auto blend = glIsEnabled(blend_state()); // prepare common states glViewport(0, 0, w, h); @@ -2760,7 +2780,7 @@ Image Canvas::thumbnail_generate(int w, int h) fb.clear({ 1, 1, 1, 0 }); for (int i = 0; i < 6; i++) { - glDisable(GL_BLEND); + glDisable(blend_state()); auto plane_mvp = proj * m_mv * m_plane_transform[i] * glm::translate(glm::vec3(0, 0, -1)); ShaderManager::use(kShader::TextureBlend); @@ -2769,7 +2789,7 @@ Image Canvas::thumbnail_generate(int w, int h) if (!ShaderManager::ext_framebuffer_fetch) { ShaderManager::u_int(kShaderUniform::TexBG, 2); - glActiveTexture(GL_TEXTURE2); + set_active_texture_unit(2); blendtex.bind(); m_sampler_nearest.bind(2); } @@ -2782,12 +2802,12 @@ Image Canvas::thumbnail_generate(int w, int h) continue; if (!ShaderManager::ext_framebuffer_fetch) { - glActiveTexture(GL_TEXTURE2); - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, w, h); + set_active_texture_unit(2); + glCopyTexSubImage2D(texture_2d_target(), 0, 0, 0, 0, 0, w, h); } ShaderManager::u_int(kShaderUniform::BlendMode, m_layers[layer_index]->m_blend_mode); ShaderManager::u_float(kShaderUniform::Alpha, m_layers[layer_index]->m_opacity); - glActiveTexture(GL_TEXTURE0); + set_active_texture_unit(0); m_layers[layer_index]->rtt(i).bindTexture(); m_face_plane.draw_fill(); m_layers[layer_index]->rtt(i).unbindTexture(); @@ -2795,14 +2815,14 @@ Image Canvas::thumbnail_generate(int w, int h) if (!ShaderManager::ext_framebuffer_fetch) { - glActiveTexture(GL_TEXTURE2); + set_active_texture_unit(2); blendtex.unbind(); } - glActiveTexture(GL_TEXTURE0); + set_active_texture_unit(0); blendtex.bind(); // copy the content of the fb before drawing the grid - glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, w, h); + glCopyTexSubImage2D(texture_2d_target(), 0, 0, 0, 0, 0, w, h); // draw the grid ShaderManager::use(kShader::Checkerboard); @@ -2810,7 +2830,7 @@ Image Canvas::thumbnail_generate(int w, int h) m_face_plane.draw_fill(); // now blend with the background - glEnable(GL_BLEND); + glEnable(blend_state()); ShaderManager::use(kShader::Texture); ShaderManager::u_int(kShaderUniform::Tex, 0); ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-.5f, .5f, -.5f, .5f, -1.f, 1.f)); @@ -2829,10 +2849,10 @@ Image Canvas::thumbnail_generate(int w, int h) blendtex.destroy(); // restore viewport and clear color states - blend ? glEnable(GL_BLEND) : glDisable(GL_BLEND); + blend ? glEnable(blend_state()) : glDisable(blend_state()); glViewport(vp[0], vp[1], vp[2], vp[3]); glClearColor(cc[0], cc[1], cc[2], cc[3]); - glActiveTexture(GL_TEXTURE0); + set_active_texture_unit(0); }); return image; @@ -2872,30 +2892,30 @@ void Canvas::draw_objects_direct(std::functionm_image[i] = std::make_unique(box_sz.x * box_sz.y * 4); - glReadPixels(bounds.x, bounds.y, box_sz.x, box_sz.y, GL_RGBA, GL_UNSIGNED_BYTE, action->m_image[i].get()); + glReadPixels(bounds.x, bounds.y, box_sz.x, box_sz.y, rgba_pixel_format(), unsigned_byte_component_type(), action->m_image[i].get()); action->m_box[i] = bounds; } action->m_old_box[i] = layer.box(i, frame); @@ -2983,7 +3003,7 @@ void Canvas::draw_objects(std::function