亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? plugindds.cpp

?? 一款最完整的工業組態軟源代碼
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ==========================================================
// DDS Loader
//
// Design and implementation by
// - Volker G鋜tner (volkerg@gmx.at)
//
// This file is part of FreeImage 3
//
// COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
// THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE
// OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED
// CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT
// THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
// SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL
// PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER
// THIS DISCLAIMER.
//
// Use at your own risk!
// ==========================================================

#include "FreeImage.h"
#include "Utilities.h"

// ----------------------------------------------------------
//   Definitions for the DDS format
// ----------------------------------------------------------

#ifdef WIN32
#pragma pack(push, 1)
#else
#pragma pack(1)
#endif

typedef struct tagDDPIXELFORMAT {
	DWORD dwSize;	// size of this structure (must be 32)
	DWORD dwFlags;	// see DDPF_*
	DWORD dwFourCC;
	DWORD dwRGBBitCount;	// Total number of bits for RGB formats
	DWORD dwRBitMask;
	DWORD dwGBitMask;
	DWORD dwBBitMask;
	DWORD dwRGBAlphaBitMask;
} DDPIXELFORMAT;

// DIRECTDRAW PIXELFORMAT FLAGS
enum {
	DDPF_ALPHAPIXELS = 0x00000001l,	// surface has alpha channel
	DDPF_ALPHA		 = 0x00000002l,	// alpha only
	DDPF_FOURCC		 = 0x00000004l,	// FOURCC available
	DDPF_RGB		 = 0x00000040l	// RGB(A) bitmap
};

typedef struct tagDDCAPS2 {
	DWORD dwCaps1;	// Zero or more of the DDSCAPS_* members
	DWORD dwCaps2;	// Zero or more of the DDSCAPS2_* members
	DWORD dwReserved[2];
} DDCAPS2;

// DIRECTDRAWSURFACE CAPABILITY FLAGS
enum {
	DDSCAPS_ALPHA	= 0x00000002l, // alpha only surface
	DDSCAPS_COMPLEX	= 0x00000008l, // complex surface structure
	DDSCAPS_TEXTURE	= 0x00001000l, // used as texture (should always be set)
	DDSCAPS_MIPMAP	= 0x00400000l  // Mipmap present
};

enum {
	DDSCAPS2_CUBEMAP			= 0x00000200L,
	DDSCAPS2_CUBEMAP_POSITIVEX	= 0x00000400L,
	DDSCAPS2_CUBEMAP_NEGATIVEX	= 0x00000800L,
	DDSCAPS2_CUBEMAP_POSITIVEY	= 0x00001000L,
	DDSCAPS2_CUBEMAP_NEGATIVEY	= 0x00002000L,
	DDSCAPS2_CUBEMAP_POSITIVEZ	= 0x00004000L,
	DDSCAPS2_CUBEMAP_NEGATIVEZ	= 0x00008000L,
	DDSCAPS2_VOLUME				= 0x00200000L
};

typedef struct tagDDSURFACEDESC2 {
	DWORD dwSize;	// size of this structure (must be 124)
	DWORD dwFlags;	// combination of the DDSS_* flags
	DWORD dwHeight;
	DWORD dwWidth;
	DWORD dwPitchOrLinearSize;
	DWORD dwDepth;	// Depth of a volume texture
	DWORD dwMipMapCount;
	DWORD dwReserved1[11];
	DDPIXELFORMAT ddpfPixelFormat;
	DDCAPS2 ddsCaps;
	DWORD dwReserved2;
} DDSURFACEDESC2;

enum {
	DDSD_CAPS			= 0x00000001l,
	DDSD_HEIGHT			= 0x00000002l,
	DDSD_WITH			= 0x00000004l,
	DDSD_PITCH			= 0x00000008l,
	DDSD_ALPHABITDEPTH  = 0x00000080l,
	DDSD_PIXELFORMAT	= 0x00001000l,
	DDSD_MIPMAPCOUNT	= 0x00020000l,
	DDSD_LINEARSIZE		= 0x00080000l,
	DDSD_DEPTH			= 0x00800000l
};

typedef struct tagDDSHEADER {
	DWORD dwMagic;			// FOURCC: "DDS "
	DDSURFACEDESC2 surfaceDesc;
} DDSHEADER;

#define MAKEFOURCC(ch0, ch1, ch2, ch3) \
	((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) |   \
    ((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24 ))

#define FOURCC_DXT1	MAKEFOURCC('D','X','T','1')
#define FOURCC_DXT2	MAKEFOURCC('D','X','T','2')
#define FOURCC_DXT3	MAKEFOURCC('D','X','T','3')
#define FOURCC_DXT4	MAKEFOURCC('D','X','T','4')
#define FOURCC_DXT5	MAKEFOURCC('D','X','T','5')

// ----------------------------------------------------------
//   Structures used by DXT textures
// ----------------------------------------------------------

typedef struct tagColor8888 {
	BYTE b;
	BYTE g;
	BYTE r;
	BYTE a;
} Color8888;

typedef struct tagColor565 {
	WORD b : 5;
	WORD g : 6;
	WORD r : 5;
} Color565;

typedef struct tagDXTColBlock {
	Color565 colors[2];
	BYTE row[4];
} DXTColBlock;

typedef struct tagDXTAlphaBlockExplicit {
	WORD row[4];
} DXTAlphaBlockExplicit;

typedef struct tagDXTAlphaBlock3BitLinear {
	BYTE alpha[2];
	BYTE data[6];
} DXTAlphaBlock3BitLinear;

typedef struct tagDXT1Block
{
	DXTColBlock color;
} DXT1Block;

typedef struct tagDXT3Block {		// also used by dxt2
	DXTAlphaBlockExplicit alpha;
	DXTColBlock color;
} DXT3Block;

typedef struct tagDXT5Block {		// also used by dxt4
	DXTAlphaBlock3BitLinear alpha;
	DXTColBlock color;
} DXT5Block;

#ifdef WIN32
#	pragma pack(pop)
#else
#	pragma pack()
#endif

// ----------------------------------------------------------
//   Internal functions
// ----------------------------------------------------------
#ifdef FREEIMAGE_BIGENDIAN
static void
SwapHeader(DDSHEADER *header) {
	SwapLong(&header->dwMagic);
	SwapLong(&header->surfaceDesc.dwSize);
	SwapLong(&header->surfaceDesc.dwFlags);
	SwapLong(&header->surfaceDesc.dwHeight);
	SwapLong(&header->surfaceDesc.dwWidth);
	SwapLong(&header->surfaceDesc.dwPitchOrLinearSize);
	SwapLong(&header->surfaceDesc.dwDepth);
	SwapLong(&header->surfaceDesc.dwMipMapCount);
	for(int i=0; i<11; i++) {
		SwapLong(&header->surfaceDesc.dwReserved1[i]);
	}
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwSize);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFlags);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwFourCC);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBBitCount);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRBitMask);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwGBitMask);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwBBitMask);
	SwapLong(&header->surfaceDesc.ddpfPixelFormat.dwRGBAlphaBitMask);
	SwapLong(&header->surfaceDesc.ddsCaps.dwCaps1);
	SwapLong(&header->surfaceDesc.ddsCaps.dwCaps2);
	SwapLong(&header->surfaceDesc.ddsCaps.dwReserved[0]);
	SwapLong(&header->surfaceDesc.ddsCaps.dwReserved[1]);
	SwapLong(&header->surfaceDesc.dwReserved2);
}
#endif

// ==========================================================

// Get the 4 possible colors for a block
//
static void 
GetBlockColors (const DXTColBlock &block, Color8888 colors[4], bool isDXT1) {
	int i;
	for (i = 0; i < 2; i++)	{
		colors[i].a = 0xff;
		colors[i].r = block.colors[i].r * 0xff / 0x1f;
		colors[i].g = block.colors[i].g * 0xff / 0x3f;
		colors[i].b = block.colors[i].b * 0xff / 0x1f;
	}

	WORD *wCol = (WORD *)block.colors;
	if (wCol[0] > wCol[1] || !isDXT1) {
		// 4 color block
		for (i = 0; i < 2; i++)	{
			colors[i + 2].a = 0xff;
			colors[i + 2].r = (WORD (colors[0].r) * (2 - i) + WORD (colors[1].r) * (1 + i)) / 3;
			colors[i + 2].g = (WORD (colors[0].g) * (2 - i) + WORD (colors[1].g) * (1 + i)) / 3;
			colors[i + 2].b = (WORD (colors[0].b) * (2 - i) + WORD (colors[1].b) * (1 + i)) / 3;
		}
	}
	else {
		// 3 color block, number 4 is transparent
		colors[2].a = 0xff;
		colors[2].r = (WORD (colors[0].r) + WORD (colors[1].r)) / 2;
		colors[2].g = (WORD (colors[0].g) + WORD (colors[1].g)) / 2;
		colors[2].b = (WORD (colors[0].b) + WORD (colors[1].b)) / 2;

		colors[3].a = 0x00;
		colors[3].g = 0x00;
		colors[3].b = 0x00;
		colors[3].r = 0x00;
	}
}

struct DXT_INFO_1 {
	typedef DXT1Block Block;
	enum {
		isDXT1 = 1,
		bytesPerBlock = 8
	};
};

struct DXT_INFO_3 {
	typedef DXT3Block Block;
	enum {
		isDXT1 = 1,
		bytesPerBlock = 16
	};
};

struct DXT_INFO_5 {
	typedef DXT5Block Block;
	enum
	{
		isDXT1 = 1,
		bytesPerBlock = 16
	};
};

template <class INFO> class DXT_BLOCKDECODER_BASE {
protected:
	Color8888 m_colors[4];
	const typename INFO::Block *m_pBlock;
	unsigned m_colorRow;

public:
	void Setup (const BYTE *pBlock) {
		m_pBlock = (const typename INFO::Block *)pBlock;
		GetBlockColors (m_pBlock->color, m_colors, INFO::isDXT1);
	}

	void SetY (int y) {
		m_colorRow = m_pBlock->color.row[y];
	}

	void GetColor (int x, int y, Color8888 &color) {
		unsigned bits = (m_colorRow >> (x * 2)) & 3;
		color = m_colors[bits];
	}
};

class DXT_BLOCKDECODER_1 : public DXT_BLOCKDECODER_BASE <DXT_INFO_1> {
public:
	typedef DXT_INFO_1 INFO;
};

class DXT_BLOCKDECODER_3 : public DXT_BLOCKDECODER_BASE <DXT_INFO_3> {
public:
	typedef DXT_BLOCKDECODER_BASE <DXT_INFO_3> base;
	typedef DXT_INFO_3 INFO;

protected:
	unsigned m_alphaRow;

public:
	void SetY (int y) {
		base::SetY (y);
		m_alphaRow = m_pBlock->alpha.row[y];
	}

	void GetColor (int x, int y, Color8888 &color) {
		base::GetColor (x, y, color);
		const unsigned bits = (m_alphaRow >> (x * 4)) & 0xF;
		color.a = (bits * 0xFF) / 0xF;
	}
};

class DXT_BLOCKDECODER_5 : public DXT_BLOCKDECODER_BASE <DXT_INFO_5> {
public:
	typedef DXT_BLOCKDECODER_BASE <DXT_INFO_5> base;
	typedef DXT_INFO_5 INFO;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产美女精品人人做人人爽| 日韩高清不卡一区二区| 国产91丝袜在线18| 中文字幕欧美区| 成人激情文学综合网| 国产精品久久久久久久久晋中 | 中文字幕成人av| 国产mv日韩mv欧美| 国产精品色一区二区三区| 国产99久久久久| 亚洲欧美二区三区| 91福利在线观看| 日韩电影在线看| 2023国产精品| 91丨九色porny丨蝌蚪| 亚洲综合色网站| 日韩一级二级三级| 国产精品2024| 亚洲美女免费视频| 91精品免费在线观看| 国产精品资源在线看| 一区二区三区在线播放| 7777女厕盗摄久久久| 盗摄精品av一区二区三区| 亚洲人成网站在线| 在线不卡免费欧美| 国产一区二区三区精品视频| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 | 日韩一级大片在线| 国产中文字幕一区| 亚洲欧美日韩国产综合在线| 欧美一区二区日韩| 成人视屏免费看| 日本中文一区二区三区| 国产精品久久看| 欧美大片一区二区| 一本久道久久综合中文字幕| 免费在线观看一区| 伊人夜夜躁av伊人久久| 久久精品一区二区三区不卡 | 蜜桃在线一区二区三区| 亚洲精品日韩一| 2欧美一区二区三区在线观看视频| 91在线视频官网| 国产自产高清不卡| 天天免费综合色| 专区另类欧美日韩| 亚洲国产精品激情在线观看| 日韩一区二区三区在线观看| 欧洲精品在线观看| 99精品视频在线观看免费| 国产在线精品免费av| 午夜一区二区三区视频| 中文字幕在线不卡| 久久久久9999亚洲精品| 4438x亚洲最大成人网| 99精品桃花视频在线观看| 国产精品夜夜嗨| 久久91精品国产91久久小草| 偷拍一区二区三区| 一区二区日韩av| 亚洲精品日韩专区silk| 亚洲视频电影在线| 国产精品久久夜| 欧美国产日韩精品免费观看| 久久综合九色综合欧美98 | 国产亚洲精久久久久久| 精品久久久久久亚洲综合网| 欧美午夜不卡在线观看免费| 99国产精品国产精品久久| 国产成人在线看| 国产在线一区观看| 国模一区二区三区白浆| 国产综合色视频| 精品一二三四区| 国产一区二三区| 国产伦精一区二区三区| 国产精品一级在线| 国内精品自线一区二区三区视频| 蜜臀久久久久久久| 狠狠色丁香久久婷婷综合丁香| 久久99精品久久久久久国产越南| 久久疯狂做爰流白浆xx| 久久国产生活片100| 精品一区二区三区免费视频| 国产呦萝稀缺另类资源| 风间由美一区二区av101| 成人午夜激情在线| jizz一区二区| 欧美午夜不卡在线观看免费| 91精品国产综合久久久蜜臀图片| 日韩欧美一级二级三级| 久久久777精品电影网影网| 久久精品一区二区三区不卡| 国产精品久久久久久久久免费樱桃| 成人欧美一区二区三区1314| 一区二区激情小说| 人人狠狠综合久久亚洲| 国产福利精品导航| 91老司机福利 在线| 9191久久久久久久久久久| 日韩美女视频一区二区在线观看| 久久久精品综合| 亚洲精品视频在线观看免费| 亚洲第四色夜色| 国产一区免费电影| 在线观看国产一区二区| 欧美成人猛片aaaaaaa| 国产精品久久久久久久久图文区| 亚洲国产欧美一区二区三区丁香婷| 日韩高清欧美激情| 成人免费视频caoporn| 欧美性受xxxx黑人xyx性爽| 日韩女优制服丝袜电影| 国产精品女同互慰在线看 | 亚洲成人免费观看| 国产一区二区成人久久免费影院 | 欧美日韩国产中文| 久久亚洲影视婷婷| 一区二区免费看| 国产精品亚洲第一区在线暖暖韩国| 91麻豆高清视频| 26uuuu精品一区二区| 亚洲综合免费观看高清在线观看| 韩国一区二区三区| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 日韩国产欧美在线播放| 成人亚洲精品久久久久软件| 欧美高清一级片在线| 国产精品久久久99| 韩国精品主播一区二区在线观看| 91在线porny国产在线看| 精品国产一区二区三区不卡| 亚洲午夜私人影院| 91无套直看片红桃| 日本一区二区三区高清不卡| 水蜜桃久久夜色精品一区的特点 | 国产精品夜夜嗨| 欧美一区日韩一区| 一区二区三区小说| 成人禁用看黄a在线| 欧美成人vps| 天堂在线一区二区| 一本久久综合亚洲鲁鲁五月天| 久久久不卡影院| 日本不卡一区二区三区高清视频| 91论坛在线播放| 成人欧美一区二区三区视频网页| 国产成人久久精品77777最新版本| 在线播放中文一区| 亚洲成人黄色小说| 欧美亚洲高清一区二区三区不卡| 亚洲人成网站精品片在线观看| 成人一二三区视频| 国产婷婷色一区二区三区| 久久99久久精品| 69p69国产精品| 无吗不卡中文字幕| 91精品国产综合久久精品图片| 亚洲国产精品久久不卡毛片| 欧洲精品视频在线观看| 伊人婷婷欧美激情| 在线观看免费一区| 亚洲国产精品嫩草影院| 欧美调教femdomvk| 午夜在线成人av| 欧美一区欧美二区| 男女男精品视频| 精品国产欧美一区二区| 国产在线精品免费| 欧美韩国日本综合| 本田岬高潮一区二区三区| 中文字幕在线视频一区| 成人福利视频网站| 亚洲精品国产无套在线观| 色哟哟国产精品| 亚洲成人第一页| 欧美一区2区视频在线观看| 美女在线一区二区| 久久综合一区二区| 成人小视频免费在线观看| 亚洲欧洲日韩一区二区三区| 91蜜桃免费观看视频| 亚洲午夜一区二区三区| 欧美一级欧美三级在线观看| 国产一区二区三区综合| 国产精品系列在线| 色哟哟一区二区在线观看| 亚洲午夜av在线| 精品理论电影在线| 成人免费视频国产在线观看| 亚洲自拍偷拍欧美| 777久久久精品| 国产suv精品一区二区三区| 一区二区在线看| 日韩一区二区三区视频| 成人免费高清视频| 图片区小说区国产精品视频| 久久婷婷一区二区三区| 91理论电影在线观看|