/* ZTexture.hpp Author: James Russell Created: 04/06/2011 Purpose: Texture interface for the ZEngine. Texture instances are loaded and created by the renderer, which acts as a factory for the correct type of texture. License: TODO */ #pragma once #ifndef _ZTEXTURE_HPP #define _ZTEXTURE_HPP #include #include #include #include //Our maximum size for a texture #ifndef ZT_MAX_TEXTURE_DIMENSION #define ZT_MAX_TEXTURE_DIMENSION (8096) #endif /* Enumeration of texture types. Not all are currently supported. */ enum ZTextureType { ZTT_TEXTURE1D, //1D texture map ZTT_TEXTURE2D, //2D texture map ZTT_TEXTURE3D, //3D texture map (unsupported) ZTT_TEXTURE_CUBE, //Cubic texture map (unsupported) ZTT_SIZE }; /* Enumeration of internal storage format for texture types. */ enum ZTextureFormat { ZTF_R8, //8-bit Unsigned Red (Normalized) ZTF_R8_SNORM, //8-bit Signed Red (Normalized) ZTF_R8I, //8-bit Signed Red ZTF_R8UI, //8-bit Unsigned Red ZTF_R16, //16-bit Unsigned Red (Normalized) ZTF_R16_SNORM, //16-bit Signed Red (Normalized) ZTF_R16I, //16-bit Signed Red ZTF_R16UI, //16-bit Unsigned Red ZTF_R16F, //16-bit Floating Point Red ZTF_R32I, //32-bit Signed Red ZTF_R32UI, //32-bit Unsigned Red ZTF_R32F, //32-bit Floating Point Red ZTF_RG8, //8-bit Unsigned Red, Green (Normalized) ZTF_RG8_SNORM, //8-bit Signed Red, Green (Normalized) ZTF_RG8I, //8-bit Signed Red, Green ZTF_RG8UI, //8-bit Unsigned Red, Green ZTF_RG16, //16-bit Unsigned Red, Green (Normalized) ZTF_RG16_SNORM, //16-bit Signed Red, Green (Normalized) ZTF_RG16I, //16-bit Signed Red, Green ZTF_RG16UI, //16-bit Unsigned Red, Green ZTF_RG16F, //16-bit Floating Point Red, Green ZTF_RG32, //32-bit Unsigned Red, Green (Normalized) ZTF_RG32_SNORM, //32-bit Signed Red, Green (Normalized) ZTF_RG32I, //32-bit Signed Red, Green ZTF_RG32UI, //32-bit Unsigned Red, Green ZTF_RG32F, //32-bit Floating Point Red, Green ZTF_RGB8, //8-bit Unsigned Red, Green, Blue (Normalized) ZTF_RGB8_SNORM, //8-bit Signed Red, Green, Blue (Normalized) ZTF_RGB8I, //8-bit Signed Red, Green, Blue ZTF_RGB8UI, //8-bit Unsigned Red, Green, Blue ZTF_RGB16, //16-bit Unsigned Red, Green, Blue (Normalized) ZTF_RGB16_SNORM, //16-bit Signed Red, Green, Blue (Normalized) ZTF_RGB16I, //16-bit Signed Red, Green, Blue ZTF_RGB16UI, //16-bit Unsigned Red, Green, Blue ZTF_RGB16F, //16-bit Floating Point Red, Green, Blue ZTF_RGB32, //32-bit Unsigned Red, Green, Blue (Normalized) ZTF_RGB32_SNORM, //32-bit Signed Red, Green, Blue (Normalized) ZTF_RGB32I, //32-bit Signed Red, Green, Blue ZTF_RGB32UI, //32-bit Unsigned Red, Green, Blue ZTF_RGB32F, //32-bit Floating Point Red, Green, Blue ZTF_RGBA8, //8-bit Unsigned Red, Green, Blue, Alpha (Normalized) ZTF_RGBA8_SNORM, //8-bit Signed Red, Green, Blue, Alpha (Normalized) ZTF_RGBA8I, //8-bit Signed Red, Green, Blue, Alpha ZTF_RGBA8UI, //8-bit Unsigned Red, Green, Blue, Alpha ZTF_RGBA16, //16-bit Unsigned Red, Green, Blue, Alpha (Normalized) ZTF_RGBA16_SNORM, //16-bit Signed Red, Green, Blue, Alpha (Normalized) ZTF_RGBA16I, //16-bit Signed Red, Green, Blue, Alpha ZTF_RGBA16UI, //16-bit Unsigned Red, Green, Blue, Alpha ZTF_RGBA16F, //16-bit Floating Point Red, Green, Blue, Alpha ZTF_RGBA32, //32-bit Unsigned Red, Green, Blue, Alpha (Normalized) ZTF_RGBA32_SNORM, //32-bit Signed Red, Green, Blue, Alpha (Normalized) ZTF_RGBA32I, //32-bit Signed Red, Green, Blue, Alpha ZTF_RGBA32UI, //32-bit Unsigned Red, Green, Blue, Alpha ZTF_RGBA32F, //32-bit Floating Point Red, Green, Blue, Alpha ZTF_DEPTH16, //16-bit Depth Texture ZTF_DEPTH24, //24-bit Depth Texture ZTF_DEPTH32, //32-bit Depth Texture ZTF_DEPTH24_STENCIL8, //32-bit Depth, 8-bit Stencil ZTF_SIZE }; /* Enumeration of texture usage types. */ enum ZTextureUsage { ZTU_STATIC, //Static Texture (never or rarely updated) ZTU_DYNAMIC, //Dynamic Texture (updated frequently) ZTU_STREAMING, //Streaming Texture (updated every frame) ZTU_SIZE }; class ZTexture : public ZRendererResource { public: //Virtual Destructor virtual ~ZTexture() { } /* virtual public ZTexture::GetType Gets the type of this texture. @return (ZTextureType) - the type of texture */ virtual ZTextureType GetType() = 0; /* virtual public ZTexture::GetUsage Gets the usage type of this texture. @return (ZTextureUsage) @context (all) */ virtual ZTextureUsage GetUsage() = 0; /* public ZTexture::IsMipmapped Tells you whether or not this texture has been mipmapped. @return (bool) - true if mipmapped, false otherwise @context (all) */ virtual bool IsMipmapped() = 0; }; #endif