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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tga_image.cpp

?? 此程序需要Brew sdk2.1版本以上,是關(guān)于OpenGL的手機(jī)編程.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	// store texture information
	m_width = tga.width;
	m_height = tga.height;

	// colormode -> 3 = BGR, 4 = BGRA
	int colorMode = tga.bpp / 8;

	// won't handle < 24 bpp for now
	if (colorMode < 3)
	{
		if (pFile) IFILE_Release(pFile);
		if (m_pIFileMgr) IFILEMGR_Release(m_pIFileMgr);

		return NULL;
	}

	m_imageSize = m_width * m_height * colorMode;

	// allocate memory for TGA image data
	m_pData = (GLubyte*) MALLOC(sizeof(GLubyte)*(m_imageSize+1));

	// read image data
	if (tga.imageType == TGA_RGB || tga.imageType == TGA_GRAYSCALE)
	{
		IFILE_Read(pFile, m_pData, m_imageSize);
	}
	else // must be RLE compressed
	{
		GLubyte id;
		GLubyte length;
		rgba_t color = { 0, 0, 0, 0 };
		GLuint i = 0;

		while(i < m_imageSize)
		{

			IFILE_Read(pFile, &id, sizeof(char));

			// see if this is run length data
			if(id & 0x80)
			{
				// find the run length
				length = (GLubyte)(id - 127);

				// next 3 (or 4) bytes are the repeated values

				IFILE_Read(pFile, &color.b, sizeof(char));
				IFILE_Read(pFile, &color.g, sizeof(char));
				IFILE_Read(pFile, &color.r, sizeof(char));

				if(colorMode == 4)
				{
					IFILE_Read(pFile, &color.a, sizeof(char));
				}

				// save everything in this run
				while(length > 0)
				{
					m_pData[i++] = color.b;
					m_pData[i++] = color.g;
					m_pData[i++] = color.r;
					if (colorMode == 4)
					{
						m_pData[i++] = color.a;
					}

					--length;
				}
			}
			else
			{
				// the number of non RLE pixels
				length = GLubyte(id + 1);

				while (length > 0)
				{

					IFILE_Read(pFile, &color.b, sizeof(char));
					IFILE_Read(pFile, &color.g, sizeof(char));
					IFILE_Read(pFile, &color.r, sizeof(char));

					if(colorMode == 4)
					{
						IFILE_Read(pFile, &color.a, sizeof(char));
					}
					m_pData[i++] = color.b;
					m_pData[i++] = color.g;
					m_pData[i++] = color.r;
					if(colorMode == 4)
					{
						m_pData[i++] = color.a;
					}

					--length;
				}
			}
		}
	}

	if (pFile) IFILE_Release(pFile);
	if (m_pIFileMgr) IFILEMGR_Release(m_pIFileMgr);

	switch(tga.imageType)
	{
		case TGA_RGB:
		case TGA_RGB_RLE:
			if (3 == colorMode)
			{
				m_dataFormat = GL_RGB;
				m_dataType = GL_UNSIGNED_BYTE;
				m_colorDepth = 24;
			}
			else
			{
				m_dataFormat = GL_RGBA;
				m_dataType = GL_UNSIGNED_BYTE;
				m_colorDepth = 32;
			}
			break;
		case TGA_GRAYSCALE:
		case TGA_GRAYSCALE_RLE:
			m_dataFormat = GL_LUMINANCE;
			m_dataType = GL_UNSIGNED_BYTE;
			m_colorDepth = 8;
			break;
	}

	SwapBlueAndRed();

	return (m_pData != NULL);


} // end TGA::LoadTGAFile()


/*===========================================================================
FUNCTION: TGA_IMAGE::Get4444()
  
DESCRIPTION:
   Get image in 4 bits red, 4 bits green, 4 bits blue and 4 bits alpha format
   
PROTOTYPE:
   TGA_IMAGE::Get4444()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to struct rgba4444_t
                
===========================================================================*/
rgba4444_t* TGA_IMAGE::Get4444()
{
	
	if (m_colorDepth == 24)
		AddAlphaChannel(255);

	if (m_colorDepth != 32)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	rgba4444_t* newImage = new rgba4444_t[m_width * m_height];

	if (!newImage)
		return NULL;

	rgba_t* source = (rgba_t*)m_pData;
	rgba4444_t* dest = newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			dest->r = source->r >> 4;
			dest->g = source->g >> 4;
			dest->b = source->b >> 4;
			dest->a = source->a >> 4;

			++source;
			++dest;
		}
	}

	return newImage;
 	
}


/*===========================================================================
FUNCTION: TGA_IMAGE::Get5551()
  
DESCRIPTION:
   Get image in 5 bits red, 5 bits green, 5 bits blue and 1 bits alpha format
   
PROTOTYPE:
   TGA_IMAGE::Get5551()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to struct rgba5551_t
                
===========================================================================*/
rgba5551_t* TGA_IMAGE::Get5551()
{
	
	if (m_colorDepth == 24)
		AddAlphaChannel(255);
	if (m_colorDepth != 32)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	rgba5551_t* newImage = new rgba5551_t[m_width * m_height];

	if (!newImage)
		return NULL;

	rgba_t* source = (rgba_t*)m_pData;
	rgba5551_t* dest = newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			dest->r = source->r >> 3;
			dest->g = source->g >> 3;
			dest->b = source->b >> 3;
			dest->a = source->a >> 7;

			++source;
			++dest;
		}
	}

	return newImage;
  	
}


/*===========================================================================
FUNCTION: TGA_IMAGE::Get565()
  
DESCRIPTION:
   Get image in 5 bits red, 6 bits green, 5 bits blue and 0 bits alpha format
   
PROTOTYPE:
   TGA_IMAGE::Get565()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to struct rgb565_t
                
===========================================================================*/
rgb565_t* TGA_IMAGE::Get565()
{
	
	if (m_colorDepth != 24)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	rgb565_t* newImage = new rgb565_t[m_width * m_height];

	if (!newImage)
		return NULL;

	rgb_t* source = (rgb_t*)m_pData;
	rgb565_t* dest = newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			dest->r = source->r >> 3;
			dest->g = source->g >> 2;
			dest->b = source->b >> 3;

			++source;
			++dest;
		}
	}

	return newImage;

}


/*===========================================================================
FUNCTION: TGA_IMAGE::GetAlpha()
  
DESCRIPTION:
   Gets the alpha bits of an image
   
PROTOTYPE:
   TGA_IMAGE::GetAlpha()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to GLubyte
                
===========================================================================*/
GLubyte* TGA_IMAGE::GetAlpha()
{
	
	if (m_colorDepth != 32)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	GLubyte* newImage = new GLubyte[m_width * m_height];

	if (!newImage)
		return NULL;

	rgba_t* source = (rgba_t*)m_pData;
	GLubyte* dest = newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			*dest = source->a;

			++source;
			++dest;
		}
	}

	return newImage;
  
}


/*===========================================================================
FUNCTION: TGA_IMAGE::GetLuminanceAlpha()
  
DESCRIPTION:
   Gets the luminance alpha bit of an image
   
PROTOTYPE:
   TGA_IMAGE::GetLuminanceAlpha()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to GLubyte
                
===========================================================================*/

GLubyte* TGA_IMAGE::GetLuminanceAlpha()
{
	
	if (m_colorDepth == 24)
		AddAlphaChannel(255);
	if (m_colorDepth !=32)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	GLubyte* newImage = new GLubyte[m_width * m_height * 2];

	if (!newImage)
		return NULL;

	rgba_t* source = (rgba_t*)m_pData;
	la_t* dest = (la_t*)newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			dest->a = source->a;
			dest->l = (GLubyte)((source->r + source->g + source->b) / 3);

			++source;
			++dest;
		}
	}

	return newImage;

}


/*===========================================================================
FUNCTION: TGA_IMAGE::GetLuminance()
  
DESCRIPTION:
   Gets the luminance bits of an image
   
PROTOTYPE:
   TGA_IMAGE::GetLuminance()
      
PARAMETERS:
   none
            
DEPENDENCIES
   none
              
RETURN VALUE
   Pointer to GLubyte
                
===========================================================================*/

GLubyte* TGA_IMAGE::GetLuminance()
{
	
	if (m_colorDepth != 32)
		return NULL;

	// for 24 bit images, just add another 8 bits for alpha
	GLubyte* newImage = new GLubyte[m_width * m_height];

	if (!newImage)
		return NULL;

	rgba_t* source = (rgba_t*)m_pData;
	GLubyte* dest = newImage;

	for (int x = 0; x < m_height; ++x)
	{
		for (int y = 0; y < m_width; ++y)
		{
			*dest = (GLubyte)((source->r + source->g + source->b) / 3);

			++source;
			++dest;
		}
	}

	return newImage;

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一本久久a久久免费精品不卡| 粉嫩嫩av羞羞动漫久久久| 久久精品视频一区| 色婷婷国产精品| 国产精品一区二区果冻传媒| 亚洲成av人影院在线观看网| 中文字幕乱码亚洲精品一区| 日韩欧美色综合网站| 一本色道久久综合亚洲aⅴ蜜桃| 国产麻豆91精品| 欧美日韩激情一区二区三区| 国产在线看一区| 日本不卡视频一二三区| 一区二区三区四区激情| 欧美国产成人在线| wwww国产精品欧美| 欧美一区二区精美| 欧美日韩一区二区三区视频| 成人动漫一区二区三区| 国内精品在线播放| 久久99久久久久久久久久久| 亚洲高清免费视频| 亚洲另类春色校园小说| 综合久久综合久久| 国产精品久久久99| 亚洲国产成人在线| 久久久久国产精品人| 日韩久久久精品| 日韩一二三区不卡| 在线播放中文一区| 91精品国产高清一区二区三区蜜臀 | 欧美乱妇20p| 欧美在线啊v一区| 91福利资源站| 欧美在线制服丝袜| 欧美性xxxxxx少妇| 在线免费精品视频| 欧美视频中文字幕| 日本韩国精品在线| 在线观看视频欧美| 欧美色综合天天久久综合精品| 色乱码一区二区三区88| 色综合久久综合中文综合网| 不卡av在线免费观看| 成人午夜av影视| 91麻豆国产福利精品| 91蜜桃网址入口| 色综合天天综合色综合av| 色偷偷成人一区二区三区91 | 亚洲国产视频一区二区| 一区二区在线观看视频| 亚洲高清免费在线| 日本不卡视频在线| 国产在线国偷精品免费看| 国产曰批免费观看久久久| 国产精品99久久久久久久女警| 国产大陆亚洲精品国产| 成人av在线电影| 99精品视频在线播放观看| 色吧成人激情小说| 91精品国产麻豆国产自产在线| 日韩精品一区二区三区视频播放 | 一区二区三区在线看| 亚洲一区二区三区四区五区黄| 日韩精品五月天| 国产乱国产乱300精品| 成人av在线播放网站| 欧美影院一区二区| 免费观看久久久4p| 粉嫩在线一区二区三区视频| 91免费观看视频在线| 337p亚洲精品色噜噜狠狠| 精品久久久久久久久久久久包黑料 | 国产精品一卡二卡在线观看| 丁香六月综合激情| 欧美在线|欧美| 精品福利在线导航| 国产精品超碰97尤物18| 亚洲成a人v欧美综合天堂下载| 久久av资源站| 91免费在线看| 日韩午夜小视频| 国产精品美女久久久久久| 亚洲电影激情视频网站| 国产一区二区在线视频| 91精彩视频在线观看| 精品国产免费久久| 亚洲图片欧美综合| 国产精品综合在线视频| 欧美午夜电影网| 国产丝袜美腿一区二区三区| 亚洲高清在线精品| 春色校园综合激情亚洲| 欧美一区二区精品在线| 亚洲欧美另类在线| 国产精品自拍av| 欧美日韩久久一区二区| 中文字幕高清不卡| 麻豆国产精品视频| 在线观看不卡一区| 国产嫩草影院久久久久| 日本vs亚洲vs韩国一区三区 | 欧美日韩二区三区| 中文字幕综合网| 国产在线精品一区二区三区不卡 | 欧美系列一区二区| 中文字幕一区不卡| 国产乱一区二区| 日韩午夜精品电影| 一区二区高清在线| av中文字幕一区| 欧美激情在线一区二区三区| 蜜乳av一区二区| 欧美视频在线一区二区三区| 中文字幕中文字幕一区二区| 国内精品免费在线观看| 欧美电影影音先锋| 亚洲国产精品一区二区久久恐怖片| 国产白丝精品91爽爽久久| 2019国产精品| 激情五月婷婷综合| 日韩一级片网站| 日韩精品亚洲一区| 欧美日韩国产精品成人| 亚洲福利电影网| 在线免费观看日本一区| 中文字幕一区二区三| 成人不卡免费av| 国产精品理论片在线观看| 国产乱码精品一区二区三区忘忧草 | 久久美女艺术照精彩视频福利播放| 五月天一区二区| 宅男在线国产精品| 日韩精品欧美精品| 日韩一区二区中文字幕| 日韩电影在线观看一区| 欧美一区二区日韩| 麻豆国产精品777777在线| 日韩一级片在线观看| 乱一区二区av| 亚洲精品一区二区三区影院| 国产一区二区三区电影在线观看| 欧美本精品男人aⅴ天堂| 韩国女主播一区二区三区| 久久亚洲免费视频| 成人午夜精品一区二区三区| 国产精品大尺度| 欧美在线影院一区二区| 午夜精品一区二区三区电影天堂| 欧美日韩国产另类一区| 免费精品视频在线| 久久久久久电影| 91在线云播放| 亚洲成a人片在线观看中文| 欧美一区二区三区男人的天堂| 免费的成人av| 久久久国产精华| 91视频一区二区三区| 亚洲成a人在线观看| 欧美tickling网站挠脚心| 国产福利一区二区三区视频| 1024精品合集| 欧美疯狂做受xxxx富婆| 激情文学综合网| 亚洲天堂免费看| 5566中文字幕一区二区电影| 国模少妇一区二区三区| 国产精品久久久久久一区二区三区| 色天天综合色天天久久| 日韩vs国产vs欧美| 国产欧美视频在线观看| 91国偷自产一区二区三区观看| 日韩电影免费在线观看网站| 国产欧美精品一区| 欧美在线free| 国产乱淫av一区二区三区| 一区二区三区四区中文字幕| 日韩视频免费观看高清完整版在线观看| 国产精品一区二区在线播放| 亚洲综合成人在线视频| 欧美大胆一级视频| 99国产精品国产精品久久| 美美哒免费高清在线观看视频一区二区 | 国产精品一区二区x88av| 亚洲综合久久久久| 精品999久久久| 欧美在线观看视频在线| 国产成人一区在线| 午夜精品福利久久久| 国产精品三级av在线播放| 7777精品伊人久久久大香线蕉超级流畅| 韩国成人福利片在线播放| 亚洲一区二区精品视频| 欧美极品aⅴ影院| 欧美一区二区大片| 91成人看片片| 成人黄页在线观看| 久久国产婷婷国产香蕉| 亚洲成人第一页| 亚洲欧美日韩精品久久久久|