[Feat] (MG_Util/Converters, MG_State/Sampler, MG_State/Texture): properly implement min/mag/mip filters

This commit is contained in:
2025-11-17 13:40:34 +08:00
parent 8182d9e402
commit ff0a3c5b9a
8 changed files with 210 additions and 37 deletions
@@ -316,20 +316,30 @@ namespace MobileGL {
SamplerFilterMode ConvertGLEnumToSamplerFilterMode(GLenum v) {
switch (v) {
case GL_NEAREST:
case GL_NEAREST_MIPMAP_NEAREST:
case GL_NEAREST_MIPMAP_LINEAR:
return SamplerFilterMode::Nearest;
case GL_LINEAR:
case GL_LINEAR_MIPMAP_NEAREST:
case GL_LINEAR_MIPMAP_LINEAR:
return SamplerFilterMode::Linear;
default:
MGLOG_D("Unknown SamplerFilterMode %s", MG_Util::ConvertGLEnumToString(v).c_str());
return SamplerFilterMode::Unknown;
}
}
SamplerMipmapMode ConvertGLEnumToSamplerMipmapMode(GLenum v) {
switch (v) {
case 0:
case GL_NEAREST:
case GL_LINEAR:
return SamplerMipmapMode::None; // 无 mipmap 时
case GL_NEAREST_MIPMAP_NEAREST:
case GL_LINEAR_MIPMAP_NEAREST:
return SamplerMipmapMode::Nearest;
case GL_NEAREST_MIPMAP_LINEAR:
case GL_LINEAR_MIPMAP_LINEAR:
return SamplerMipmapMode::Linear;
default:
return SamplerMipmapMode::Unknown;
}
@@ -307,14 +307,51 @@ namespace MobileGL {
}
}
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode v) {
switch (v) {
case SamplerFilterMode::Nearest:
return GL_NEAREST;
case SamplerFilterMode::Linear:
return GL_LINEAR;
default:
return GL_UNKNOWN_MGL;
// GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode v) {
// switch (v) {
// case SamplerFilterMode::Nearest:
// return GL_NEAREST;
// case SamplerFilterMode::Linear:
// return GL_LINEAR;
// default:
// return GL_UNKNOWN_MGL;
// }
// }
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode filter, SamplerMipmapMode mipmap) {
switch (mipmap) {
case SamplerMipmapMode::None: {
switch (filter) {
case SamplerFilterMode::Nearest:
return GL_NEAREST;
case SamplerFilterMode::Linear:
return GL_LINEAR;
default:
return GL_UNKNOWN_MGL;
}
}
case SamplerMipmapMode::Nearest: {
switch (filter) {
case SamplerFilterMode::Nearest:
return GL_NEAREST_MIPMAP_NEAREST;
case SamplerFilterMode::Linear:
return GL_LINEAR_MIPMAP_NEAREST;
default:
return GL_UNKNOWN_MGL;
}
}
case SamplerMipmapMode::Linear: {
switch (filter) {
case SamplerFilterMode::Nearest:
return GL_NEAREST_MIPMAP_LINEAR;
case SamplerFilterMode::Linear:
return GL_LINEAR_MIPMAP_LINEAR;
default:
return GL_UNKNOWN_MGL;
}
}
default:
return GL_UNKNOWN_MGL;
}
}
@@ -9,8 +9,9 @@ namespace MobileGL {
GLenum ConvertTextureInternalFormatToGLEnum(TextureInternalFormat internalformat);
GLenum ConvertTexturePixelDataTypeToGLEnum(TexturePixelDataType type);
GLenum ConvertTextureUploadTargetToGLEnum(TextureUploadTarget target);
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode value);
GLenum ConvertSamplerMipmapModeToGLEnum(SamplerMipmapMode value);
// GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode value);
// GLenum ConvertSamplerMipmapModeToGLEnum(SamplerMipmapMode value);
GLenum ConvertSamplerFilterModeToGLEnum(SamplerFilterMode filter, SamplerMipmapMode mipmap);
GLenum ConvertSamplerWrapModeToGLEnum(SamplerWrapMode value);
GLenum ConvertSamplerCompareModeToGLEnum(SamplerCompareMode value);
GLenum ConvertSamplerCompareFuncToGLEnum(SamplerCompareFunc value);