3
`JZ                 @   sp  d Z ddlZddlmZ ddlmZmZ dZdZdZ	dZ
d	Zd
ZdZdZdZd	Zd
ZdZdZdZdZd
ZdZdZdZdZdZdZdZdZdZdZ eZ!eZ"eeB Z#e Z$e eB Z%eZ&eZ'ee	B e
B eB Z(eZ)eZ*eZ+eZ,e	Z-e
Z.eZ/eeB Z0eZ1eeB Z2eeB Z3eeB Z4eeB Z5eeB Z6eeB Z7dZ8dZ9dZ:dZ;dZ<dZ=G dd dejZ>d d! Z?ej@e>jAe>e? ejBe>jAd" dS )#a_  
A Pillow loader for .dds files (S3TC-compressed aka DXTC)
Jerome Leclanche <jerome@leclan.ch>

Documentation:
  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          i   i   i   i   i  @ i   i   i   i    i @  i   i        @   iDXT1iDXT3iDXT5a   b   c   c               @   s$   e Zd ZdZdZdd Zdd ZdS )DdsImageFileZDDSzDirectDraw Surfacec             C   s  t jd| jjd\}}|dkr,td| | jj|d }t|dkrXtdt| t|}t jd|jd	\}}}||f| _d
| _t jd|jd	\}}	}
t jd|jd}t jd|jd\}}|jd}t jd|jd\}}}}}|d }d}|dkrd| _	d}n|dkr&d| _	d}n|dkr<d| _	d}n|dkr|d7 }t| jjd}t jd|jd\}}|t
tfkrd| _	d}n,|tkrd| _	d"| jd< d}ntd| ntd | d!d#| j ||fg| _d S )$Nz<IIr   |   zUnsupported header size %rr   x   zIncomplete header: %s bytesz<3I   ZRGBAz<11I,   z<2Iz<5I   r   s   DXT1ZDXT1r   s   DXT3ZDXT3r   s   DXT5ZDXT5   s   DX10ZBC7   g@ZgammazUnimplemented DXGI format %dzUnimplemented pixel format %rZbcng]tE?)r   r   )structZunpackfpreadIOErrorlenr   sizemodeZpixel_formatDXGI_FORMAT_BC7_TYPELESSDXGI_FORMAT_BC7_UNORMDXGI_FORMAT_BC7_UNORM_SRGBZim_infoNotImplementedErrorZtile)selfmagicZheader_sizeZheader_bytesheaderflagsZheightwidthZpitchZdepthZmipmapsZreservedZpfsizeZpfflagsZfourccZbitcountZrmaskZgmaskZbmaskZamaskZ
data_startnZdxt10Zdxgi_formatZ	dimension r'   4/usr/lib/python3/dist-packages/PIL/DdsImagePlugin.py_openk   sV    








zDdsImageFile._openc             C   s   d S )Nr'   )r!   posr'   r'   r(   	load_seek   s    zDdsImageFile.load_seekN)__name__
__module____qualname__formatZformat_descriptionr)   r+   r'   r'   r'   r(   r   g   s   8r   c             C   s   | d d dkS )Nr   s   DDS r'   )prefixr'   r'   r(   	_validate   s    r1   z.dds)C__doc__r   ior    r   r   Z	DDS_MAGICZ	DDSD_CAPSZDDSD_HEIGHTZ
DDSD_WIDTHZ
DDSD_PITCHZDDSD_PIXELFORMATZDDSD_MIPMAPCOUNTZDDSD_LINEARSIZEZ
DDSD_DEPTHZDDSCAPS_COMPLEXZDDSCAPS_TEXTUREZDDSCAPS_MIPMAPZDDSCAPS2_CUBEMAPZDDSCAPS2_CUBEMAP_POSITIVEXZDDSCAPS2_CUBEMAP_NEGATIVEXZDDSCAPS2_CUBEMAP_POSITIVEYZDDSCAPS2_CUBEMAP_NEGATIVEYZDDSCAPS2_CUBEMAP_POSITIVEZZDDSCAPS2_CUBEMAP_NEGATIVEZZDDSCAPS2_VOLUMEZDDPF_ALPHAPIXELSZ
DDPF_ALPHAZDDPF_FOURCCZDDPF_PALETTEINDEXED8ZDDPF_RGBZDDPF_LUMINANCEZ
DDS_FOURCCZDDS_RGBZDDS_RGBAZDDS_LUMINANCEZDDS_LUMINANCEAZ	DDS_ALPHAZDDS_PAL8ZDDS_HEADER_FLAGS_TEXTUREZDDS_HEADER_FLAGS_MIPMAPZDDS_HEADER_FLAGS_VOLUMEZDDS_HEADER_FLAGS_PITCHZDDS_HEADER_FLAGS_LINEARSIZEZ
DDS_HEIGHTZ	DDS_WIDTHZDDS_SURFACE_FLAGS_TEXTUREZDDS_SURFACE_FLAGS_MIPMAPZDDS_SURFACE_FLAGS_CUBEMAPZDDS_CUBEMAP_POSITIVEXZDDS_CUBEMAP_NEGATIVEXZDDS_CUBEMAP_POSITIVEYZDDS_CUBEMAP_NEGATIVEYZDDS_CUBEMAP_POSITIVEZZDDS_CUBEMAP_NEGATIVEZZDXT1_FOURCCZDXT3_FOURCCZDXT5_FOURCCr   r   r   r   r1   Zregister_openr/   Zregister_extensionr'   r'   r'   r(   <module>   s~   
@