il_vtf.h 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. //-----------------------------------------------------------------------------
  2. //
  3. // ImageLib Sources
  4. // Copyright (C) 2000-2009 by Denton Woods
  5. // Last modified: 02/28/2009
  6. //
  7. // Filename: src-IL/include/il_vtf.h
  8. //
  9. // Description: Reads from and writes to a Valve Texture Format (.vtf) file.
  10. // These are used in Valve's Source games. VTF specs available
  11. // from http://developer.valvesoftware.com/wiki/VTF.
  12. //
  13. //-----------------------------------------------------------------------------
  14. #ifndef VTF_H
  15. #define VTF_H
  16. #include "il_internal.h"
  17. #ifdef _MSC_VER
  18. #pragma pack(push, vtf_struct, 1)
  19. #elif defined(MACOSX) || defined(__GNUC__)
  20. #pragma pack(1)
  21. #endif
  22. typedef struct VTFHEAD
  23. {
  24. ILubyte Signature[4]; // File signature ("VTF\0").
  25. ILuint Version[2]; // version[0].version[1] (currently 7.2).
  26. ILuint HeaderSize; // Size of the header struct (16 byte aligned; currently 80 bytes).
  27. ILushort Width; // Width of the largest mipmap in pixels. Must be a power of 2.
  28. ILushort Height; // Height of the largest mipmap in pixels. Must be a power of 2.
  29. ILuint Flags; // VTF flags.
  30. ILushort Frames; // Number of frames, if animated (1 for no animation).
  31. ILushort FirstFrame; // First frame in animation (0 based).
  32. ILubyte Padding0[4]; // reflectivity padding (16 byte alignment).
  33. ILfloat Reflectivity[3]; // reflectivity vector.
  34. ILubyte Padding1[4]; // reflectivity padding (8 byte packing).
  35. ILfloat BumpmapScale; // Bumpmap scale.
  36. ILuint HighResImageFormat; // High resolution image format.
  37. ILubyte MipmapCount; // Number of mipmaps.
  38. ILuint LowResImageFormat; // Low resolution image format (always DXT1).
  39. ILubyte LowResImageWidth; // Low resolution image width.
  40. ILubyte LowResImageHeight; // Low resolution image height.
  41. ILushort Depth; // Depth of the largest mipmap in pixels.
  42. // Must be a power of 2. Can be 0 or 1 for a 2D texture (v7.2 only).
  43. } IL_PACKSTRUCT VTFHEAD;
  44. #if defined(MACOSX) || defined(__GNUC__)
  45. #pragma pack()
  46. #elif _MSC_VER
  47. #pragma pack(pop, vtf_struct)
  48. #endif
  49. enum
  50. {
  51. IMAGE_FORMAT_NONE = -1,
  52. IMAGE_FORMAT_RGBA8888 = 0,
  53. IMAGE_FORMAT_ABGR8888,
  54. IMAGE_FORMAT_RGB888,
  55. IMAGE_FORMAT_BGR888,
  56. IMAGE_FORMAT_RGB565,
  57. IMAGE_FORMAT_I8,
  58. IMAGE_FORMAT_IA88,
  59. IMAGE_FORMAT_P8,
  60. IMAGE_FORMAT_A8,
  61. IMAGE_FORMAT_RGB888_BLUESCREEN,
  62. IMAGE_FORMAT_BGR888_BLUESCREEN,
  63. IMAGE_FORMAT_ARGB8888,
  64. IMAGE_FORMAT_BGRA8888,
  65. IMAGE_FORMAT_DXT1,
  66. IMAGE_FORMAT_DXT3,
  67. IMAGE_FORMAT_DXT5,
  68. IMAGE_FORMAT_BGRX8888,
  69. IMAGE_FORMAT_BGR565,
  70. IMAGE_FORMAT_BGRX5551,
  71. IMAGE_FORMAT_BGRA4444,
  72. IMAGE_FORMAT_DXT1_ONEBITALPHA,
  73. IMAGE_FORMAT_BGRA5551,
  74. IMAGE_FORMAT_UV88,
  75. IMAGE_FORMAT_UVWQ8888,
  76. IMAGE_FORMAT_RGBA16161616F,
  77. IMAGE_FORMAT_RGBA16161616,
  78. IMAGE_FORMAT_UVLX8888
  79. };
  80. enum
  81. {
  82. TEXTUREFLAGS_POINTSAMPLE = 0x00000001,
  83. TEXTUREFLAGS_TRILINEAR = 0x00000002,
  84. TEXTUREFLAGS_CLAMPS = 0x00000004,
  85. TEXTUREFLAGS_CLAMPT = 0x00000008,
  86. TEXTUREFLAGS_ANISOTROPIC = 0x00000010,
  87. TEXTUREFLAGS_HINT_DXT5 = 0x00000020,
  88. TEXTUREFLAGS_NOCOMPRESS = 0x00000040,
  89. TEXTUREFLAGS_NORMAL = 0x00000080,
  90. TEXTUREFLAGS_NOMIP = 0x00000100,
  91. TEXTUREFLAGS_NOLOD = 0x00000200,
  92. TEXTUREFLAGS_MINMIP = 0x00000400,
  93. TEXTUREFLAGS_PROCEDURAL = 0x00000800,
  94. TEXTUREFLAGS_ONEBITALPHA = 0x00001000,
  95. TEXTUREFLAGS_EIGHTBITALPHA = 0x00002000,
  96. TEXTUREFLAGS_ENVMAP = 0x00004000,
  97. TEXTUREFLAGS_RENDERTARGET = 0x00008000,
  98. TEXTUREFLAGS_DEPTHRENDERTARGET = 0x00010000,
  99. TEXTUREFLAGS_NODEBUGOVERRIDE = 0x00020000,
  100. TEXTUREFLAGS_SINGLECOPY = 0x00040000,
  101. TEXTUREFLAGS_ONEOVERMIPLEVELINALPHA = 0x00080000,
  102. TEXTUREFLAGS_PREMULTCOLORBYONEOVERMIPLEVEL = 0x00100000,
  103. TEXTUREFLAGS_NORMALTODUDV = 0x00200000,
  104. TEXTUREFLAGS_ALPHATESTMIPGENERATION = 0x00400000,
  105. TEXTUREFLAGS_NODEPTHBUFFER = 0x00800000,
  106. TEXTUREFLAGS_NICEFILTERED = 0x01000000,
  107. TEXTUREFLAGS_CLAMPU = 0x02000000
  108. };
  109. // Internal functions
  110. ILboolean iIsValidVtf(void);
  111. ILboolean iGetVtfHead(VTFHEAD *Header);
  112. ILboolean iCheckVtf(VTFHEAD *Header);
  113. ILboolean iLoadVtfInternal(void);
  114. ILboolean VtfInitFacesMipmaps(ILimage *BaseImage, ILuint NumFaces, VTFHEAD *Header);
  115. ILboolean VtfInitMipmaps(ILimage *BaseImage, VTFHEAD *Header);
  116. ILboolean VtfReadData(void);
  117. ILboolean VtfDecompressDXT1(ILimage *Image);
  118. ILboolean VtfDecompressDXT5(ILimage *Image);
  119. ILboolean iSaveVtfInternal(void);
  120. #endif//VTF_H