mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Fix] (MG_State/GLState, MG_Impl/GLImpl): track immutable texture storage [skip ci]
This commit is contained in:
@@ -162,19 +162,47 @@ namespace MobileGL {
|
||||
}
|
||||
|
||||
void TextureObjectBase::SetBaseLevel(Uint baseLevel) {
|
||||
if (IsImmutable() && m_immutableLevels > 0) {
|
||||
baseLevel = std::min(baseLevel, m_immutableLevels - 1);
|
||||
}
|
||||
if (baseLevel == m_levelRange.x()) return;
|
||||
|
||||
m_levelRange.x() = baseLevel;
|
||||
if (IsImmutable() && m_levelRange.y() < m_levelRange.x()) {
|
||||
m_levelRange.y() = m_levelRange.x();
|
||||
}
|
||||
++m_textureParamsVersion;
|
||||
}
|
||||
|
||||
void TextureObjectBase::SetMaxLevel(Uint maxLevel) {
|
||||
if (IsImmutable() && m_immutableLevels > 0) {
|
||||
maxLevel = std::min(std::max(maxLevel, m_levelRange.x()), m_immutableLevels - 1);
|
||||
}
|
||||
if (maxLevel == m_levelRange.y()) return;
|
||||
|
||||
m_levelRange.y() = maxLevel;
|
||||
++m_textureParamsVersion;
|
||||
}
|
||||
|
||||
Bool TextureObjectBase::IsImmutable() const {
|
||||
return m_immutableLevels > 0;
|
||||
}
|
||||
|
||||
Uint TextureObjectBase::GetImmutableLevels() const {
|
||||
return m_immutableLevels;
|
||||
}
|
||||
|
||||
void TextureObjectBase::SetImmutableLevels(Uint levels) {
|
||||
if (m_immutableLevels == levels) return;
|
||||
|
||||
m_immutableLevels = levels;
|
||||
if (m_immutableLevels > 0) {
|
||||
m_levelRange.x() = std::min(m_levelRange.x(), m_immutableLevels - 1);
|
||||
m_levelRange.y() = std::min(std::max(m_levelRange.y(), m_levelRange.x()), m_immutableLevels - 1);
|
||||
}
|
||||
++m_textureParamsVersion;
|
||||
}
|
||||
|
||||
Uint16 TextureObjectBase::GetTextureParamsVersion() const {
|
||||
return m_textureParamsVersion;
|
||||
}
|
||||
|
||||
@@ -43,6 +43,9 @@ namespace MobileGL::MG_State::GLState {
|
||||
virtual const UintVec2& GetLevelRange() const = 0;
|
||||
virtual void SetBaseLevel(Uint baseLevel) = 0;
|
||||
virtual void SetMaxLevel(Uint maxLevel) = 0;
|
||||
virtual Bool IsImmutable() const = 0;
|
||||
virtual Uint GetImmutableLevels() const = 0;
|
||||
virtual void SetImmutableLevels(Uint levels) = 0;
|
||||
virtual Uint16 GetTextureParamsVersion() const = 0;
|
||||
virtual Int GetSamples() const = 0;
|
||||
virtual void SetSamples(Int samples) = 0;
|
||||
@@ -79,6 +82,9 @@ namespace MobileGL::MG_State::GLState {
|
||||
const UintVec2& GetLevelRange() const override;
|
||||
void SetBaseLevel(Uint baseLevel) override;
|
||||
void SetMaxLevel(Uint maxLevel) override;
|
||||
Bool IsImmutable() const override;
|
||||
Uint GetImmutableLevels() const override;
|
||||
void SetImmutableLevels(Uint levels) override;
|
||||
Uint16 GetTextureParamsVersion() const override;
|
||||
Int GetSamples() const override;
|
||||
void SetSamples(Int samples) override;
|
||||
@@ -100,6 +106,7 @@ namespace MobileGL::MG_State::GLState {
|
||||
Vec4<TextureSwizzleParam> m_swizzleParams = {TextureSwizzleParam::Red, TextureSwizzleParam::Green,
|
||||
TextureSwizzleParam::Blue, TextureSwizzleParam::Alpha};
|
||||
UintVec2 m_levelRange = {0, 1000};
|
||||
Uint m_immutableLevels = 0;
|
||||
Uint16 m_textureParamsVersion = 0;
|
||||
Int m_samples = 0;
|
||||
Bool m_fixedSampleLocations = true;
|
||||
|
||||
Reference in New Issue
Block a user