mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-11 13:48:30 +09:00
[Feat] (MG_State/TextureObject): implement GetIndexOfTextureUploadTarget()
This commit is contained in:
@@ -20,7 +20,9 @@ namespace MobileGL {
|
|||||||
// Don't tinker with order in this enum
|
// Don't tinker with order in this enum
|
||||||
// it is used in TextureStorage
|
// it is used in TextureStorage
|
||||||
enum class TextureUploadTarget {
|
enum class TextureUploadTarget {
|
||||||
|
Texture1D,
|
||||||
Texture2D,
|
Texture2D,
|
||||||
|
Texture3D,
|
||||||
ProxyTexture2D,
|
ProxyTexture2D,
|
||||||
Texture1DArray,
|
Texture1DArray,
|
||||||
ProxyTexture1DArray,
|
ProxyTexture1DArray,
|
||||||
|
|||||||
@@ -15,34 +15,34 @@ namespace MobileGL {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const IntVec3 TextureObjectBase::GetMipmapTexelSize(TextureUploadTarget target, Uint mipmapLevel) const {
|
const IntVec3 TextureObjectBase::GetMipmapTexelSize(TextureUploadTarget target, Uint mipmapLevel) const {
|
||||||
return m_textureStorage.GetTexelSize(0, mipmapLevel);
|
return m_textureStorage.GetTexelSize(GetIndexOfTextureUploadTarget(target), mipmapLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
const SizeT TextureObjectBase::GetMipmapByteSize(TextureUploadTarget target, Uint mipmapLevel) const {
|
const SizeT TextureObjectBase::GetMipmapByteSize(TextureUploadTarget target, Uint mipmapLevel) const {
|
||||||
return m_textureStorage.GetByteSize(0, mipmapLevel);
|
return m_textureStorage.GetByteSize(GetIndexOfTextureUploadTarget(target), mipmapLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureObjectBase::AllocateStorage(TextureUploadTarget uploadTarget, Uint mipmapLevel,
|
void TextureObjectBase::AllocateStorage(TextureUploadTarget uploadTarget, Uint mipmapLevel,
|
||||||
MipmapInput input) {
|
MipmapInput input) {
|
||||||
// don't care target, index always 0
|
// don't care target, index always 0
|
||||||
m_textureStorage.AllocateLevel(0, mipmapLevel, input);
|
m_textureStorage.AllocateLevel(GetIndexOfTextureUploadTarget(uploadTarget), mipmapLevel, input);
|
||||||
}
|
}
|
||||||
void TextureObjectBase::UpdateMipmapSubData(TextureUploadTarget uploadTarget, Uint mipmapLevel,
|
void TextureObjectBase::UpdateMipmapSubData(TextureUploadTarget uploadTarget, Uint mipmapLevel,
|
||||||
DataPtr input) {
|
DataPtr input) {
|
||||||
// ditto
|
// ditto
|
||||||
m_textureStorage.UpdateSubData(0, mipmapLevel, input);
|
m_textureStorage.UpdateSubData(GetIndexOfTextureUploadTarget(uploadTarget), mipmapLevel, input);
|
||||||
}
|
}
|
||||||
void* TextureObjectBase::MapMipmapData(TextureUploadTarget uploadTarget, Uint mipmapLevel) {
|
void* TextureObjectBase::MapMipmapData(TextureUploadTarget uploadTarget, Uint mipmapLevel) {
|
||||||
return m_textureStorage.MapData(0, mipmapLevel);
|
return m_textureStorage.MapData(GetIndexOfTextureUploadTarget(uploadTarget), mipmapLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextureObjectBase::MarkStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel, bool dirty) {
|
void TextureObjectBase::MarkStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel, bool dirty) {
|
||||||
// ditto
|
// ditto
|
||||||
m_textureStorage.MarkDirty(0, mipmapLevel, dirty);
|
m_textureStorage.MarkDirty(GetIndexOfTextureUploadTarget(uploadTarget), mipmapLevel, dirty);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TextureObjectBase::IsStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel) const {
|
bool TextureObjectBase::IsStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel) const {
|
||||||
return m_textureStorage.IsDirty(0, mipmapLevel);
|
return m_textureStorage.IsDirty(GetIndexOfTextureUploadTarget(uploadTarget), mipmapLevel);
|
||||||
}
|
}
|
||||||
|
|
||||||
// void TextureObjectBase::SetMipmapLevel(const MipmapLevelInput& level) {
|
// void TextureObjectBase::SetMipmapLevel(const MipmapLevelInput& level) {
|
||||||
|
|||||||
@@ -71,6 +71,8 @@ namespace MobileGL {
|
|||||||
virtual const UintVec2& GetLevelRange() const = 0;
|
virtual const UintVec2& GetLevelRange() const = 0;
|
||||||
virtual void SetBaseLevel(Uint baseLevel) = 0;
|
virtual void SetBaseLevel(Uint baseLevel) = 0;
|
||||||
virtual void SetMaxLevel(Uint maxLevel) = 0;
|
virtual void SetMaxLevel(Uint maxLevel) = 0;
|
||||||
|
protected:
|
||||||
|
virtual Uint GetIndexOfTextureUploadTarget(TextureUploadTarget target) const = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class TextureObjectBase : public ITextureObject {
|
class TextureObjectBase : public ITextureObject {
|
||||||
|
|||||||
@@ -6,6 +6,11 @@ namespace MobileGL {
|
|||||||
TextureObject1D::TextureObject1D(Uint externalIndex)
|
TextureObject1D::TextureObject1D(Uint externalIndex)
|
||||||
: TextureObjectBase(TextureTarget::Texture1D, externalIndex) {}
|
: TextureObjectBase(TextureTarget::Texture1D, externalIndex) {}
|
||||||
|
|
||||||
|
Uint TextureObject1D::GetIndexOfTextureUploadTarget(TextureUploadTarget target) const {
|
||||||
|
MOBILEGL_ASSERT(target == TextureUploadTarget::Texture1D, "Invalid TextureUploadTarget!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// void TextureObject1D::SetMipmapImpl(const MipmapLevelInput& level) {
|
// void TextureObject1D::SetMipmapImpl(const MipmapLevelInput& level) {
|
||||||
// if (level.size.x() > 0) {
|
// if (level.size.x() > 0) {
|
||||||
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ namespace MobileGL {
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
||||||
|
Uint GetIndexOfTextureUploadTarget(TextureUploadTarget target) const override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ namespace MobileGL {
|
|||||||
TextureObject2D::TextureObject2D(Uint externalIndex)
|
TextureObject2D::TextureObject2D(Uint externalIndex)
|
||||||
: TextureObjectBase(TextureTarget::Texture2D, externalIndex) {}
|
: TextureObjectBase(TextureTarget::Texture2D, externalIndex) {}
|
||||||
|
|
||||||
|
Uint TextureObject2D::GetIndexOfTextureUploadTarget(TextureUploadTarget target) const {
|
||||||
|
MOBILEGL_ASSERT(target == TextureUploadTarget::Texture1D, "Invalid TextureUploadTarget!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// void TextureObject2D::SetMipmapImpl(const MipmapLevelInput& level) {
|
// void TextureObject2D::SetMipmapImpl(const MipmapLevelInput& level) {
|
||||||
// if (level.size.x() > 0 && level.size.y() > 0) {
|
// if (level.size.x() > 0 && level.size.y() > 0) {
|
||||||
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace MobileGL {
|
|||||||
explicit TextureObject2D(Uint externalIndex);
|
explicit TextureObject2D(Uint externalIndex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Uint GetIndexOfTextureUploadTarget(TextureUploadTarget target) const override;
|
||||||
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ namespace MobileGL {
|
|||||||
TextureObject3D::TextureObject3D(Uint externalIndex)
|
TextureObject3D::TextureObject3D(Uint externalIndex)
|
||||||
: TextureObjectBase(TextureTarget::Texture3D, externalIndex) {}
|
: TextureObjectBase(TextureTarget::Texture3D, externalIndex) {}
|
||||||
|
|
||||||
|
Uint TextureObject3D::GetIndexOfTextureUploadTarget(TextureUploadTarget target) const {
|
||||||
|
MOBILEGL_ASSERT(target == TextureUploadTarget::Texture3D, "Invalid TextureUploadTarget!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
// void TextureObject3D::SetMipmapImpl(const MipmapLevelInput& level) {
|
// void TextureObject3D::SetMipmapImpl(const MipmapLevelInput& level) {
|
||||||
// if (level.size.x() > 0 && level.size.y() > 0 && level.size.z() > 0) {
|
// if (level.size.x() > 0 && level.size.y() > 0 && level.size.z() > 0) {
|
||||||
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
// m_mipmaps.push_back(MipmapLevelInternal(level));
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ namespace MobileGL {
|
|||||||
explicit TextureObject3D(Uint externalIndex);
|
explicit TextureObject3D(Uint externalIndex);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
Uint GetIndexOfTextureUploadTarget(TextureUploadTarget target) const override;
|
||||||
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
// void SetMipmapImpl(const MipmapLevelInput& level) override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -278,9 +278,13 @@ namespace MobileGL {
|
|||||||
|
|
||||||
TextureUploadTarget ConvertGLEnumToTextureUploadTarget(GLenum target) {
|
TextureUploadTarget ConvertGLEnumToTextureUploadTarget(GLenum target) {
|
||||||
switch (target) {
|
switch (target) {
|
||||||
|
case GL_TEXTURE_1D:
|
||||||
|
return TextureUploadTarget::Texture1D;
|
||||||
case GL_TEXTURE_2D:
|
case GL_TEXTURE_2D:
|
||||||
return TextureUploadTarget::Texture2D;
|
return TextureUploadTarget::Texture2D;
|
||||||
case GL_PROXY_TEXTURE_2D:
|
case GL_TEXTURE_3D:
|
||||||
|
return TextureUploadTarget::Texture3D;
|
||||||
|
case GL_PROXY_TEXTURE_2D:
|
||||||
return TextureUploadTarget::ProxyTexture2D;
|
return TextureUploadTarget::ProxyTexture2D;
|
||||||
case GL_TEXTURE_1D_ARRAY:
|
case GL_TEXTURE_1D_ARRAY:
|
||||||
return TextureUploadTarget::Texture1DArray;
|
return TextureUploadTarget::Texture1DArray;
|
||||||
|
|||||||
@@ -274,6 +274,10 @@ namespace MobileGL {
|
|||||||
switch (target) {
|
switch (target) {
|
||||||
case TextureUploadTarget::Texture2D:
|
case TextureUploadTarget::Texture2D:
|
||||||
return GL_TEXTURE_2D;
|
return GL_TEXTURE_2D;
|
||||||
|
case TextureUploadTarget::Texture1D:
|
||||||
|
return GL_TEXTURE_1D;
|
||||||
|
case TextureUploadTarget::Texture3D:
|
||||||
|
return GL_TEXTURE_3D;
|
||||||
case TextureUploadTarget::ProxyTexture2D:
|
case TextureUploadTarget::ProxyTexture2D:
|
||||||
return GL_PROXY_TEXTURE_2D;
|
return GL_PROXY_TEXTURE_2D;
|
||||||
case TextureUploadTarget::Texture1DArray:
|
case TextureUploadTarget::Texture1DArray:
|
||||||
|
|||||||
Reference in New Issue
Block a user