3 }\@spdZddlZddlmZddlmZmZdZdZdZ dZ d Z d Z d Z d Zd Zd Zd ZdZdZdZdZd ZdZdZdZdZdZdZdZdZdZd Z eZ!eZ"eeBZ#e Z$e eBZ%eZ&eZ'ee Be Be BZ(e Z)eZ*e Z+eZ,e Z-e Z.eZ/eeBZ0eZ1eeBZ2eeBZ3eeBZ4eeBZ5eeBZ6eeBZ7dZ8dZ9dZ:dZ;dZd d!Z?ej@e>jAe>e?ejBe>jAd"dS)#a A Pillow loader for .dds files (S3TC-compressed aka DXTC) Jerome Leclanche Documentation: https://web.archive.org/web/20170802060935/http://oss.sgi.com/projects/ogl-sample/registry/EXT/texture_compression_s3tc.txt The contents of this file are hereby released in the public domain (CC0) Full text of the CC0 license: https://creativecommons.org/publicdomain/zero/1.0/ N)BytesIO)Image ImageFileiDDS iiiii@iiii i@ii @iDXT1iDXT3iDXT5abcc@s$eZdZdZdZddZddZdS) DdsImageFileZDDSzDirectDraw SurfacecCs\tjd|jjd\}}|dkr,td||jj|d}t|dkrXtdt|t|}tjd|jd \}}}||f|_d |_tjd|jd \}} } tjd |jd tjd |jd\} } |jd} tjd|jd\}tjd|jd}| d@rhddt |D}d}|dkr.||d7}||d|d|d7}dd.|j d|ddffg|_ n|d}d}| dkrd|_ d}n| dkrd |_ d!}n| d"krd#|_ d$}n| d%kr6|d&7}t|jjd&}tjd|jd\}}|t tfkrd'|_ d(}n,|tkr(d'|_ d/|jd*<d(}n td+|n td,| d-d0|j ||fg|_ dS)1Nzsz&DdsImageFile._open..r l~iirawrrsDXT1ZDXT1sDXT3ZDXT3rsDXT5ZDXT5sDX10ZBC7g@gammazUnimplemented DXGI format %dzUnimplemented pixel format %rZbcn)rrg]tE?)rr)structunpackfpreadIOErrorlenr_sizemode enumeratesizeZtileZ pixel_formatDXGI_FORMAT_BC7_TYPELESSDXGI_FORMAT_BC7_UNORMDXGI_FORMAT_BC7_UNORM_SRGBZim_infoNotImplementedError)selfmagicZ header_size header_bytesheaderflagsheightwidthZpitchdepthZmipmapsZpfsizeZpfflagsZfourccZbitcountmasksrawmodeZ data_startnZdxt10Z dxgi_formatZ dimensionrrr_openksf               zDdsImageFile._opencCsdS)Nr)r3posrrr load_seekszDdsImageFile.load_seekN)__name__ __module__ __qualname__formatformat_descriptionr>r@rrrrrgsBrcCs|dddkS)NrsDDS r)prefixrrr _validatesrGz.dds)C__doc__r%iorrrrZ DDS_MAGICZ DDSD_CAPSZ DDSD_HEIGHTZ DDSD_WIDTHZ DDSD_PITCHZDDSD_PIXELFORMATZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ DDSD_DEPTHZDDSCAPS_COMPLEXZDDSCAPS_TEXTUREZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMEZDDPF_ALPHAPIXELSZ DDPF_ALPHAZ DDPF_FOURCCZDDPF_PALETTEINDEXED8ZDDPF_RGBZDDPF_LUMINANCEZ DDS_FOURCCZDDS_RGBZDDS_RGBAZ DDS_LUMINANCEZDDS_LUMINANCEAZ DDS_ALPHAZDDS_PAL8ZDDS_HEADER_FLAGS_TEXTUREZDDS_HEADER_FLAGS_MIPMAPZDDS_HEADER_FLAGS_VOLUMEZDDS_HEADER_FLAGS_PITCHZDDS_HEADER_FLAGS_LINEARSIZEZ DDS_HEIGHTZ DDS_WIDTHZDDS_SURFACE_FLAGS_TEXTUREZDDS_SURFACE_FLAGS_MIPMAPZDDS_SURFACE_FLAGS_CUBEMAPZDDS_CUBEMAP_POSITIVEXZDDS_CUBEMAP_NEGATIVEXZDDS_CUBEMAP_POSITIVEYZDDS_CUBEMAP_NEGATIVEYZDDS_CUBEMAP_POSITIVEZZDDS_CUBEMAP_NEGATIVEZZ DXT1_FOURCCZ DXT3_FOURCCZ DXT5_FOURCCr/r0r1rrGZ register_openrDZregister_extensionrrrr s~  J