Map renderer primitive topologies to OpenGL
This commit is contained in:
@@ -201,8 +201,9 @@ Known local toolchain state:
|
||||
status used by `RTT::create` and framebuffer bind/restore paths, plus RTT
|
||||
clear color/depth masks and color-write-mask query tokens. `RTT` no longer
|
||||
spells GL enum names directly. It also
|
||||
validates Shape index-type, fill/stroke primitive-mode, buffer target, static
|
||||
upload usage, and vertex attribute component/normalization mapping used by
|
||||
validates renderer API primitive-topology to OpenGL draw-mode mapping, Shape
|
||||
index-type, fill/stroke primitive-mode, buffer target, static upload usage,
|
||||
and vertex attribute component/normalization mapping used by
|
||||
the legacy mesh draw path, plus the PanoPainter cube-face to OpenGL
|
||||
texture-target mapping used by `TextureCube`.
|
||||
It also owns and validates sampler wrap S/T/R, min/mag filter, and desktop
|
||||
|
||||
@@ -455,10 +455,10 @@ framebuffer targets, binding queries, attachment points, and completion status
|
||||
used by `RTT::create` and framebuffer bind/restore paths, also live in
|
||||
`pp_renderer_gl`. RTT clear color/depth masks and color-write-mask query tokens
|
||||
also live in `pp_renderer_gl`. `RTT` no longer spells GL enum names directly.
|
||||
Mesh index-type and primitive-mode
|
||||
decisions used by legacy `Shape` drawing, plus Shape buffer targets, static
|
||||
upload usage, and vertex attribute component/normalization tokens, also live
|
||||
in `pp_renderer_gl`. The PanoPainter cube-face to
|
||||
Renderer API primitive-topology to OpenGL draw-mode mapping, mesh index-type
|
||||
and primitive-mode decisions used by legacy `Shape` drawing, plus Shape buffer
|
||||
targets, static upload usage, and vertex attribute component/normalization
|
||||
tokens, also live in `pp_renderer_gl`. The PanoPainter cube-face to
|
||||
OpenGL texture-target mapping used by `TextureCube` also lives in
|
||||
`pp_renderer_gl`. The legacy app delegates extension, upload-format,
|
||||
framebuffer diagnostic, framebuffer blit, render-target setup, clear-state,
|
||||
|
||||
@@ -22,6 +22,7 @@ constexpr std::uint32_t gl_false = 0U;
|
||||
constexpr std::uint32_t gl_points = 0x0000U;
|
||||
constexpr std::uint32_t gl_lines = 0x0001U;
|
||||
constexpr std::uint32_t gl_triangles = 0x0004U;
|
||||
constexpr std::uint32_t gl_triangle_strip = 0x0005U;
|
||||
constexpr std::uint32_t gl_fragment_shader = 0x8B30U;
|
||||
constexpr std::uint32_t gl_vertex_shader = 0x8B31U;
|
||||
constexpr std::uint32_t gl_compile_status = 0x8B81U;
|
||||
@@ -459,6 +460,20 @@ std::uint32_t framebuffer_blit_filter(bool linear) noexcept
|
||||
return linear ? gl_linear : gl_nearest;
|
||||
}
|
||||
|
||||
std::uint32_t primitive_mode_for_renderer_topology(pp::renderer::PrimitiveTopology topology) noexcept
|
||||
{
|
||||
switch (topology) {
|
||||
case pp::renderer::PrimitiveTopology::triangles:
|
||||
return gl_triangles;
|
||||
case pp::renderer::PrimitiveTopology::triangle_strip:
|
||||
return gl_triangle_strip;
|
||||
case pp::renderer::PrimitiveTopology::lines:
|
||||
return gl_lines;
|
||||
default:
|
||||
return 0U;
|
||||
}
|
||||
}
|
||||
|
||||
std::uint32_t index_type_for_index_size(std::uint32_t index_size_bytes) noexcept
|
||||
{
|
||||
switch (index_size_bytes) {
|
||||
|
||||
@@ -95,6 +95,8 @@ struct OpenGlWindowsWglContextConfig {
|
||||
[[nodiscard]] std::uint32_t framebuffer_depth_buffer_mask() noexcept;
|
||||
[[nodiscard]] std::uint32_t color_write_mask_query() noexcept;
|
||||
[[nodiscard]] std::uint32_t framebuffer_blit_filter(bool linear) noexcept;
|
||||
[[nodiscard]] std::uint32_t primitive_mode_for_renderer_topology(
|
||||
pp::renderer::PrimitiveTopology topology) noexcept;
|
||||
[[nodiscard]] std::uint32_t index_type_for_index_size(std::uint32_t index_size_bytes) noexcept;
|
||||
[[nodiscard]] std::uint32_t primitive_mode_for_fill_count(std::uint32_t vertex_or_index_count) noexcept;
|
||||
[[nodiscard]] std::uint32_t primitive_mode_for_stroke_count(std::uint32_t vertex_or_index_count) noexcept;
|
||||
|
||||
@@ -258,6 +258,22 @@ void maps_framebuffer_blit_parameters(pp::tests::Harness& h)
|
||||
PP_EXPECT(h, pp::renderer::gl::framebuffer_blit_filter(false) == 0x2600U);
|
||||
}
|
||||
|
||||
void maps_renderer_primitive_topologies_to_draw_modes(pp::tests::Harness& h)
|
||||
{
|
||||
PP_EXPECT(h, pp::renderer::gl::primitive_mode_for_renderer_topology(
|
||||
pp::renderer::PrimitiveTopology::triangles)
|
||||
== 0x0004U);
|
||||
PP_EXPECT(h, pp::renderer::gl::primitive_mode_for_renderer_topology(
|
||||
pp::renderer::PrimitiveTopology::triangle_strip)
|
||||
== 0x0005U);
|
||||
PP_EXPECT(h, pp::renderer::gl::primitive_mode_for_renderer_topology(
|
||||
pp::renderer::PrimitiveTopology::lines)
|
||||
== 0x0001U);
|
||||
PP_EXPECT(h, pp::renderer::gl::primitive_mode_for_renderer_topology(
|
||||
static_cast<pp::renderer::PrimitiveTopology>(255U))
|
||||
== 0U);
|
||||
}
|
||||
|
||||
void maps_shape_index_and_primitive_modes(pp::tests::Harness& h)
|
||||
{
|
||||
constexpr std::uint32_t gl_points = 0x0000U;
|
||||
@@ -545,6 +561,7 @@ int main()
|
||||
harness.run("names_framebuffer_status_codes", names_framebuffer_status_codes);
|
||||
harness.run("maps_framebuffer_render_target_parameters", maps_framebuffer_render_target_parameters);
|
||||
harness.run("maps_framebuffer_blit_parameters", maps_framebuffer_blit_parameters);
|
||||
harness.run("maps_renderer_primitive_topologies_to_draw_modes", maps_renderer_primitive_topologies_to_draw_modes);
|
||||
harness.run("maps_shape_index_and_primitive_modes", maps_shape_index_and_primitive_modes);
|
||||
harness.run("maps_panopainter_cube_faces_to_texture_targets", maps_panopainter_cube_faces_to_texture_targets);
|
||||
harness.run("exposes_default_render_target_texture_parameters", exposes_default_render_target_texture_parameters);
|
||||
|
||||
Reference in New Issue
Block a user