mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 06:08:30 +09:00
[Chore] (MG_Impl/Texture): convert base internal format to sized ones (on a best-effort basis)
This commit is contained in:
@@ -791,6 +791,9 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
MGLOG_D("%s: Backend depth", __func__);
|
MGLOG_D("%s: Backend depth", __func__);
|
||||||
MG_External::GLES::glTexImage2D(target, level, (GLint)internalformat, width, height, border, format, type,
|
MG_External::GLES::glTexImage2D(target, level, (GLint)internalformat, width, height, border, format, type,
|
||||||
nullptr);
|
nullptr);
|
||||||
|
errorLopper.Loop([file = __FILE__, line = __LINE__](auto err) {
|
||||||
|
MGLOG_D("ES error (%s:%d): %s", file, line, MG_Util::ConvertGLEnumToString(err).c_str());
|
||||||
|
});
|
||||||
FramebufferImpl::BackendFramebufferBindingProtector drawFboProtector(GL_DRAW_FRAMEBUFFER);
|
FramebufferImpl::BackendFramebufferBindingProtector drawFboProtector(GL_DRAW_FRAMEBUFFER);
|
||||||
FramebufferImpl::BackendFramebufferBindingProtector readFboProtector(GL_READ_FRAMEBUFFER);
|
FramebufferImpl::BackendFramebufferBindingProtector readFboProtector(GL_READ_FRAMEBUFFER);
|
||||||
errorLopper.Loop([file = __FILE__, line = __LINE__](auto err) {
|
errorLopper.Loop([file = __FILE__, line = __LINE__](auto err) {
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ namespace MobileGL::MG_Backend::DirectGLES {
|
|||||||
ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
|
ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
|
||||||
#endif
|
#endif
|
||||||
MG_Util::TextureFormatProcessor::NormalizePixelFormat(MG_Util::ConvertTextureInternalFormatToGLEnum(internalFormat), outInternalFormat,
|
MG_Util::TextureFormatProcessor::NormalizePixelFormat(MG_Util::ConvertTextureInternalFormatToGLEnum(internalFormat), outInternalFormat,
|
||||||
outType, outFormat);
|
outFormat, outType);
|
||||||
}
|
}
|
||||||
} // namespace TextureImpl
|
} // namespace TextureImpl
|
||||||
|
|
||||||
|
|||||||
@@ -612,24 +612,26 @@ namespace MobileGL {
|
|||||||
|
|
||||||
void TexImage2D_State(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
void TexImage2D_State(GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height,
|
||||||
GLint border, GLenum format, GLenum type, const void* pixels) {
|
GLint border, GLenum format, GLenum type, const void* pixels) {
|
||||||
MGLOG_D(
|
|
||||||
"%s called with target: %s, level: %d, internalformat: %s, width: %d, height: %d, "
|
|
||||||
"border: %d, format: %s, type: %s (%u), pixels: %p", __func__,
|
|
||||||
MG_Util::ConvertTextureUploadTargetToString(MG_Util::ConvertGLEnumToTextureUploadTarget(target)).c_str(),
|
|
||||||
level,
|
|
||||||
MG_Util::ConvertTextureInternalFormatToString(
|
|
||||||
MG_Util::ConvertGLEnumToTextureInternalFormat(internalformat)).c_str(),
|
|
||||||
width, height, border,
|
|
||||||
MG_Util::ConvertTextureInputFormatToString(MG_Util::ConvertGLEnumToTextureInputFormat(format)).c_str(),
|
|
||||||
MG_Util::ConvertTexturePixelDataTypeToString(MG_Util::ConvertGLEnumToTexturePixelDataType(type)).c_str(),
|
|
||||||
type, pixels);
|
|
||||||
// ======================= Converting ================================
|
// ======================= Converting ================================
|
||||||
TextureUploadTarget textureUploadingTarget = MG_Util::ConvertGLEnumToTextureUploadTarget(target);
|
TextureUploadTarget textureUploadingTarget = MG_Util::ConvertGLEnumToTextureUploadTarget(target);
|
||||||
TextureTarget textureTarget = MG_Util::ConvertGLEnumToTextureTarget(target);
|
TextureTarget textureTarget = MG_Util::ConvertGLEnumToTextureTarget(target);
|
||||||
TextureInputFormat textureInputFormat = MG_Util::ConvertGLEnumToTextureInputFormat(format);
|
TextureInputFormat textureInputFormat = MG_Util::ConvertGLEnumToTextureInputFormat(format);
|
||||||
TexturePixelDataType texturePixelDataType = MG_Util::ConvertGLEnumToTexturePixelDataType(type);
|
TexturePixelDataType texturePixelDataType = MG_Util::ConvertGLEnumToTexturePixelDataType(type);
|
||||||
TextureInternalFormat textureInternalFormat = MG_Util::ConvertGLEnumToTextureInternalFormat(internalformat);
|
TextureInternalFormat textureInternalFormat = MG_Util::ConvertGLEnumToTextureInternalFormat(internalformat);
|
||||||
|
MGLOG_D(
|
||||||
|
"%s called with target: %s (%s), level: %d, internalformat: %s (%s), width: %d, height: %d, "
|
||||||
|
"border: %d, format: %s (%s), type: %s (%s), pixels: %p", __func__,
|
||||||
|
MG_Util::ConvertTextureUploadTargetToString(textureUploadingTarget).c_str(),
|
||||||
|
MG_Util::ConvertGLEnumToString(target).c_str(),
|
||||||
|
level,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(textureInternalFormat).c_str(),
|
||||||
|
MG_Util::ConvertGLEnumToString(internalformat).c_str(),
|
||||||
|
width, height, border,
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(textureInputFormat).c_str(),
|
||||||
|
MG_Util::ConvertGLEnumToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(texturePixelDataType).c_str(),
|
||||||
|
MG_Util::ConvertGLEnumToString(type).c_str(),
|
||||||
|
pixels);
|
||||||
// ===================== Error Checking ==============================
|
// ===================== Error Checking ==============================
|
||||||
if (!TextureImpl::ValidateTexturePixelDataType(texturePixelDataType)) return;
|
if (!TextureImpl::ValidateTexturePixelDataType(texturePixelDataType)) return;
|
||||||
if (!TextureImpl::ValidateTextureInputFormat(textureInputFormat)) return;
|
if (!TextureImpl::ValidateTextureInputFormat(textureInputFormat)) return;
|
||||||
@@ -654,6 +656,7 @@ namespace MobileGL {
|
|||||||
// indicated by type.
|
// indicated by type.
|
||||||
|
|
||||||
// ======================= Processing ================================
|
// ======================= Processing ================================
|
||||||
|
textureInternalFormat = MG_Util::ConvertInternalFormatToSized(textureInternalFormat, textureInputFormat, texturePixelDataType);
|
||||||
SharedPtr<MG_State::GLState::ITextureObject> textureObject = nullptr;
|
SharedPtr<MG_State::GLState::ITextureObject> textureObject = nullptr;
|
||||||
Bool isProxy = TextureImpl::IsProxyTextureTarget(textureUploadingTarget);
|
Bool isProxy = TextureImpl::IsProxyTextureTarget(textureUploadingTarget);
|
||||||
if (isProxy) {
|
if (isProxy) {
|
||||||
|
|||||||
@@ -6,6 +6,7 @@
|
|||||||
// End of Source File Header
|
// End of Source File Header
|
||||||
|
|
||||||
#include "TextureEnumConverter.h"
|
#include "TextureEnumConverter.h"
|
||||||
|
#include "MG_Util/Converters/MGToStr/TextureEnumConverter.h"
|
||||||
|
|
||||||
namespace MobileGL {
|
namespace MobileGL {
|
||||||
namespace MG_Util {
|
namespace MG_Util {
|
||||||
@@ -50,5 +51,145 @@ namespace MobileGL {
|
|||||||
return TextureTarget::Unknown;
|
return TextureTarget::Unknown;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TextureInternalFormat ConvertInternalFormatToSized(TextureInternalFormat internalformat, TextureInputFormat format, TexturePixelDataType type) {
|
||||||
|
switch (internalformat) {
|
||||||
|
case TextureInternalFormat::R8:
|
||||||
|
case TextureInternalFormat::R8Snorm:
|
||||||
|
case TextureInternalFormat::R16:
|
||||||
|
case TextureInternalFormat::R16Snorm:
|
||||||
|
case TextureInternalFormat::RG8:
|
||||||
|
case TextureInternalFormat::RG8Snorm:
|
||||||
|
case TextureInternalFormat::RG16:
|
||||||
|
case TextureInternalFormat::RG16Snorm:
|
||||||
|
case TextureInternalFormat::R3G3B2:
|
||||||
|
case TextureInternalFormat::RGB4:
|
||||||
|
case TextureInternalFormat::RGB5:
|
||||||
|
case TextureInternalFormat::RGB8:
|
||||||
|
case TextureInternalFormat::RGB8Snorm:
|
||||||
|
case TextureInternalFormat::RGB10:
|
||||||
|
case TextureInternalFormat::RGB12:
|
||||||
|
case TextureInternalFormat::RGB16Snorm:
|
||||||
|
case TextureInternalFormat::RGBA2:
|
||||||
|
case TextureInternalFormat::RGBA4:
|
||||||
|
case TextureInternalFormat::RGB5A1:
|
||||||
|
case TextureInternalFormat::RGBA8:
|
||||||
|
case TextureInternalFormat::RGBA8Snorm:
|
||||||
|
case TextureInternalFormat::RGB10A2:
|
||||||
|
case TextureInternalFormat::RGB10A2UI:
|
||||||
|
case TextureInternalFormat::RGBA12:
|
||||||
|
case TextureInternalFormat::RGBA16:
|
||||||
|
case TextureInternalFormat::SRGB8:
|
||||||
|
case TextureInternalFormat::SRGB8Alpha8:
|
||||||
|
case TextureInternalFormat::R16F:
|
||||||
|
case TextureInternalFormat::RG16F:
|
||||||
|
case TextureInternalFormat::RGB16F:
|
||||||
|
case TextureInternalFormat::RGBA16F:
|
||||||
|
case TextureInternalFormat::R32F:
|
||||||
|
case TextureInternalFormat::RG32F:
|
||||||
|
case TextureInternalFormat::RGB32F:
|
||||||
|
case TextureInternalFormat::RGBA32F:
|
||||||
|
case TextureInternalFormat::R11FG11FB10F:
|
||||||
|
case TextureInternalFormat::RGB9E5:
|
||||||
|
case TextureInternalFormat::R8I:
|
||||||
|
case TextureInternalFormat::R8UI:
|
||||||
|
case TextureInternalFormat::R16I:
|
||||||
|
case TextureInternalFormat::R16UI:
|
||||||
|
case TextureInternalFormat::R32I:
|
||||||
|
case TextureInternalFormat::R32UI:
|
||||||
|
case TextureInternalFormat::RG8I:
|
||||||
|
case TextureInternalFormat::RG8UI:
|
||||||
|
case TextureInternalFormat::RG16I:
|
||||||
|
case TextureInternalFormat::RG16UI:
|
||||||
|
case TextureInternalFormat::RG32I:
|
||||||
|
case TextureInternalFormat::RG32UI:
|
||||||
|
case TextureInternalFormat::RGB8I:
|
||||||
|
case TextureInternalFormat::RGB8UI:
|
||||||
|
case TextureInternalFormat::RGB16I:
|
||||||
|
case TextureInternalFormat::RGB16UI:
|
||||||
|
case TextureInternalFormat::RGB32I:
|
||||||
|
case TextureInternalFormat::RGB32UI:
|
||||||
|
case TextureInternalFormat::RGBA8I:
|
||||||
|
case TextureInternalFormat::RGBA8UI:
|
||||||
|
case TextureInternalFormat::RGBA16I:
|
||||||
|
case TextureInternalFormat::RGBA16UI:
|
||||||
|
case TextureInternalFormat::RGBA32I:
|
||||||
|
case TextureInternalFormat::RGBA32UI:
|
||||||
|
case TextureInternalFormat::DepthComponent16:
|
||||||
|
case TextureInternalFormat::DepthComponent24:
|
||||||
|
case TextureInternalFormat::DepthComponent32: // not a standard format in OpenGL core profile
|
||||||
|
case TextureInternalFormat::DepthComponent32F:
|
||||||
|
case TextureInternalFormat::Depth24Stencil8:
|
||||||
|
case TextureInternalFormat::Depth32FStencil8:
|
||||||
|
return internalformat;
|
||||||
|
// probably we should assume unorm here?
|
||||||
|
case TextureInternalFormat::RGBA: {
|
||||||
|
switch (type) {
|
||||||
|
case TexturePixelDataType::UnsignedByte:
|
||||||
|
return TextureInternalFormat::RGBA8;
|
||||||
|
case TexturePixelDataType::UnsignedShort:
|
||||||
|
return TextureInternalFormat::RGBA16;
|
||||||
|
default:
|
||||||
|
MGLOG_W("%s: Can't infer sized internal format from internalformat=%s, format=%s, type=%s, returning original.",
|
||||||
|
__func__,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(internalformat).c_str(),
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(type).c_str());
|
||||||
|
return internalformat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case TextureInternalFormat::RGB: {
|
||||||
|
switch (type) {
|
||||||
|
case TexturePixelDataType::UnsignedByte:
|
||||||
|
return TextureInternalFormat::RGB8;
|
||||||
|
default:
|
||||||
|
MGLOG_W("%s: Can't infer sized internal format from internalformat=%s, format=%s, type=%s, returning original.",
|
||||||
|
__func__,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(internalformat).c_str(),
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(type).c_str());
|
||||||
|
return internalformat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case TextureInternalFormat::RG: {
|
||||||
|
switch (type) {
|
||||||
|
case TexturePixelDataType::UnsignedByte:
|
||||||
|
return TextureInternalFormat::RG8;
|
||||||
|
case TexturePixelDataType::UnsignedShort:
|
||||||
|
return TextureInternalFormat::RG16;
|
||||||
|
default:
|
||||||
|
MGLOG_W("%s: Can't infer sized internal format from internalformat=%s, format=%s, type=%s, returning original.",
|
||||||
|
__func__,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(internalformat).c_str(),
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(type).c_str());
|
||||||
|
return internalformat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case TextureInternalFormat::Red: {
|
||||||
|
switch (type) {
|
||||||
|
case TexturePixelDataType::UnsignedByte:
|
||||||
|
return TextureInternalFormat::R8;
|
||||||
|
case TexturePixelDataType::UnsignedShort:
|
||||||
|
return TextureInternalFormat::R16;
|
||||||
|
default:
|
||||||
|
MGLOG_W("%s: Can't infer sized internal format from internalformat=%s, format=%s, type=%s, returning original.",
|
||||||
|
__func__,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(internalformat).c_str(),
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(type).c_str());
|
||||||
|
return internalformat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default: {
|
||||||
|
MGLOG_W("%s: Can't infer sized internal format from internalformat=%s, format=%s, type=%s, returning original.",
|
||||||
|
__func__,
|
||||||
|
MG_Util::ConvertTextureInternalFormatToString(internalformat).c_str(),
|
||||||
|
MG_Util::ConvertTextureInputFormatToString(format).c_str(),
|
||||||
|
MG_Util::ConvertTexturePixelDataTypeToString(type).c_str());
|
||||||
|
return internalformat;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} // namespace MG_Util
|
} // namespace MG_Util
|
||||||
} // namespace MobileGL
|
} // namespace MobileGL
|
||||||
@@ -12,5 +12,6 @@
|
|||||||
namespace MobileGL {
|
namespace MobileGL {
|
||||||
namespace MG_Util {
|
namespace MG_Util {
|
||||||
TextureTarget ConvertTextureUploadTargetToTextureTarget(TextureUploadTarget target);
|
TextureTarget ConvertTextureUploadTargetToTextureTarget(TextureUploadTarget target);
|
||||||
|
TextureInternalFormat ConvertInternalFormatToSized(TextureInternalFormat internalformat, TextureInputFormat format, TexturePixelDataType type);
|
||||||
} // namespace MG_Util
|
} // namespace MG_Util
|
||||||
} // namespace MobileGL
|
} // namespace MobileGL
|
||||||
@@ -14,7 +14,6 @@ namespace MobileGL {
|
|||||||
SizeT GetSizedInternalFormatSizeInBytes(TextureInternalFormat internal) {
|
SizeT GetSizedInternalFormatSizeInBytes(TextureInternalFormat internal) {
|
||||||
switch (internal) {
|
switch (internal) {
|
||||||
case TextureInternalFormat::R8:
|
case TextureInternalFormat::R8:
|
||||||
case TextureInternalFormat::Red:
|
|
||||||
case TextureInternalFormat::R8Snorm:
|
case TextureInternalFormat::R8Snorm:
|
||||||
case TextureInternalFormat::R8I:
|
case TextureInternalFormat::R8I:
|
||||||
case TextureInternalFormat::R8UI:
|
case TextureInternalFormat::R8UI:
|
||||||
|
|||||||
@@ -9,8 +9,7 @@
|
|||||||
#include "MG_Util/Converters/GLToStr/GLEnumConverter.h"
|
#include "MG_Util/Converters/GLToStr/GLEnumConverter.h"
|
||||||
|
|
||||||
namespace MobileGL::MG_Util::TextureFormatProcessor {
|
namespace MobileGL::MG_Util::TextureFormatProcessor {
|
||||||
void NormalizePixelFormat(GLenum internalFormat, GLenum* outInternalFormat, GLenum* outType,
|
void NormalizePixelFormat(GLenum internalFormat, GLenum* outInternalFormat, GLenum* outFormat, GLenum* outType) {
|
||||||
GLenum* outFormat) {
|
|
||||||
#ifdef TRACY_ENABLE
|
#ifdef TRACY_ENABLE
|
||||||
ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
|
ZoneScopedC(TRACY_ZONECOLOR_BACKEND);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -9,5 +9,5 @@
|
|||||||
#include <Includes.h>
|
#include <Includes.h>
|
||||||
|
|
||||||
namespace MobileGL::MG_Util::TextureFormatProcessor {
|
namespace MobileGL::MG_Util::TextureFormatProcessor {
|
||||||
void NormalizePixelFormat(GLenum internalFormat, GLenum* outInternalFormat, GLenum* outType, GLenum* outFormat);
|
void NormalizePixelFormat(GLenum internalFormat, GLenum* outInternalFormat, GLenum* outFormat, GLenum* outType);
|
||||||
} // namespace MobileGL::MG_Util::TextureFormatProcessor
|
} // namespace MobileGL::MG_Util::TextureFormatProcessor
|
||||||
Reference in New Issue
Block a user