[Feat] (MG_State/SamplerState): Uniform SamplerParameters.

This commit is contained in:
BZLZHH
2025-11-16 00:43:23 +08:00
parent 60bb091927
commit 850081d313
2 changed files with 42 additions and 36 deletions
@@ -3,106 +3,103 @@
namespace MobileGL { namespace MobileGL {
namespace MG_State { namespace MG_State {
namespace GLState { namespace GLState {
SamplerObject::SamplerObject(Uint externalIndex) : m_externalIndex(externalIndex) {}
SamplerObject::SamplerObject(Uint externalIndex)
: m_externalIndex(externalIndex), m_wrapS(SamplerWrapMode::Repeat), m_wrapT(SamplerWrapMode::Repeat),
m_wrapR(SamplerWrapMode::Repeat), m_minFilter(SamplerFilterMode::Linear),
m_magFilter(SamplerFilterMode::Linear), m_mipmapMode(SamplerMipmapMode::None), m_minLod(0.0f),
m_maxLod(1000.0f), m_lodBias(0.0f), m_compareMode(SamplerCompareMode::None),
m_compareFunc(SamplerCompareFunc::Less) {}
void SamplerObject::SetWrapS(SamplerWrapMode mode) { void SamplerObject::SetWrapS(SamplerWrapMode mode) {
m_wrapS = mode; m_samplerParameters.wrapS = mode;
} }
void SamplerObject::SetWrapT(SamplerWrapMode mode) { void SamplerObject::SetWrapT(SamplerWrapMode mode) {
m_wrapT = mode; m_samplerParameters.wrapT = mode;
} }
void SamplerObject::SetWrapR(SamplerWrapMode mode) { void SamplerObject::SetWrapR(SamplerWrapMode mode) {
m_wrapR = mode; m_samplerParameters.wrapR = mode;
} }
void SamplerObject::SetMinFilter(SamplerFilterMode mode) { void SamplerObject::SetMinFilter(SamplerFilterMode mode) {
m_minFilter = mode; m_samplerParameters.minFilter = mode;
} }
void SamplerObject::SetMagFilter(SamplerFilterMode mode) { void SamplerObject::SetMagFilter(SamplerFilterMode mode) {
m_magFilter = mode; m_samplerParameters.magFilter = mode;
} }
void SamplerObject::SetMipmapMode(SamplerMipmapMode mode) { void SamplerObject::SetMipmapMode(SamplerMipmapMode mode) {
m_mipmapMode = mode; m_samplerParameters.mipmapMode = mode;
} }
void SamplerObject::SetLodRange(Float minLod, Float maxLod) { void SamplerObject::SetLodRange(Float minLod, Float maxLod) {
if (minLod > maxLod) { if (minLod > maxLod) {
THROW_EXCEPTION("minLod cannot be greater than maxLod"); THROW_EXCEPTION("minLod cannot be greater than maxLod");
} }
m_minLod = minLod; m_samplerParameters.minLod = minLod;
m_maxLod = maxLod; m_samplerParameters.maxLod = maxLod;
} }
void SamplerObject::SetLodBias(Float bias) { void SamplerObject::SetLodBias(Float bias) {
m_lodBias = bias; m_samplerParameters.lodBias = bias;
} }
void SamplerObject::SetSamplerCompareFunc(SamplerCompareFunc func) { void SamplerObject::SetSamplerCompareFunc(SamplerCompareFunc func) {
m_compareFunc = func; m_samplerParameters.compareFunc = func;
} }
void SamplerObject::SetCompareMode(SamplerCompareMode mode) { void SamplerObject::SetCompareMode(SamplerCompareMode mode) {
m_compareMode = mode; m_samplerParameters.compareMode = mode;
} }
SamplerWrapMode SamplerObject::GetWrapS() const { SamplerWrapMode SamplerObject::GetWrapS() const {
return m_wrapS; return m_samplerParameters.wrapS;
} }
SamplerWrapMode SamplerObject::GetWrapT() const { SamplerWrapMode SamplerObject::GetWrapT() const {
return m_wrapT; return m_samplerParameters.wrapT;
} }
SamplerWrapMode SamplerObject::GetWrapR() const { SamplerWrapMode SamplerObject::GetWrapR() const {
return m_wrapR; return m_samplerParameters.wrapR;
} }
SamplerFilterMode SamplerObject::GetMinFilter() const { SamplerFilterMode SamplerObject::GetMinFilter() const {
return m_minFilter; return m_samplerParameters.minFilter;
} }
SamplerFilterMode SamplerObject::GetMagFilter() const { SamplerFilterMode SamplerObject::GetMagFilter() const {
return m_magFilter; return m_samplerParameters.magFilter;
} }
SamplerMipmapMode SamplerObject::GetMipmapMode() const { SamplerMipmapMode SamplerObject::GetMipmapMode() const {
return m_mipmapMode; return m_samplerParameters.mipmapMode;
} }
Float SamplerObject::GetMinLod() const { Float SamplerObject::GetMinLod() const {
return m_minLod; return m_samplerParameters.minLod;
} }
Float SamplerObject::GetMaxLod() const { Float SamplerObject::GetMaxLod() const {
return m_maxLod; return m_samplerParameters.maxLod;
} }
Float SamplerObject::GetLodBias() const { Float SamplerObject::GetLodBias() const {
return m_lodBias; return m_samplerParameters.lodBias;
} }
SamplerCompareMode SamplerObject::GetCompareMode() const { SamplerCompareMode SamplerObject::GetCompareMode() const {
return m_compareMode; return m_samplerParameters.compareMode;
} }
SamplerCompareFunc SamplerObject::GetSamplerCompareFunc() const { SamplerCompareFunc SamplerObject::GetSamplerCompareFunc() const {
return m_compareFunc; return m_samplerParameters.compareFunc;
} }
Uint SamplerObject::GetExternalIndex() const { Uint SamplerObject::GetExternalIndex() const {
return m_externalIndex; return m_externalIndex;
} }
const SamplerParameters& SamplerObject::GetAllSamplerParameters() const {
return m_samplerParameters;
}
} // namespace GLState } // namespace GLState
} // namespace MG_State } // namespace MG_State
} // namespace MobileGL } // namespace MobileGL
@@ -45,6 +45,20 @@ namespace MobileGL {
Unknown = -1 Unknown = -1
}; };
struct SamplerParameters {
SamplerWrapMode wrapS = SamplerWrapMode::Repeat;
SamplerWrapMode wrapT = SamplerWrapMode::Repeat;
SamplerWrapMode wrapR = SamplerWrapMode::Repeat;
SamplerFilterMode minFilter = SamplerFilterMode::Linear;
SamplerFilterMode magFilter = SamplerFilterMode::Linear;
SamplerMipmapMode mipmapMode = SamplerMipmapMode::None;
Float minLod = -1000.0f;
Float maxLod = 1000.0f;
Float lodBias = 0.0f;
SamplerCompareFunc compareFunc = SamplerCompareFunc::Always;
SamplerCompareMode compareMode = SamplerCompareMode::None;
};
namespace MG_State { namespace MG_State {
namespace GLState { namespace GLState {
class SamplerObject { class SamplerObject {
@@ -74,16 +88,11 @@ namespace MobileGL {
SamplerCompareMode GetCompareMode() const; SamplerCompareMode GetCompareMode() const;
SamplerCompareFunc GetSamplerCompareFunc() const; SamplerCompareFunc GetSamplerCompareFunc() const;
Uint GetExternalIndex() const; Uint GetExternalIndex() const;
const SamplerParameters& GetAllSamplerParameters() const;
private: private:
const Uint m_externalIndex; const Uint m_externalIndex;
SamplerWrapMode m_wrapS, m_wrapT, m_wrapR; SamplerParameters m_samplerParameters;
SamplerFilterMode m_minFilter, m_magFilter;
SamplerMipmapMode m_mipmapMode;
Float m_minLod, m_maxLod;
Float m_lodBias;
SamplerCompareMode m_compareMode;
SamplerCompareFunc m_compareFunc;
}; };
} // namespace GLState } // namespace GLState
} // namespace MG_State } // namespace MG_State