📄 g2d_test.c
字号:
sAlphaVal -= 8;
if(sAlphaVal<=0) sAlphaVal=0;
G2D_SetAlphaValue((u8)sAlphaVal);
G2D_ClearFrameEcolor(G2D_YELLOW, 0, 0);
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++)
if(i<(uG2dWidth/2) && j<(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_RED);
else if(i>=(uG2dWidth/2) && (j<uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_GREEN);
else if(i<(uG2dWidth/2) && j>=(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_BLUE);
else G2D_PutPixelEcolor(i, j, G2D_WHITE);
printf("Alpha:%d\n", sAlphaVal);
if(sAlphaVal==0) break;
UART_Getc();
}
G2D_InterruptDisable();
INTC_Disable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestPointDrawingWithClipping(void)
{
u32 i,j;
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
u32 uDec;
CSPACE eBpp;
INTC_SetVectAddr(NUM_2D, Isr_G2d);
INTC_Enable(NUM_2D);
G2D_InterruptEnable();
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
G2D_ClearFrameEcolor(G2D_BLACK, 0, 0);
printf("Simple Point Drawing, press any key to continue\n");
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++)
if(i<(uG2dWidth/2) && j<(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_RED);
else if(i>=(uG2dWidth/2) && (j<uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_GREEN);
else if(i<(uG2dWidth/2) && j>=(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_BLUE);
else G2D_PutPixelEcolor(i, j, G2D_WHITE);
printf("Red, Green, Bule and White are displayed, press any key to test window clipping\n");
UART_Getc();
uDec=0;
while(1) {
uDec+=8;
if((uG2dWidth-2*uDec <=32)||(uG2dHeight-2*uDec <=32)) break;
G2D_ClearFrameEcolor(G2D_BLACK, 0, 0);
G2D_SetClippingWindow(0+uDec, 0+uDec, uG2dWidth-uDec, uG2dHeight-uDec);
printf("[Clipping]x1=%d,y1=%d,x2=%d,y2=%d\n",uG2dWidth-uDec, uG2dHeight-uDec, uG2dWidth-uDec, uG2dHeight-uDec);
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++)
if(i<(uG2dWidth/2) && j<(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_RED);
else if(i>=(uG2dWidth/2) && (j<uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_GREEN);
else if(i<(uG2dWidth/2) && j>=(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_BLUE);
else G2D_PutPixelEcolor(i, j, G2D_WHITE);
UART_Getc();
}
G2D_InterruptEnable();
INTC_Enable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestPointDrawingWithAll(void)
{
u32 i,j;
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
CSPACE eBpp;
INTC_SetVectAddr(NUM_2D, Isr_G2d);
INTC_Enable(NUM_2D);
G2D_InterruptEnable();
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
printf("Point Drawing with All Operations, press any key to test.\n");
G2D_ClearFrameEcolor(G2D_YELLOW, 0, 0);
G2D_RegisterPattern(pat8x8_outline);
UART_Getc();
G2D_SetAlphaMode(G2D_ALPHA_MODE);
G2D_SetAlphaValue(0xcf);
G2D_SetClippingWindow(uG2dWidth/4, uG2dHeight/4,uG2dWidth*3/4, uG2dHeight*3/4);
G2D_Set3rdOperand(G2D_OPERAND3_PAT);
G2D_SetRopEtype(ROP_SRC_AND_3RD_OPRND);
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++)
if(i<(uG2dWidth/2) && j<(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_RED);
else if(i>=(uG2dWidth/2) && (j<uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_GREEN);
else if(i<(uG2dWidth/2) && j>=(uG2dHeight/2)) G2D_PutPixelEcolor(i, j, G2D_BLUE);
else G2D_PutPixelEcolor(i, j, G2D_WHITE);
G2D_SetRotationMode(G2D_ROTATION_0_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++) {
if(i>=((uG2dWidth/2-1)+10) && i<((uG2dWidth/2-1)+50) && j > ((uG2dHeight/2-1)-50) && j<=((uG2dHeight/2-1)-10)) G2D_PutPixelEcolor(i, j, G2D_BLACK);
}
G2D_SetRotationMode(G2D_ROTATION_90_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++) {
if(i>=((uG2dWidth/2-1)+10) && i<((uG2dWidth/2-1)+50) && j > ((uG2dHeight/2-1)-50) && j<=((uG2dHeight/2-1)-10)) G2D_PutPixelEcolor(i, j, G2D_RED);
}
G2D_SetRotationMode(G2D_ROTATION_180_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++) {
if(i>=((uG2dWidth/2-1)+10) && i<((uG2dWidth/2-1)+50) && j > ((uG2dHeight/2-1)-50) && j<=((uG2dHeight/2-1)-10)) G2D_PutPixelEcolor(i, j, G2D_GREEN);
}
G2D_SetRotationMode(G2D_ROTATION_270_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
for(j=0; j<uG2dHeight; j++)
for(i=0; i<uG2dWidth; i++) {
if(i>=((uG2dWidth/2-1)+10) && i<((uG2dWidth/2-1)+50) && j > ((uG2dHeight/2-1)-50) && j<=((uG2dHeight/2-1)-10)) G2D_PutPixelEcolor(i, j, G2D_BLUE);
}
printf("Press any key to exit!\n");
UART_Getc();
G2D_InterruptEnable();
INTC_Enable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestLineDrawingSimple(void)
{
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
CSPACE eBpp;
INTC_SetVectAddr(NUM_2D, Isr_G2d);
INTC_Enable(NUM_2D);
G2D_InterruptEnable();
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
G2D_ClearFrameEcolor(G2D_BLACK, 0, 0);
printf("Simple Line Drawing, press any key to continue\n");
UART_Getc();
G2D_PutLineEcolor(0,0,uG2dWidth-1, 0, G2D_WHITE, 1);
G2D_PutLineEcolor(0,0,0, uG2dHeight-1, G2D_WHITE, 1);
G2D_PutLineEcolor(uG2dWidth-1,0,uG2dWidth-1, uG2dHeight-1, G2D_WHITE, 1);
G2D_PutLineEcolor(0,uG2dHeight-1,uG2dWidth-1, uG2dHeight-1, G2D_WHITE, 1);
G2D_PutLineEcolor(0,0,uG2dWidth-1, uG2dHeight-1, G2D_WHITE, 1);
G2D_PutLineEcolor(0,uG2dHeight-1,uG2dWidth-1, 0, G2D_WHITE, 1);
G2D_InterruptEnable();
INTC_Enable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestLineDrawingWithRop(void)
{
u32 i,k;
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
CSPACE eBpp;
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
G2D_ClearFrameEcolor(G2D_YELLOW, 0, 0);
G2D_RegisterPattern(pat8x8_rgbw);
G2D_Set3rdOperand(G2D_OPERAND3_PAT);
printf("Point Drawing with Raster Operation, press any key to continue\n");
UART_Getc();
for(k=0; k<=8; k++) {
G2D_SetRopEtype((G2D_ROP_TYPE)(k));
switch((G2D_ROP_TYPE)k){
case ROP_DST_ONLY:
printf("Destination Only, press any key to continue\n");
break;
case ROP_SRC_ONLY:
printf("Source Only, press any key to continue\n");
break;
case ROP_3RD_OPRND_ONLY:
printf("Third Operand Only, press any key to continue\n");
break;
case ROP_SRC_AND_DST:
printf("Source AND Destination, press any key to continue\n");
break;
case ROP_SRC_AND_3RD_OPRND:
printf("Source AND Third Operand, press any key to continue\n");
break;
case ROP_SRC_OR_DST:
printf("Source OR Destination, press any key to continue\n");
break;
case ROP_SRC_OR_3RD_OPRND:
printf("Source OR Third Operand, press any key to continue\n");
break;
case ROP_DST_OR_3RD:
printf("Destination OR Third Operand, press any key to continue\n");
break;
case ROP_SRC_XOR_3RD_OPRND:
printf("Source XOR Third Operand, press any key to continue\n");
break;
default:
break;
}
for(i=0; i<uG2dHeight; i++)
if((i%4)==0)
G2D_PutLineEcolor(0,i,uG2dWidth-1,i,G2D_BLUE,1);
G2D_PutLineEcolor(0,0,uG2dWidth-1, 0, G2D_RED, 1);
G2D_PutLineEcolor(0,0,0, uG2dHeight-1, G2D_RED, 1);
G2D_PutLineEcolor(uG2dWidth-1,0,uG2dWidth-1, uG2dHeight-1, G2D_RED, 1);
G2D_PutLineEcolor(0,uG2dHeight-1,uG2dWidth-1, uG2dHeight-1, G2D_RED, 1);
UART_Getc();
}
#if 0 // Open this block when you want to test ROP that get the third operand via foreground color
printf("Point Drawing with Raster Operation(foreground), press any key to continue\n");
G2D_ClearFrameEcolor(G2D_YELLOW, 0, 0);
G2D_SetFgColor(G2D_MAGENTA);
G2D_Set3rdOperand(G2D_OPERAND3_FG);
G2D_SetRopEtype(ROP_DST_OR_3RD);
UART_Getc();
for(j=0; j<uG2dHeight; j++)
G2D_PutLineEcolor(0,j,uG2dWidth-1,uG2dHeight-1, G2D_MAGENTA,1);
#endif
G2D_InterruptEnable();
INTC_Enable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestLineDrawingWithRotation(void)
{
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
CSPACE eBpp;
INTC_SetVectAddr(NUM_2D, Isr_G2d);
INTC_Enable(NUM_2D);
G2D_InterruptEnable();
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
G2D_ClearFrameEcolor(G2D_BLACK, 0, 0);
G2D_PutLineEcolor(0,uG2dHeight/2-1,uG2dWidth-1, uG2dHeight/2-1, G2D_WHITE, 1);
G2D_PutLineEcolor(uG2dWidth/2-1,0, uG2dWidth/2-1, uG2dHeight-1,G2D_WHITE, 1);
G2D_SetRotationMode(G2D_ROTATION_0_DEG_BIT);
G2D_PutLineEcolor(uG2dWidth/2-1, uG2dHeight/2-1, uG2dWidth/2-1+20, uG2dHeight/2-1-20, G2D_WHITE,1);
printf("Destination Image is displayed, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_ROTATION_90_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
G2D_PutLineEcolor(uG2dWidth/2-1, uG2dHeight/2-1, uG2dWidth/2-1+20, uG2dHeight/2-1-20, G2D_RED,1);
printf("90 degree rotation, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_ROTATION_180_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
G2D_PutLineEcolor(uG2dWidth/2-1, uG2dHeight/2-1, uG2dWidth/2-1+20, uG2dHeight/2-1-20, G2D_GREEN,1);
printf("180 degree rotation, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_ROTATION_270_DEG_BIT);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
G2D_PutLineEcolor(uG2dWidth/2-1, uG2dHeight/2-1, uG2dWidth/2-1+20, uG2dHeight/2-1-20, G2D_BLUE,1);
printf("270 degree rotation, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_ROTATION_0_DEG_BIT);
G2D_PutLineEcolor(uG2dWidth/2-1+20, uG2dHeight/2-1-20, uG2dWidth/2-1+40, uG2dHeight/2-1, G2D_YELLOW,1);
printf("Destination Image is displayed, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_X_FLIP);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
G2D_PutLineEcolor(uG2dWidth/2-1+20, uG2dHeight/2-1-20, uG2dWidth/2-1+40, uG2dHeight/2-1, G2D_CYAN,1);
printf("X-FLIP, press any key to test rotation\n");
UART_Getc();
G2D_SetRotationMode(G2D_Y_FLIP);
G2D_SetRotationOrg((u16)(uG2dWidth/2-1), (u16)(uG2dHeight/2-1));
G2D_PutLineEcolor(uG2dWidth/2-1+20, uG2dHeight/2-1-20, uG2dWidth/2-1+40, uG2dHeight/2-1, G2D_MAGENTA,1);
printf("Y-FLIP, press any key to exit\n");
UART_Getc();
G2D_InterruptEnable();
INTC_Enable(NUM_2D);
G2D_InitSetting(uG2dFbAddr, eBpp, uG2dWidth, uG2dHeight, 0, 0, uG2dWidth, uG2dHeight);
}
void TestLineDrawingWithBlending(void)
{
u32 i;
u32 uG2dFbAddr, uG2dWidth, uG2dHeight;
s32 sAlphaVal;
CSPACE eBpp;
INTC_SetVectAddr(NUM_2D, Isr_G2d);
INTC_Enable(NUM_2D);
G2D_InterruptEnable();
G2D_GetFrmSz(&uG2dWidth, &uG2dHeight);
G2D_GetFbAddr(&uG2dFbAddr);
G2D_GetBppMode(&eBpp);
printf("Width=%d, Height=%d, Framebuffer:0x%x\n", uG2dWidth, uG2dHeight, uG2dFbAddr);
printf("press any key to test alpha blending.\n");
G2D_ClearFrameEcolor(G2D_YELLOW, 0, 0);
UART_Getc();
G2D_SetAlphaMode(G2D_ALPHA_MODE);
G2D_SetAlphaValue(0xff);
for(i=0; i<uG2dHeight; i++)
if((i%4)==0)
G2D_PutLineEcolor(0,i,uG2dWidth-1,i,G2D_BLUE,1);
for(i=0; i<uG2dWidth; i++)
if((i%4)==0)
G2D_PutLineEcolor(i,0,i,uG2dHeight-1,G2D_BLUE,1);
sAlphaVal=255;
while(1) {
sAlphaVal -= 8;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -