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
|
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
|
clear color/depth masks and color-write-mask query tokens. `RTT` no longer
|
||||||
spells GL enum names directly. It also
|
spells GL enum names directly. It also
|
||||||
validates Shape index-type, fill/stroke primitive-mode, buffer target, static
|
validates renderer API primitive-topology to OpenGL draw-mode mapping, Shape
|
||||||
upload usage, and vertex attribute component/normalization mapping used by
|
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
|
the legacy mesh draw path, plus the PanoPainter cube-face to OpenGL
|
||||||
texture-target mapping used by `TextureCube`.
|
texture-target mapping used by `TextureCube`.
|
||||||
It also owns and validates sampler wrap S/T/R, min/mag filter, and desktop
|
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
|
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
|
`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.
|
also live in `pp_renderer_gl`. `RTT` no longer spells GL enum names directly.
|
||||||
Mesh index-type and primitive-mode
|
Renderer API primitive-topology to OpenGL draw-mode mapping, mesh index-type
|
||||||
decisions used by legacy `Shape` drawing, plus Shape buffer targets, static
|
and primitive-mode decisions used by legacy `Shape` drawing, plus Shape buffer
|
||||||
upload usage, and vertex attribute component/normalization tokens, also live
|
targets, static upload usage, and vertex attribute component/normalization
|
||||||
in `pp_renderer_gl`. The PanoPainter cube-face to
|
tokens, also live in `pp_renderer_gl`. The PanoPainter cube-face to
|
||||||
OpenGL texture-target mapping used by `TextureCube` also lives in
|
OpenGL texture-target mapping used by `TextureCube` also lives in
|
||||||
`pp_renderer_gl`. The legacy app delegates extension, upload-format,
|
`pp_renderer_gl`. The legacy app delegates extension, upload-format,
|
||||||
framebuffer diagnostic, framebuffer blit, render-target setup, clear-state,
|
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_points = 0x0000U;
|
||||||
constexpr std::uint32_t gl_lines = 0x0001U;
|
constexpr std::uint32_t gl_lines = 0x0001U;
|
||||||
constexpr std::uint32_t gl_triangles = 0x0004U;
|
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_fragment_shader = 0x8B30U;
|
||||||
constexpr std::uint32_t gl_vertex_shader = 0x8B31U;
|
constexpr std::uint32_t gl_vertex_shader = 0x8B31U;
|
||||||
constexpr std::uint32_t gl_compile_status = 0x8B81U;
|
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;
|
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
|
std::uint32_t index_type_for_index_size(std::uint32_t index_size_bytes) noexcept
|
||||||
{
|
{
|
||||||
switch (index_size_bytes) {
|
switch (index_size_bytes) {
|
||||||
|
|||||||
@@ -95,6 +95,8 @@ struct OpenGlWindowsWglContextConfig {
|
|||||||
[[nodiscard]] std::uint32_t framebuffer_depth_buffer_mask() noexcept;
|
[[nodiscard]] std::uint32_t framebuffer_depth_buffer_mask() noexcept;
|
||||||
[[nodiscard]] std::uint32_t color_write_mask_query() noexcept;
|
[[nodiscard]] std::uint32_t color_write_mask_query() noexcept;
|
||||||
[[nodiscard]] std::uint32_t framebuffer_blit_filter(bool linear) 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 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_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;
|
[[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);
|
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)
|
void maps_shape_index_and_primitive_modes(pp::tests::Harness& h)
|
||||||
{
|
{
|
||||||
constexpr std::uint32_t gl_points = 0x0000U;
|
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("names_framebuffer_status_codes", names_framebuffer_status_codes);
|
||||||
harness.run("maps_framebuffer_render_target_parameters", maps_framebuffer_render_target_parameters);
|
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_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_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("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);
|
harness.run("exposes_default_render_target_texture_parameters", exposes_default_render_target_texture_parameters);
|
||||||
|
|||||||
Reference in New Issue
Block a user