diff --git a/trunk/src/nvimage/ValveTextureFormat.h b/trunk/src/nvimage/ValveTextureFormat.h new file mode 100644 index 0000000..7b62ef7 --- /dev/null +++ b/trunk/src/nvimage/ValveTextureFormat.h @@ -0,0 +1,122 @@ + +/* +For more info: +http://developer.valvesoftware.com/wiki/VTF + +File Layout: + VTF Header + VTF Low Resolution Image Data + For Each Mipmap (Smallest to Largest) + For Each Frame (First to Last) + For Each Face (First to Last) + For Each Z Slice (Min to Max; Varies with Mipmap) + VTF High Resolution Image Data + + +*/ + + +enum +{ + IMAGE_FORMAT_NONE = -1, + IMAGE_FORMAT_RGBA8888 = 0, + IMAGE_FORMAT_ABGR8888, + IMAGE_FORMAT_RGB888, + IMAGE_FORMAT_BGR888, + IMAGE_FORMAT_RGB565, + IMAGE_FORMAT_I8, + IMAGE_FORMAT_IA88, + IMAGE_FORMAT_P8, + IMAGE_FORMAT_A8, + IMAGE_FORMAT_RGB888_BLUESCREEN, + IMAGE_FORMAT_BGR888_BLUESCREEN, + IMAGE_FORMAT_ARGB8888, + IMAGE_FORMAT_BGRA8888, + IMAGE_FORMAT_DXT1, + IMAGE_FORMAT_DXT3, + IMAGE_FORMAT_DXT5, + IMAGE_FORMAT_BGRX8888, + IMAGE_FORMAT_BGR565, + IMAGE_FORMAT_BGRX5551, + IMAGE_FORMAT_BGRA4444, + IMAGE_FORMAT_DXT1_ONEBITALPHA, + IMAGE_FORMAT_BGRA5551, + IMAGE_FORMAT_UV88, + IMAGE_FORMAT_UVWQ8888, + IMAGE_FORMAT_RGBA16161616F, + IMAGE_FORMAT_RGBA16161616, + IMAGE_FORMAT_UVLX8888, + IMAGE_FORMAT_R32F, //!< = Luminance - 32 bpp + IMAGE_FORMAT_RGB323232F, //!< = Red, Green, Blue - 96 bpp + IMAGE_FORMAT_RGBA32323232F, //!< = Red, Green, Blue, Alpha - 128 bpp + IMAGE_FORMAT_NV_DST16, + IMAGE_FORMAT_NV_DST24, + IMAGE_FORMAT_NV_INTZ, + IMAGE_FORMAT_NV_RAWZ, + IMAGE_FORMAT_ATI_DST16, + IMAGE_FORMAT_ATI_DST24, + IMAGE_FORMAT_NV_NULL, + IMAGE_FORMAT_ATI2N, + IMAGE_FORMAT_ATI1N, +}; + + +enum +{ + TEXTUREFLAGS_POINTSAMPLE = 0x00000001, + TEXTUREFLAGS_TRILINEAR = 0x00000002, + TEXTUREFLAGS_CLAMPS = 0x00000004, + TEXTUREFLAGS_CLAMPT = 0x00000008, + TEXTUREFLAGS_ANISOTROPIC = 0x00000010, + TEXTUREFLAGS_HINT_DXT5 = 0x00000020, + TEXTUREFLAGS_NOCOMPRESS = 0x00000040, + TEXTUREFLAGS_NORMAL = 0x00000080, + TEXTUREFLAGS_NOMIP = 0x00000100, + TEXTUREFLAGS_NOLOD = 0x00000200, + TEXTUREFLAGS_MINMIP = 0x00000400, + TEXTUREFLAGS_PROCEDURAL = 0x00000800, + TEXTUREFLAGS_ONEBITALPHA = 0x00001000, + TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000, + TEXTUREFLAGS_ENVMAP = 0x00004000, + TEXTUREFLAGS_RENDERTARGET = 0x00008000, + TEXTUREFLAGS_DEPTHRENDERTARGET = 0x00010000, + TEXTUREFLAGS_NODEBUGOVERRIDE = 0x00020000, + TEXTUREFLAGS_SINGLECOPY = 0x00040000, + TEXTUREFLAGS_ONEOVERMIPLEVELINALPHA = 0x00080000, + TEXTUREFLAGS_PREMULTCOLORBYONEOVERMIPLEVEL = 0x00100000, + TEXTUREFLAGS_NORMALTODUDV = 0x00200000, + TEXTUREFLAGS_ALPHATESTMIPGENERATION = 0x00400000, + TEXTUREFLAGS_NODEPTHBUFFER = 0x00800000, + TEXTUREFLAGS_NICEFILTERED = 0x01000000, + TEXTUREFLAGS_CLAMPU = 0x02000000 +}; + + +struct VtfHeader +{ + char signature[4]; // File signature ("VTF\0"). + uint32 version[2]; // version[0].version[1] (currently 7.2). + uint32 headerSize; // Size of the header struct (16 byte aligned; currently 80 bytes). + + // 7.0 + uint16 width; // Width of the largest mipmap in pixels. Must be a power of 2. + uint16 height; // Height of the largest mipmap in pixels. Must be a power of 2. + uint32 flags; // VTF flags. + uint16 frames; // Number of frames, if animated (1 for no animation). + uint16 firstFrame; // First frame in animation (0 based). + uint8 padding0[4]; // reflectivity padding (16 byte alignment). + float reflectivity[3]; // reflectivity vector. + uint8 padding1[4]; // reflectivity padding (8 byte packing). + float bumpmapScale; // Bumpmap scale. + uint32 highResImageFormat; // High resolution image format. + uint8 mipmapCount; // Number of mipmaps. + uint32 lowResImageFormat; // Low resolution image format (always DXT1). + uint8 lowResImageWidth; // Low resolution image width. + uint8 lowResImageHeight; // Low resolution image height. + + // 7.2 + uint16 depth; // Depth of the largest mipmap in pixels. + // Must be a power of 2. Can be 0 or 1 for a 2D texture (v7.2 only). +}; + +