Move texture cube mapping to renderer gl
This commit is contained in:
@@ -45,6 +45,7 @@ constexpr std::uint32_t gl_framebuffer_incomplete_multisample = 0x8D56U;
|
||||
constexpr std::uint32_t gl_color_buffer_bit = 0x00004000U;
|
||||
constexpr std::uint32_t gl_depth_buffer_bit = 0x00000100U;
|
||||
constexpr std::uint32_t gl_color_writemask = 0x0C23U;
|
||||
constexpr std::uint32_t gl_texture_cube_map = 0x8513U;
|
||||
constexpr std::uint32_t gl_texture_cube_map_positive_x = 0x8515U;
|
||||
constexpr std::uint32_t gl_texture_cube_map_negative_x = 0x8516U;
|
||||
constexpr std::uint32_t gl_texture_cube_map_positive_y = 0x8517U;
|
||||
@@ -328,6 +329,20 @@ std::uint32_t primitive_mode_for_stroke_count(std::uint32_t vertex_or_index_coun
|
||||
return gl_lines;
|
||||
}
|
||||
|
||||
std::uint32_t texture_cube_map_target() noexcept
|
||||
{
|
||||
return gl_texture_cube_map;
|
||||
}
|
||||
|
||||
std::uint32_t cube_map_allocation_face_texture_target(std::uint32_t face_index) noexcept
|
||||
{
|
||||
if (face_index >= 6U) {
|
||||
return 0U;
|
||||
}
|
||||
|
||||
return gl_texture_cube_map_positive_x + face_index;
|
||||
}
|
||||
|
||||
std::span<const std::uint32_t> panopainter_cube_face_texture_targets() noexcept
|
||||
{
|
||||
static constexpr std::array<std::uint32_t, 6> targets {
|
||||
|
||||
@@ -75,6 +75,8 @@ struct OpenGlReadbackFormat {
|
||||
[[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;
|
||||
[[nodiscard]] std::uint32_t texture_cube_map_target() noexcept;
|
||||
[[nodiscard]] std::uint32_t cube_map_allocation_face_texture_target(std::uint32_t face_index) noexcept;
|
||||
[[nodiscard]] std::span<const std::uint32_t> panopainter_cube_face_texture_targets() noexcept;
|
||||
[[nodiscard]] std::uint32_t cube_face_texture_target(std::uint32_t face_index) noexcept;
|
||||
[[nodiscard]] std::span<const OpenGlTextureParameter> default_render_target_texture_parameters() noexcept;
|
||||
|
||||
@@ -14,6 +14,11 @@ namespace {
|
||||
return static_cast<GLenum>(pp::renderer::gl::texture_2d_target());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum texture_cube_map_target() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::texture_cube_map_target());
|
||||
}
|
||||
|
||||
[[nodiscard]] GLenum framebuffer_target() noexcept
|
||||
{
|
||||
return static_cast<GLenum>(pp::renderer::gl::framebuffer_target());
|
||||
@@ -66,11 +71,21 @@ bool TextureCube::create(int resolution) noexcept
|
||||
if (!m_cubetex_id)
|
||||
return;
|
||||
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubetex_id);
|
||||
glBindTexture(texture_cube_map_target(), m_cubetex_id);
|
||||
const auto format = pp::renderer::gl::texture_format_for_channel_count(4U);
|
||||
const auto component_type = static_cast<GLenum>(pp::renderer::gl::unsigned_byte_component_type());
|
||||
for (GLuint i = 0; i < 6; i++)
|
||||
{
|
||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i, 0, GL_RGBA8,
|
||||
m_resolution, m_resolution, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||
glTexImage2D(
|
||||
static_cast<GLenum>(pp::renderer::gl::cube_map_allocation_face_texture_target(i)),
|
||||
0,
|
||||
static_cast<GLint>(format.internal_format),
|
||||
m_resolution,
|
||||
m_resolution,
|
||||
0,
|
||||
static_cast<GLenum>(format.pixel_format),
|
||||
component_type,
|
||||
nullptr);
|
||||
}
|
||||
});
|
||||
return m_cubetex_id != 0;
|
||||
@@ -82,7 +97,7 @@ void TextureCube::destroy() noexcept
|
||||
{
|
||||
App::I->render_task([f=m_faces, id=m_cubetex_id]
|
||||
{
|
||||
glDeleteTextures(f.size(), f.data());
|
||||
glDeleteTextures(static_cast<GLsizei>(f.size()), f.data());
|
||||
glDeleteTextures(1, &id);
|
||||
});
|
||||
m_cubetex_id = 0;
|
||||
@@ -94,7 +109,7 @@ void TextureCube::destroy() noexcept
|
||||
void TextureCube::bind() const noexcept
|
||||
{
|
||||
assert(App::I->is_render_thread());
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, m_cubetex_id);
|
||||
glBindTexture(texture_cube_map_target(), m_cubetex_id);
|
||||
}
|
||||
|
||||
bool TextureManager::load(const char* path, bool generate_mipmaps)
|
||||
|
||||
Reference in New Issue
Block a user