📄 tex.c
字号:
}
}
/***********************************************************************************
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 + -