mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-12 14:18:31 +09:00
[Feat] (MG_State/TextureState): Implement full texture parameter track.
This commit is contained in:
@@ -79,6 +79,66 @@ namespace MobileGL {
|
|||||||
return m_externalIndex;
|
return m_externalIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const FloatVec4& TextureObjectBase::GetBorderColor() const {
|
||||||
|
return m_borderColor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextureObjectBase::SetBorderColor(const FloatVec4& color) {
|
||||||
|
m_borderColor = color;
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureSwizzleParam TextureObjectBase::GetSwizzleParam(TextureSwizzleParam param) const {
|
||||||
|
switch (param) {
|
||||||
|
case TextureSwizzleParam::Red:
|
||||||
|
return m_swizzleParams[0];
|
||||||
|
case TextureSwizzleParam::Green:
|
||||||
|
return m_swizzleParams[1];
|
||||||
|
case TextureSwizzleParam::Blue:
|
||||||
|
return m_swizzleParams[2];
|
||||||
|
case TextureSwizzleParam::Alpha:
|
||||||
|
return m_swizzleParams[3];
|
||||||
|
default:
|
||||||
|
MGLOG_F("TextureObjectBase::GetSwizzleParam: Invalid TextureSwizzleParam: %d",
|
||||||
|
static_cast<Int>(param));
|
||||||
|
assert(false && "Invalid TextureSwizzleParam");
|
||||||
|
return TextureSwizzleParam::Red;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextureObjectBase::SetSwizzleParam(TextureSwizzleParam param, TextureSwizzleParam value) {
|
||||||
|
switch (param) {
|
||||||
|
case TextureSwizzleParam::Red:
|
||||||
|
m_swizzleParams[0] = value;
|
||||||
|
break;
|
||||||
|
case TextureSwizzleParam::Green:
|
||||||
|
m_swizzleParams[1] = value;
|
||||||
|
break;
|
||||||
|
case TextureSwizzleParam::Blue:
|
||||||
|
m_swizzleParams[2] = value;
|
||||||
|
break;
|
||||||
|
case TextureSwizzleParam::Alpha:
|
||||||
|
m_swizzleParams[3] = value;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
MGLOG_F("TextureObjectBase::SetSwizzleParam: Invalid TextureSwizzleParam: %d",
|
||||||
|
static_cast<Int>(param));
|
||||||
|
assert(false && "Invalid TextureSwizzleParam");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const UintVec2& TextureObjectBase::GetLevelRange() const {
|
||||||
|
return m_levelRange;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextureObjectBase::SetBaseLevel(Uint baseLevel) {
|
||||||
|
m_levelRange.x() = baseLevel;
|
||||||
|
}
|
||||||
|
|
||||||
|
void TextureObjectBase::SetMaxLevel(Uint maxLevel) {
|
||||||
|
m_levelRange.y() = maxLevel;
|
||||||
|
}
|
||||||
|
|
||||||
// TextureObject1D
|
// TextureObject1D
|
||||||
TextureObject1D::TextureObject1D(Uint externalIndex)
|
TextureObject1D::TextureObject1D(Uint externalIndex)
|
||||||
: TextureObjectBase(TextureTarget::Texture1D, externalIndex) {}
|
: TextureObjectBase(TextureTarget::Texture1D, externalIndex) {}
|
||||||
|
|||||||
@@ -169,6 +169,18 @@ namespace MobileGL {
|
|||||||
Unknown = -1
|
Unknown = -1
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum class TextureSwizzleParam {
|
||||||
|
Red,
|
||||||
|
Green,
|
||||||
|
Blue,
|
||||||
|
Alpha,
|
||||||
|
Zero,
|
||||||
|
One,
|
||||||
|
|
||||||
|
SwizzleParamCount,
|
||||||
|
Unknown = -1
|
||||||
|
};
|
||||||
|
|
||||||
namespace MG_State {
|
namespace MG_State {
|
||||||
namespace GLState {
|
namespace GLState {
|
||||||
struct MipmapLevelBase {
|
struct MipmapLevelBase {
|
||||||
@@ -215,6 +227,13 @@ namespace MobileGL {
|
|||||||
virtual Bool IsComplete() const = 0;
|
virtual Bool IsComplete() const = 0;
|
||||||
virtual void UnmarkMipmapDirty(Int index) = 0;
|
virtual void UnmarkMipmapDirty(Int index) = 0;
|
||||||
virtual Uint GetExternalIndex() const = 0;
|
virtual Uint GetExternalIndex() const = 0;
|
||||||
|
virtual const FloatVec4& GetBorderColor() const = 0;
|
||||||
|
virtual void SetBorderColor(const FloatVec4& color) = 0;
|
||||||
|
virtual TextureSwizzleParam GetSwizzleParam(TextureSwizzleParam param) const = 0;
|
||||||
|
virtual void SetSwizzleParam(TextureSwizzleParam param, TextureSwizzleParam value) = 0;
|
||||||
|
virtual const UintVec2& GetLevelRange() const = 0;
|
||||||
|
virtual void SetBaseLevel(Uint baseLevel) = 0;
|
||||||
|
virtual void SetMaxLevel(Uint maxLevel) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextureObjectBase : public ITextureObject {
|
class TextureObjectBase : public ITextureObject {
|
||||||
@@ -233,6 +252,13 @@ namespace MobileGL {
|
|||||||
Bool IsComplete() const override;
|
Bool IsComplete() const override;
|
||||||
void UnmarkMipmapDirty(Int index) override;
|
void UnmarkMipmapDirty(Int index) override;
|
||||||
Uint GetExternalIndex() const override;
|
Uint GetExternalIndex() const override;
|
||||||
|
const FloatVec4& GetBorderColor() const override;
|
||||||
|
void SetBorderColor(const FloatVec4& color) override;
|
||||||
|
TextureSwizzleParam GetSwizzleParam(TextureSwizzleParam param) const override;
|
||||||
|
void SetSwizzleParam(TextureSwizzleParam param, TextureSwizzleParam value) override;
|
||||||
|
const UintVec2& GetLevelRange() const override;
|
||||||
|
void SetBaseLevel(Uint baseLevel) override;
|
||||||
|
void SetMaxLevel(Uint maxLevel) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void SetMipmapImpl(const MipmapLevelInput& level) = 0;
|
virtual void SetMipmapImpl(const MipmapLevelInput& level) = 0;
|
||||||
@@ -242,6 +268,10 @@ namespace MobileGL {
|
|||||||
TextureInternalFormat m_internalFormat = TextureInternalFormat::Unknown;
|
TextureInternalFormat m_internalFormat = TextureInternalFormat::Unknown;
|
||||||
Vector<MipmapLevelInternal> m_mipmaps = {};
|
Vector<MipmapLevelInternal> m_mipmaps = {};
|
||||||
SharedPtr<SamplerObject> m_sampler = nullptr;
|
SharedPtr<SamplerObject> m_sampler = nullptr;
|
||||||
|
FloatVec4 m_borderColor = {0.0f, 0.0f, 0.0f, 0.0f};
|
||||||
|
TextureSwizzleParam m_swizzleParams[4] = {TextureSwizzleParam::Red, TextureSwizzleParam::Green,
|
||||||
|
TextureSwizzleParam::Blue, TextureSwizzleParam::Alpha};
|
||||||
|
UintVec2 m_levelRange = {0, 1000};
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextureObject1D : public TextureObjectBase {
|
class TextureObject1D : public TextureObjectBase {
|
||||||
|
|||||||
Reference in New Issue
Block a user