mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 21:58:31 +09:00
[Feat] (MG_Util/Converters, MG_State/Sampler, MG_State/Texture): properly implement min/mag/mip filters
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user