Map renderer viewport and scissor to OpenGL
This commit is contained in:
@@ -224,11 +224,12 @@ Known local toolchain state:
|
|||||||
names directly. It also owns the PanoPainter shader uniform catalog and legacy hash
|
names directly. It also owns the PanoPainter shader uniform catalog and legacy hash
|
||||||
mapping used by `Shader` active-uniform discovery and the uniform uniqueness
|
mapping used by `Shader` active-uniform discovery and the uniform uniqueness
|
||||||
check. App OpenGL initialization debug severity, debug output, GL info string,
|
check. App OpenGL initialization debug severity, debug output, GL info string,
|
||||||
default depth/program-point/line-smooth state, blend factor/equation, and UI
|
renderer API viewport/scissor rect conversion, default depth/program-point/
|
||||||
render-target RGBA8 format tokens are cataloged and tested here too, including
|
line-smooth state, blend factor/equation, and UI render-target RGBA8 format
|
||||||
the legacy convert command and resize path. App clear color-buffer masks,
|
tokens are cataloged and tested here too, including the legacy convert command
|
||||||
default framebuffer binding, scissor state, and sampler filter/wrap tokens
|
and resize path. App clear color-buffer masks, default framebuffer binding,
|
||||||
also consume the backend mapping. OpenGL extension enumeration query tokens
|
scissor state, and sampler filter/wrap tokens also consume the backend mapping.
|
||||||
|
OpenGL extension enumeration query tokens
|
||||||
used before runtime capability detection are cataloged here. Legacy font
|
used before runtime capability detection are cataloged here. Legacy font
|
||||||
atlas texture formats, text mesh buffer targets, attribute component and
|
atlas texture formats, text mesh buffer targets, attribute component and
|
||||||
normalization tokens, draw primitive/index type, upload usage, and active
|
normalization tokens, draw primitive/index type, upload usage, and active
|
||||||
|
|||||||
@@ -481,8 +481,9 @@ depth-state to OpenGL enable/write/compare mapping also live in
|
|||||||
validation, active-uniform mapping, and the legacy uniform uniqueness check now
|
validation, active-uniform mapping, and the legacy uniform uniqueness check now
|
||||||
delegate to `pp_renderer_gl` as well. `Shader` no longer spells GL enum names
|
delegate to `pp_renderer_gl` as well. `Shader` no longer spells GL enum names
|
||||||
directly. App OpenGL initialization debug severity, debug output, GL info
|
directly. App OpenGL initialization debug severity, debug output, GL info
|
||||||
string, default depth/program-point/line-smooth state, blend factor/equation,
|
string, renderer API viewport/scissor rect conversion, default
|
||||||
and UI render-target RGBA8 format tokens are now also cataloged and tested in
|
depth/program-point/line-smooth state, blend factor/equation, and UI
|
||||||
|
render-target RGBA8 format tokens are now also cataloged and tested in
|
||||||
`pp_renderer_gl`; the legacy convert command and resize path consume the same
|
`pp_renderer_gl`; the legacy convert command and resize path consume the same
|
||||||
backend-owned mapping. App clear color-buffer masks, default framebuffer
|
backend-owned mapping. App clear color-buffer masks, default framebuffer
|
||||||
binding, scissor state, and sampler filter/wrap tokens now share that backend
|
binding, scissor state, and sampler filter/wrap tokens now share that backend
|
||||||
|
|||||||
@@ -669,6 +669,18 @@ std::uint32_t viewport_query() noexcept
|
|||||||
return gl_viewport;
|
return gl_viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OpenGlViewportRect viewport_for_renderer_viewport(pp::renderer::Viewport viewport) noexcept
|
||||||
|
{
|
||||||
|
return OpenGlViewportRect {
|
||||||
|
.x = viewport.x,
|
||||||
|
.y = viewport.y,
|
||||||
|
.width = static_cast<std::int32_t>(viewport.width),
|
||||||
|
.height = static_cast<std::int32_t>(viewport.height),
|
||||||
|
.min_depth = viewport.min_depth,
|
||||||
|
.max_depth = viewport.max_depth,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
std::uint32_t color_clear_value_query() noexcept
|
std::uint32_t color_clear_value_query() noexcept
|
||||||
{
|
{
|
||||||
return gl_color_clear_value;
|
return gl_color_clear_value;
|
||||||
@@ -749,6 +761,17 @@ std::uint32_t scissor_test_state() noexcept
|
|||||||
return gl_scissor_test;
|
return gl_scissor_test;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
OpenGlScissorRect scissor_rect_for_renderer_scissor(pp::renderer::ScissorRect scissor) noexcept
|
||||||
|
{
|
||||||
|
return OpenGlScissorRect {
|
||||||
|
.enabled = scissor.enabled ? gl_boolean_true : gl_boolean_false,
|
||||||
|
.x = scissor.x,
|
||||||
|
.y = scissor.y,
|
||||||
|
.width = static_cast<std::int32_t>(scissor.width),
|
||||||
|
.height = static_cast<std::int32_t>(scissor.height),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
std::uint32_t program_point_size_state() noexcept
|
std::uint32_t program_point_size_state() noexcept
|
||||||
{
|
{
|
||||||
return gl_program_point_size;
|
return gl_program_point_size;
|
||||||
|
|||||||
@@ -34,6 +34,23 @@ struct OpenGlTextureParameter {
|
|||||||
std::uint32_t value = 0;
|
std::uint32_t value = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct OpenGlViewportRect {
|
||||||
|
std::int32_t x = 0;
|
||||||
|
std::int32_t y = 0;
|
||||||
|
std::int32_t width = 0;
|
||||||
|
std::int32_t height = 0;
|
||||||
|
float min_depth = 0.0F;
|
||||||
|
float max_depth = 1.0F;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct OpenGlScissorRect {
|
||||||
|
std::uint8_t enabled = 0;
|
||||||
|
std::int32_t x = 0;
|
||||||
|
std::int32_t y = 0;
|
||||||
|
std::int32_t width = 0;
|
||||||
|
std::int32_t height = 0;
|
||||||
|
};
|
||||||
|
|
||||||
struct OpenGlEnumMapping {
|
struct OpenGlEnumMapping {
|
||||||
std::uint32_t value = 0;
|
std::uint32_t value = 0;
|
||||||
bool supported = false;
|
bool supported = false;
|
||||||
@@ -158,6 +175,8 @@ struct OpenGlWindowsWglContextConfig {
|
|||||||
[[nodiscard]] std::uint32_t renderer_string_name() noexcept;
|
[[nodiscard]] std::uint32_t renderer_string_name() noexcept;
|
||||||
[[nodiscard]] std::uint32_t shading_language_version_string_name() noexcept;
|
[[nodiscard]] std::uint32_t shading_language_version_string_name() noexcept;
|
||||||
[[nodiscard]] std::uint32_t viewport_query() noexcept;
|
[[nodiscard]] std::uint32_t viewport_query() noexcept;
|
||||||
|
[[nodiscard]] OpenGlViewportRect viewport_for_renderer_viewport(
|
||||||
|
pp::renderer::Viewport viewport) noexcept;
|
||||||
[[nodiscard]] std::uint32_t color_clear_value_query() noexcept;
|
[[nodiscard]] std::uint32_t color_clear_value_query() noexcept;
|
||||||
[[nodiscard]] std::uint32_t current_program_query() noexcept;
|
[[nodiscard]] std::uint32_t current_program_query() noexcept;
|
||||||
[[nodiscard]] std::uint32_t active_texture_query() noexcept;
|
[[nodiscard]] std::uint32_t active_texture_query() noexcept;
|
||||||
@@ -171,6 +190,8 @@ struct OpenGlWindowsWglContextConfig {
|
|||||||
[[nodiscard]] OpenGlDepthState depth_state_for_renderer_depth_state(
|
[[nodiscard]] OpenGlDepthState depth_state_for_renderer_depth_state(
|
||||||
pp::renderer::DepthState state) noexcept;
|
pp::renderer::DepthState state) noexcept;
|
||||||
[[nodiscard]] std::uint32_t scissor_test_state() noexcept;
|
[[nodiscard]] std::uint32_t scissor_test_state() noexcept;
|
||||||
|
[[nodiscard]] OpenGlScissorRect scissor_rect_for_renderer_scissor(
|
||||||
|
pp::renderer::ScissorRect scissor) noexcept;
|
||||||
[[nodiscard]] std::uint32_t program_point_size_state() noexcept;
|
[[nodiscard]] std::uint32_t program_point_size_state() noexcept;
|
||||||
[[nodiscard]] std::uint32_t line_smooth_state() noexcept;
|
[[nodiscard]] std::uint32_t line_smooth_state() noexcept;
|
||||||
[[nodiscard]] std::uint32_t source_alpha_blend_factor() noexcept;
|
[[nodiscard]] std::uint32_t source_alpha_blend_factor() noexcept;
|
||||||
|
|||||||
@@ -529,6 +529,44 @@ void maps_app_initialization_parameters(pp::tests::Harness& h)
|
|||||||
PP_EXPECT(h, pp::renderer::gl::active_texture_unit(4U) == 0x84C4U);
|
PP_EXPECT(h, pp::renderer::gl::active_texture_unit(4U) == 0x84C4U);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void maps_renderer_viewports_and_scissors(pp::tests::Harness& h)
|
||||||
|
{
|
||||||
|
const auto viewport = pp::renderer::gl::viewport_for_renderer_viewport(
|
||||||
|
pp::renderer::Viewport {
|
||||||
|
.x = 4,
|
||||||
|
.y = 8,
|
||||||
|
.width = 640U,
|
||||||
|
.height = 320U,
|
||||||
|
.min_depth = 0.25F,
|
||||||
|
.max_depth = 0.75F,
|
||||||
|
});
|
||||||
|
const auto disabled_scissor = pp::renderer::gl::scissor_rect_for_renderer_scissor(
|
||||||
|
pp::renderer::ScissorRect {});
|
||||||
|
const auto enabled_scissor = pp::renderer::gl::scissor_rect_for_renderer_scissor(
|
||||||
|
pp::renderer::ScissorRect {
|
||||||
|
.enabled = true,
|
||||||
|
.x = 12,
|
||||||
|
.y = 16,
|
||||||
|
.width = 128U,
|
||||||
|
.height = 64U,
|
||||||
|
});
|
||||||
|
|
||||||
|
PP_EXPECT(h, viewport.x == 4);
|
||||||
|
PP_EXPECT(h, viewport.y == 8);
|
||||||
|
PP_EXPECT(h, viewport.width == 640);
|
||||||
|
PP_EXPECT(h, viewport.height == 320);
|
||||||
|
PP_EXPECT(h, viewport.min_depth == 0.25F);
|
||||||
|
PP_EXPECT(h, viewport.max_depth == 0.75F);
|
||||||
|
PP_EXPECT(h, disabled_scissor.enabled == 0U);
|
||||||
|
PP_EXPECT(h, disabled_scissor.width == 0);
|
||||||
|
PP_EXPECT(h, disabled_scissor.height == 0);
|
||||||
|
PP_EXPECT(h, enabled_scissor.enabled == 1U);
|
||||||
|
PP_EXPECT(h, enabled_scissor.x == 12);
|
||||||
|
PP_EXPECT(h, enabled_scissor.y == 16);
|
||||||
|
PP_EXPECT(h, enabled_scissor.width == 128);
|
||||||
|
PP_EXPECT(h, enabled_scissor.height == 64);
|
||||||
|
}
|
||||||
|
|
||||||
void maps_renderer_blend_state_tokens(pp::tests::Harness& h)
|
void maps_renderer_blend_state_tokens(pp::tests::Harness& h)
|
||||||
{
|
{
|
||||||
const auto zero = pp::renderer::gl::blend_factor_for_renderer_factor(pp::renderer::BlendFactor::zero);
|
const auto zero = pp::renderer::gl::blend_factor_for_renderer_factor(pp::renderer::BlendFactor::zero);
|
||||||
@@ -863,6 +901,7 @@ int main()
|
|||||||
harness.run("maps_renderer_sampler_tokens", maps_renderer_sampler_tokens);
|
harness.run("maps_renderer_sampler_tokens", maps_renderer_sampler_tokens);
|
||||||
harness.run("exposes_shader_attribute_binding_catalog", exposes_shader_attribute_binding_catalog);
|
harness.run("exposes_shader_attribute_binding_catalog", exposes_shader_attribute_binding_catalog);
|
||||||
harness.run("maps_app_initialization_parameters", maps_app_initialization_parameters);
|
harness.run("maps_app_initialization_parameters", maps_app_initialization_parameters);
|
||||||
|
harness.run("maps_renderer_viewports_and_scissors", maps_renderer_viewports_and_scissors);
|
||||||
harness.run("maps_renderer_blend_state_tokens", maps_renderer_blend_state_tokens);
|
harness.run("maps_renderer_blend_state_tokens", maps_renderer_blend_state_tokens);
|
||||||
harness.run("maps_renderer_color_write_masks", maps_renderer_color_write_masks);
|
harness.run("maps_renderer_color_write_masks", maps_renderer_color_write_masks);
|
||||||
harness.run("maps_renderer_blend_states", maps_renderer_blend_states);
|
harness.run("maps_renderer_blend_states", maps_renderer_blend_states);
|
||||||
|
|||||||
Reference in New Issue
Block a user