⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tex.c

📁 Lido PXA270平台开发板的最新BSP,包括源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	}
}

/***********************************************************************************
 Function Name      : Copy8888Palette4Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui32Dest
 Returns            : -
 Description        : Copies texture data from 4bit Palette with 8888 format
					  to RGBA8888 HW format
************************************************************************************/

static IMG_VOID Copy8888Palette4Span(IMG_UINT32 *pui32Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue0, ui8Invalue1;
	IMG_UINT32 *pui32Palette = (IMG_UINT32 *)pvPalette;
	IMG_UINT32 ui32PalTemp;
	
	if(ui32Width == 1)
	{
		ui8Invalue0 = *pui8Src++;
		ui8Invalue0 >>= 4;
			
		ui32PalTemp = pui32Palette[ui8Invalue0];

		*pui32Dest++ = (ui32PalTemp & 0xff00ff00) | ((ui32PalTemp & 0xff) << 16) | ((ui32PalTemp & 0xff0000) >> 16); 
	}
	else
	{
		for (i=0; i<ui32Width; i+=2) 
		{
			ui8Invalue0 = *pui8Src++;
			ui8Invalue1 = ui8Invalue0 & 0xF;
			ui8Invalue0 >>= 4;
			
			ui32PalTemp = pui32Palette[ui8Invalue0];
			
			*pui32Dest++ = (ui32PalTemp & 0xff00ff00) | ((ui32PalTemp & 0xff) << 16) | ((ui32PalTemp & 0xff0000) >> 16); 
			
			ui32PalTemp = pui32Palette[ui8Invalue1];
			
			*pui32Dest++ = (ui32PalTemp & 0xff00ff00) | ((ui32PalTemp & 0xff) << 16) | ((ui32PalTemp & 0xff0000) >> 16); 
		}
	}
}


/***********************************************************************************
 Function Name      : Copy8888Palette8Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui32Dest
 Returns            : -
 Description        : Copies texture data from 8bit Palette with 8888 format
					  to RGBA8888 HW format
************************************************************************************/

static IMG_VOID Copy8888Palette8Span(IMG_UINT32 *pui32Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue;
	IMG_UINT32 *pui32Palette = (IMG_UINT32 *)pvPalette;
	IMG_UINT32 ui32PalTemp;
	
	for (i=0; i<ui32Width; i++) 
	{
		ui8Invalue = *pui8Src++;
		
		ui32PalTemp = pui32Palette[ui8Invalue];
		
		*pui32Dest++ = (ui32PalTemp & 0xff00ff00) | ((ui32PalTemp & 0xff) << 16) | ((ui32PalTemp & 0xff0000) >> 16); 
	}
}


/***********************************************************************************
 Function Name      : Copy565Palette4Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 4bit Palette with 565 format
					  to RGB565 HW format
************************************************************************************/

static IMG_VOID Copy565Palette4Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue0, ui8Invalue1;
	IMG_UINT16 *pui16Palette = (IMG_UINT16 *)pvPalette;
	
	if(ui32Width == 1)
	{
		ui8Invalue0 = *pui8Src++;
		ui8Invalue0 >>= 4;
			
		*pui16Dest++ = pui16Palette[ui8Invalue0]; 
	}
	else
	{
		for (i=0; i<ui32Width; i+=2) 
		{
			ui8Invalue0 = *pui8Src++;
			ui8Invalue1 = ui8Invalue0 & 0xF;
			ui8Invalue0 >>= 4;
			
			*pui16Dest++ = pui16Palette[ui8Invalue0]; 
			*pui16Dest++ = pui16Palette[ui8Invalue1]; 
		}
	}
}


/***********************************************************************************
 Function Name      : Copy565Palette8Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 8bit Palette with 565 format
					  to RGB565 HW format
************************************************************************************/

static IMG_VOID Copy565Palette8Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue;
	IMG_UINT16 *pui16Palette = (IMG_UINT16 *)pvPalette;
	
	for (i=0; i<ui32Width; i++) 
	{
		ui8Invalue = *pui8Src++;
		
		*pui16Dest++ = pui16Palette[ui8Invalue]; 
	}
}

/***********************************************************************************
 Function Name      : Copy4444Palette4Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 4bit Palette with 4444 format
					  to RGBA4444 HW format
************************************************************************************/

static IMG_VOID Copy4444Palette4Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue0, ui8Invalue1;
	IMG_UINT16 *pu16Palette = (IMG_UINT16 *)pvPalette;
	IMG_UINT16 ui16PalTemp;
	
	if(ui32Width == 1)
	{
		ui8Invalue0 = *pui8Src++;
			
		ui16PalTemp = pu16Palette[ui8Invalue0 >> 4]; 
		
		*pui16Dest++ = (ui16PalTemp << 12) | (ui16PalTemp >> 4); 
	}
	else
	{
		for (i=0; i<ui32Width; i+=2) 
		{
			ui8Invalue0 = *pui8Src++;
			ui8Invalue1 = ui8Invalue0 & 0xF;
			ui8Invalue0 >>= 4;
			
			ui16PalTemp = pu16Palette[ui8Invalue0]; 
			*pui16Dest++ = (ui16PalTemp << 12) | (ui16PalTemp >> 4); 

			ui16PalTemp = pu16Palette[ui8Invalue1]; 
			*pui16Dest++ = (ui16PalTemp << 12) | (ui16PalTemp >> 4); 
		}
	}
}


/***********************************************************************************
 Function Name      : Copy4444Palette8Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 8bit Palette with 4444 format
					  to RGBA4444 HW format
************************************************************************************/

static IMG_VOID Copy4444Palette8Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue;
	IMG_UINT16 *pui16Palette = (IMG_UINT16 *)pvPalette;
	IMG_UINT16 ui16PalTemp;
	
	for (i=0; i<ui32Width; i++) 
	{
		ui8Invalue = *pui8Src++;
		ui16PalTemp = pui16Palette[ui8Invalue]; 
		
		*pui16Dest++ = (ui16PalTemp << 12) | (ui16PalTemp >> 4); 
	}
}

/***********************************************************************************
 Function Name      : Copy5551Palette4Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 4bit Palette with 5551 format
					  to RGBA1555 HW format
************************************************************************************/

static IMG_VOID Copy5551Palette4Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue0, ui8Invalue1;
	IMG_UINT16 *pui16Palette = (IMG_UINT16 *)pvPalette;
	IMG_UINT16 ui16PalTemp;
	
	if(ui32Width == 1)
	{
		ui8Invalue0 = *pui8Src++;
			
		ui16PalTemp = pui16Palette[ui8Invalue0 >> 4]; 
		
		*pui16Dest++ = (ui16PalTemp << 15) | (ui16PalTemp >> 1);
	}
	else
	{
		for (i=0; i<ui32Width; i+=2) 
		{
			ui8Invalue0 = *pui8Src++;
			ui8Invalue1 = ui8Invalue0 & 0xF;
			ui8Invalue0 >>= 4;
			
			ui16PalTemp = pui16Palette[ui8Invalue0]; 
			*pui16Dest++ = (ui16PalTemp << 15) | (ui16PalTemp >> 1);

			ui16PalTemp = pui16Palette[ui8Invalue1]; 
			*pui16Dest++ = (ui16PalTemp << 15) | (ui16PalTemp >> 1);
		}
	}
}


/***********************************************************************************
 Function Name      : Copy5551Palette8Span
 Inputs             : pui8Src, ui32Width, pvPalette
 Outputs            : pui16Dest
 Returns            : -
 Description        : Copies texture data from 8bit Palette with 5551 format
					  to RGBA1555 HW format
************************************************************************************/

static IMG_VOID Copy5551Palette8Span(IMG_UINT16 *pui16Dest, IMG_UINT8 *pui8Src, IMG_UINT32 ui32Width, 
									 const IMG_VOID *pvPalette)
{
	IMG_UINT32 i;
	IMG_UINT8 ui8Invalue;
	IMG_UINT16 *pui16Palette = (IMG_UINT16 *)pvPalette;
	IMG_UINT16 ui16PalTemp;
	
	for (i=0; i<ui32Width; i++) 
	{
		ui8Invalue = *pui8Src++;
		ui16PalTemp = pui16Palette[ui8Invalue]; 
		
		*pui16Dest++ = (ui16PalTemp << 15) | (ui16PalTemp >> 1);
	}
}

/* These are structures which define HW texture formats */
const static GLEStextureFormat TexFormatRGBA8888 = {
    
	32,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM8888,	/* uHWFormat */
	GLES_RGBA_TEX_INDEX			/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatRGBA5551 = {
    
	16,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM1555,	/* uHWFormat */
	GLES_RGBA_TEX_INDEX			/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatRGBA4444 = {
    
	16,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM4444,	/* uHWFormat */
	GLES_RGBA_TEX_INDEX			/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatRGB888 = {
    
	32,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM8888,	/* uHWFormat */
	GLES_RGB_TEX_INDEX			/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatRGB565 = {
    
	16,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM565,	/* uHWFormat */
	GLES_RGB_TEX_INDEX			/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatAlpha = {
    
	8,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM8,		/* uHWFormat */
	GLES_ALPHA_TEX_INDEX		/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatLuminance = {
    
	8,							/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM8,		/* uHWFormat */
	GLES_LUMINANCE_TEX_INDEX	/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatLuminanceAlpha = {
    
	16,								/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORM88,			/* uHWFormat */
	GLES_LUMINANCE_ALPHA_TEX_INDEX	/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatPVRTC2RGB = {
    
	64,								/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORMPVRTC2,		/* uHWFormat */
	GLES_RGB_TEX_INDEX				/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatPVRTC4RGB = {
    
	64,								/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORMPVRTC4,		/* uHWFormat */
	GLES_RGB_TEX_INDEX				/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatPVRTC2RGBA = {
    
	64,								/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORMPVRTC2,		/* uHWFormat */
	GLES_RGBA_TEX_INDEX				/* baseFormatIndex */
};
const static GLEStextureFormat TexFormatPVRTC4RGBA = {
    
	64,								/* ui32BitsPerTexel */
	MBX1_TSPPL1_TPIXFORMPVRTC4,		/* uHWFormat */
	GLES_RGBA_TEX_INDEX				/* baseFormatIndex */
};

static IMG_VOID SetupDefaultTexFormat(GLESContext *gc)
{
	switch(gc->psMode->ePixelFormat)
	{
		case PVRSRV_PIXEL_FORMAT_ARGB8888:
			gc->sTexture.psDefaultRGBFormat = &TexFormatRGB888;
			gc->sTexture.psDefaultRGBAFormat = &TexFormatRGBA8888;
			gc->sTexture.pfnDefaultRGBCopySpan = (PFNCopySpan) Copy888XSpan;
			gc->sTexture.pfnDefaultRGBACopySpan = (PFNCopySpan) Copy8888Span;
			break;
		default:
		case PVRSRV_PIXEL_FORMAT_RGB565:
			gc->sTexture.psDefaultRGBFormat = &TexFormatRGB565;
			gc->sTexture.psDefaultRGBAFormat = &TexFormatRGBA4444;
			gc->sTexture.pfnDefaultRGBCopySpan = (PFNCopySpan) CopySpan888to565;
			gc->sTexture.pfnDefaultRGBACopySpan = (PFNCopySpan) CopySpan8888to4444;
			break;
	}
}


/***********************************************************************************
 Function Name      : glTexImage2D
 Inputs             : target, level, internalformat, width, height, border, format,
					  type, pixels
 Outputs            : -
 Returns            : -
 Description        : ENTRYPOINT: Provides texture data in a specified format & 
					  suggests an internal storage format. Data is converted
					  from specified format to internal HW format. Host texture data 
					  memory is allocated but data is not twiddled or loaded to HW 
					  until use. 
************************************************************************************/

GLAPI void APIENTRY glTexImage2D(GLenum target, GLint level, GLint internalformat, GLsizei width, 
						 GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)
{
	GLEStexture *psTex;
    GLEStextureBuffer *pui8Dest;
	IMG_UINT32 i;
	PFNCopySpan pfnCopySpan;
	IMG_UINT32 ui32SrcBytesPerPixel;
	const GLEStextureFormat *psTexFormat;
    __GL_GET_CONTEXT();

	GLES_TIME_START(GLES_TIMER_TEXIMAGE_TIME);
	GLES_TIME_START(GLES_TIMES_glTexImage2D);

	psTex = CheckTexImageArgs(gc, target, level, IMG_FALSE, width, height, border);

	if(!psTex)
	{
		GLES_TIME_STOP(GLES_TIMER_TEXIMAGE_TIME);
		return;
	}

	if((GLenum)internalformat != format)
	{
bad_enum:
		SetError(gc, GL_INVALID_ENUM);
		GLES_TIME_STOP(GLES_TIMER_TEXIMAGE_TIME);
		return;
	}
	
	switch(format)
	{
		case GL_RGBA:
		{
			switch(type)
			{
				case GL_UNSIGNED_BYTE:
					pfnCopySpan = gc->sTexture.pfnDefaultRGBACopySpan;
					ui32SrcBytesPerPixel = 4;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -