mirror of
https://github.com/MobileGL-Dev/MobileGL
synced 2026-09-08 04:08:32 +09:00
108 lines
6.4 KiB
C++
108 lines
6.4 KiB
C++
#pragma once
|
|
#include "TextureEnum.h"
|
|
#include "TextureStorage.h"
|
|
#include "MG_Util/Types.h"
|
|
#include "../SamplerState/SamplerObject.h"
|
|
#include <Includes.h>
|
|
#include <MG_Util/Math/VectorTypes.h>
|
|
|
|
namespace MobileGL {
|
|
namespace MG_State {
|
|
namespace GLState {
|
|
class ITextureObject {
|
|
public:
|
|
using TargetEnum = TextureTarget;
|
|
virtual ~ITextureObject() = default;
|
|
|
|
virtual Uint GetMipmapLevelCount() const = 0;
|
|
virtual const IntVec3 GetMipmapTexelSize(TextureUploadTarget target, Uint mipmapLevel) const = 0;
|
|
virtual const SizeT GetMipmapByteSize(TextureUploadTarget target, Uint mipmapLevel) const = 0;
|
|
virtual void AllocateStorage(TextureUploadTarget uploadTarget, Uint mipmapLevel, MipmapInput input) = 0;
|
|
virtual void UpdateMipmapSubData(TextureUploadTarget uploadTarget, Uint mipmapLevel, DataPtr input) = 0;
|
|
virtual void* MapMipmapData(TextureUploadTarget uploadTarget, Uint mipmapLevel) = 0;
|
|
virtual void MarkStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel, bool dirty) = 0;
|
|
virtual bool IsStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel) const = 0;
|
|
|
|
virtual TextureInternalFormat GetFormat() const = 0;
|
|
virtual TextureTarget GetTarget() const = 0;
|
|
virtual const Vector<TextureUploadTarget>& GetUploadTargets() const = 0;
|
|
virtual IntVec3 GetBaseSize() const = 0;
|
|
virtual SharedPtr<SamplerObject> GetSamplerObject() const = 0;
|
|
virtual void SetInternalFormat(TextureInternalFormat format) = 0;
|
|
virtual Bool IsComplete() 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;
|
|
protected:
|
|
virtual Uint GetIndexOfTextureUploadTarget(TextureUploadTarget target) const = 0;
|
|
};
|
|
|
|
class TextureObjectBase : public ITextureObject {
|
|
public:
|
|
TextureObjectBase(TextureTarget target, Uint externalIndex);
|
|
virtual ~TextureObjectBase() = default;
|
|
|
|
// Mipmap ops
|
|
// Uint GetMipmapLevelCount() const = 0;
|
|
// const IntVec3 GetMipmapTexelSize(TextureUploadTarget target, Uint mipmapLevel) const = 0;
|
|
// const SizeT GetMipmapByteSize(TextureUploadTarget target, Uint mipmapLevel) const = 0;
|
|
// void AllocateStorage(TextureUploadTarget uploadTarget, Uint mipmapLevel, MipmapInput input) = 0;
|
|
// void UpdateMipmapSubData(TextureUploadTarget uploadTarget, Uint mipmapLevel, DataPtr input) = 0;
|
|
// void* MapMipmapData(TextureUploadTarget uploadTarget, Uint mipmapLevel) = 0;
|
|
// void MarkStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel, bool dirty) = 0;
|
|
// bool IsStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel) const = 0;
|
|
|
|
TextureInternalFormat GetFormat() const override;
|
|
TextureTarget GetTarget() const override;
|
|
IntVec3 GetBaseSize() const override;
|
|
SharedPtr<SamplerObject> GetSamplerObject() const override;
|
|
void SetInternalFormat(TextureInternalFormat format) override;
|
|
Bool IsComplete() 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:
|
|
const Uint m_externalIndex;
|
|
const TextureTarget m_target = TextureTarget::Unknown;
|
|
TextureInternalFormat m_internalFormat = TextureInternalFormat::Unknown;
|
|
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 TextureObjectWithOneMipmap: public TextureObjectBase {
|
|
public:
|
|
TextureObjectWithOneMipmap(TextureTarget target, Uint externalIndex): TextureObjectBase(target, externalIndex) {}
|
|
virtual ~TextureObjectWithOneMipmap() = default;
|
|
|
|
Uint GetMipmapLevelCount() const override;
|
|
const IntVec3 GetMipmapTexelSize(TextureUploadTarget target, Uint mipmapLevel) const override;
|
|
const SizeT GetMipmapByteSize(TextureUploadTarget target, Uint mipmapLevel) const override;
|
|
void AllocateStorage(TextureUploadTarget uploadTarget, Uint mipmapLevel, MipmapInput input) override;
|
|
void UpdateMipmapSubData(TextureUploadTarget uploadTarget, Uint mipmapLevel, DataPtr input) override;
|
|
void* MapMipmapData(TextureUploadTarget uploadTarget, Uint mipmapLevel) override;
|
|
void MarkStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel, bool dirty) override;
|
|
bool IsStorageDirty(TextureUploadTarget uploadTarget, Uint mipmapLevel) const override;
|
|
|
|
IntVec3 GetBaseSize() const override;
|
|
Bool IsComplete() const override;
|
|
protected:
|
|
TextureStorage<1> m_textureStorage;
|
|
};
|
|
} // namespace GLState
|
|
} // namespace MG_State
|
|
} // namespace MobileGL
|