Route remaining canvas GL constants through renderer gl
This commit is contained in:
@@ -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.
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -73,6 +73,26 @@ GLenum blend_state()
|
||||
return static_cast<GLenum>(pp::renderer::gl::blend_state());
|
||||
}
|
||||
|
||||
GLenum renderbuffer_target()
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::renderbuffer_target());
|
||||
}
|
||||
|
||||
GLenum depth_component24_format()
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::depth_component24_format());
|
||||
}
|
||||
|
||||
GLenum framebuffer_target()
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::framebuffer_target());
|
||||
}
|
||||
|
||||
GLenum framebuffer_depth_attachment()
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::framebuffer_depth_attachment());
|
||||
}
|
||||
|
||||
GLint texture_filter_linear()
|
||||
{
|
||||
return static_cast<GLint>(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::function<void(const glm::mat4& camera, con
|
||||
// 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, layer.w, layer.h);
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(blend_state());
|
||||
|
||||
GLuint rboID;
|
||||
glGenRenderbuffers(1, &rboID);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, rboID);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, layer.w, layer.h);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||
glBindRenderbuffer(renderbuffer_target(), rboID);
|
||||
glRenderbufferStorage(renderbuffer_target(), depth_component24_format(), layer.w, layer.h);
|
||||
glBindRenderbuffer(renderbuffer_target(), 0);
|
||||
|
||||
glm::mat4 proj = glm::perspective(glm::radians(90.f), 1.f, .01f, 1000.f);
|
||||
for (int i = 0; i < 6; i++)
|
||||
{
|
||||
glm::mat4 plane_camera = glm::lookAt(glm::vec3(0), m_plane_origin[i], m_plane_tangent[i]);
|
||||
layer.rtt(i, frame).bindFramebuffer();
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboID);
|
||||
glFramebufferRenderbuffer(framebuffer_target(), framebuffer_depth_attachment(), renderbuffer_target(), rboID);
|
||||
|
||||
observer(plane_camera, proj, i);
|
||||
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, 0);
|
||||
glFramebufferRenderbuffer(framebuffer_target(), framebuffer_depth_attachment(), renderbuffer_target(), 0);
|
||||
layer.rtt(i, frame).unbindFramebuffer();
|
||||
|
||||
layer.face(i, frame) = true;
|
||||
@@ -2905,10 +2925,10 @@ void Canvas::draw_objects_direct(std::function<void(const glm::mat4& camera, con
|
||||
glDeleteRenderbuffers(1, &rboID);
|
||||
|
||||
// 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);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2919,24 +2939,24 @@ void Canvas::draw_objects(std::function<void(const glm::mat4& camera, const glm:
|
||||
// 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, layer.w, layer.h);
|
||||
glDisable(GL_BLEND);
|
||||
glDisable(blend_state());
|
||||
|
||||
GLuint rboID;
|
||||
glGenRenderbuffers(1, &rboID);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, rboID);
|
||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT24, layer.w, layer.h);
|
||||
glBindRenderbuffer(GL_RENDERBUFFER, 0);
|
||||
glBindRenderbuffer(renderbuffer_target(), rboID);
|
||||
glRenderbufferStorage(renderbuffer_target(), depth_component24_format(), layer.w, layer.h);
|
||||
glBindRenderbuffer(renderbuffer_target(), 0);
|
||||
|
||||
RTT rtt;
|
||||
rtt.create(layer.w, layer.h);
|
||||
rtt.bindFramebuffer();
|
||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, rboID);
|
||||
glFramebufferRenderbuffer(framebuffer_target(), framebuffer_depth_attachment(), renderbuffer_target(), rboID);
|
||||
rtt.unbindFramebuffer();
|
||||
|
||||
// allocate action to add to history
|
||||
@@ -2970,7 +2990,7 @@ void Canvas::draw_objects(std::function<void(const glm::mat4& camera, const glm:
|
||||
if (has_data)
|
||||
{
|
||||
action->m_image[i] = std::make_unique<uint8_t[]>(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<void(const glm::mat4& camera, const glm:
|
||||
ShaderManager::use(kShader::Texture);
|
||||
ShaderManager::u_int(kShaderUniform::Tex, 0);
|
||||
ShaderManager::u_mat4(kShaderUniform::MVP, glm::ortho(-0.5f, 0.5f, -0.5f, 0.5f));
|
||||
glActiveTexture(GL_TEXTURE0);
|
||||
set_active_texture_unit(0);
|
||||
m_sampler_nearest.bind(0);
|
||||
rtt.bindTexture();
|
||||
m_plane.draw_fill();
|
||||
@@ -3010,10 +3030,10 @@ void Canvas::draw_objects(std::function<void(const glm::mat4& camera, const glm:
|
||||
rtt.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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user