📄 gfx_demo.c
字号:
static RMuint8 alpha; static RMuint32 color; static RMbool done; switch(state){ case 0:/*copy the bitmap on both pictures */ x = 3, y = 5, i; x_inc = 2; y_inc = 1; size_inc = 3; alpha_inc = 2; size = 0; state = 0; alpha= 0xff; color = 0x0000ff; done = FALSE; X_surface.SurfaceID = GFX_SURFACE_ID_X; X_surface.Tiled = FALSE; YZ_surface.StartAddress = bitmap_addr; YZ_surface.TotalWidth = bitmap_profile.Width; YZ_surface.Tiled = FALSE; format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_NX; SEND_GFX_COMMAND(RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); format.SurfaceID = GFX_SURFACE_ID_Z; YZ_surface.SurfaceID = GFX_SURFACE_ID_Z; SEND_GFX_COMMAND(RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); SEND_GFX_COMMAND(RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.SurfaceID = GFX_SURFACE_ID_Y; YZ_surface.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND(RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); SEND_GFX_COMMAND(RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); circle_move.AlphaX = 0; circle_move.AlphaY = 0; circle_move.SrcWidth = 32; circle_move.SrcHeight = 32; circle_move.DstWidth = 64; circle_move.DstHeight = 64; circle_move.Merge = TRUE; move.AlphaX = 0; move.AlphaY = 0; move.Merge = FALSE; sc_blend.SaturateAlpha = 0; last_x[0] = last_x[1] = 0; last_y[0] = last_y[1] = 0; case 1: move.Width = bitmap_profile.Width; move.Height = bitmap_profile.Height; move.SrcX = move.DstX = move.SrcY = move.DstY = 0; SEND_GFX_COMMAND( RMGFXEnginePropertyID_MoveRectangle, &move, sizeof(move)); state++; break; case 2: /*setup X */ format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_X; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); X_surface.TotalWidth = bitmap_profile.Width; alpha = 0x04; state++; case 3: /*the sc_blend fade out*/ X_surface.StartAddress = pic_luma; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &X_surface, sizeof(X_surface)); size += size_inc; sc_blend.Width = RMmin(size, bitmap_profile.Width); sc_blend.SrcY = sc_blend.DstY = 0; sc_blend.Height = bitmap_profile.Height/4; for (i = 0; i < 4; i++){ if(i & 0x1){ sc_blend.SrcX = RMmax(0,(RMint32)(bitmap_profile.Width-size)); sc_blend.DstX = RMmax(0,(RMint32)(bitmap_profile.Width-size)); sc_blend.Color = (alpha<<24)|0x1010ff; } else { sc_blend.SrcX = 0; sc_blend.DstX = 0; sc_blend.Color = (alpha<<24)|0xffeeee; } SEND_GFX_COMMAND( RMGFXEnginePropertyID_SingleColorBlendRectangles, &sc_blend, sizeof(sc_blend)); sc_blend.SrcY += bitmap_profile.Height/4; sc_blend.DstY += bitmap_profile.Height/4; } if (size > bitmap_profile.Width){ alpha ++; } if (alpha == 0x40){ size_inc = 8; alpha = 0xff; size = 0; state++; } break; case 4: YZ_surface.StartAddress = elephant_glyph.OutAddr; YZ_surface.TotalWidth = 64; YZ_surface.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.MainMode = EMhwlibColorMode_LUT_1BPP; format.SubMode = EMhwlibColorFormat_32BPP; format.SamplingMode = EMhwlibSamplingMode_444; format.ColorSpace = EMhwlibColorSpace_RGB_0_255; format.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); color_palette_1bpp.SurfaceID = GFX_SURFACE_ID_Y; size = 512; state++; case 5: if(size + 100 >= 4096){ if(done){ size = 0; state++; break; } else done = TRUE; } else size += 50; elephant_glyph.ScaleFactor = (size * 0x100)/4096; move.Width = (size*128)/4096; move.Height = (size*128)/4096; if(move.Width > YZ_surface.TotalWidth){ YZ_surface.TotalWidth += 64; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); } SEND_GFX_COMMAND( RMGFXEnginePropertyID_GlyphMask, &elephant_glyph, sizeof(elephant_glyph)); i = 0; for (y = 0; y <= bitmap_profile.Height - 128; y += 128){ if((i++) & 0x1){ color_palette_1bpp.Palette[0]= 0xff1010ff; color_palette_1bpp.Palette[1]= 0xffff8010; } else { color_palette_1bpp.Palette[0]= 0xffffeeee; color_palette_1bpp.Palette[1]= 0xff3080ff; } SEND_GFX_COMMAND( RMGFXEnginePropertyID_Palette_1BPP, &color_palette_1bpp, sizeof(color_palette_1bpp)); for (x = 0; x <= bitmap_profile.Width - 128; x += 128){ move.DstX = x + (128 - move.Width)/2 ; move.DstY = y + (128 - move.Height)/2; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ReplaceRectangle, &move, sizeof(move)); } } break; case 6: format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); YZ_surface.TotalWidth = bitmap_profile.Width; YZ_surface.StartAddress = bitmap_addr; YZ_surface.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); state++; case 7: /*bring the bitmap back vertically*/ size += size_inc; move.Width = bitmap_profile.Width/8; move.Height = size; move.DstX = 0; move.SrcX = 0; for ( i=0; i< 8; i++){ if((i & 0x1)){ move.DstY = bitmap_profile.Height - size; move.SrcY = 0; } else{ move.DstY = 0; move.SrcY = bitmap_profile.Height - size; } SEND_GFX_COMMAND( RMGFXEnginePropertyID_MoveRectangle, &move, sizeof(move)); move.DstX += bitmap_profile.Width/8; move.SrcX += bitmap_profile.Width/8; } if (size + size_inc > bitmap_profile.Height){ state++; } break; case 8: case 9: move.Width = bitmap_profile.Width; move.Height = bitmap_profile.Height; move.SrcX = move.DstX = move.SrcY = move.DstY = 0; SEND_GFX_COMMAND( RMGFXEnginePropertyID_MoveRectangle, &move, sizeof(move)); state++; break; case 10: move.Width = move.Height = 64; blend.DstX = blend.Src2X = bitmap_profile.Width - logo_profile.Width - 30; blend.DstY = blend.Src2Y = 30; blend.Src1X = 0; blend.Src1Y = 0; blend.SaturateAlpha = FALSE; blend.Width = logo_profile.Width; blend.Height = logo_profile.Height; alpha_inc = 2; x = 5; y = 12; YZ_surface.StartAddress = bitmap_addr; YZ_surface.TotalWidth = bitmap_profile.Width; YZ_surface.SurfaceID = GFX_SURFACE_ID_Z; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_Z; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); state++; case 11: YZ_surface.StartAddress = bitmap_addr; YZ_surface.TotalWidth = bitmap_profile.Width; YZ_surface.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); move.SrcX = move.DstX = last_x[pic_index]; move.SrcY = move.DstY = last_y[pic_index]; SEND_GFX_COMMAND( RMGFXEnginePropertyID_MoveRectangle, &move, sizeof(move)); format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_X; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); X_surface.StartAddress = bitmap_addr; X_surface.TotalWidth = bitmap_profile.Width; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &X_surface, sizeof(X_surface)); YZ_surface.StartAddress = logo_addr; YZ_surface.TotalWidth = logo_profile.Width; YZ_surface.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.MainMode = logo_profile.ColorMode; format.SubMode = logo_profile.ColorFormat; format.SamplingMode = logo_profile.SamplingMode; format.ColorSpace = logo_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_Y; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); color_palette.SurfaceID = GFX_SURFACE_ID_Y; color_palette.Palette[2]= (0xff<<24) | (alpha<<16)|(alpha<<8)|alpha/4; color_palette.Palette[1]= 0x0; color_palette.Palette[0]= (alpha<<24) | color; alpha -= ( alpha > alpha_inc) ? alpha_inc:0; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Palette_2BPP, &color_palette, sizeof(color_palette)); SEND_GFX_COMMAND( RMGFXEnginePropertyID_BlendRectangles, &blend, sizeof(blend)); YZ_surface.StartAddress = bitmap_addr; YZ_surface.TotalWidth = bitmap_profile.Width; YZ_surface.SurfaceID = GFX_SURFACE_ID_Z; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &YZ_surface, sizeof(YZ_surface)); format.MainMode = bitmap_profile.ColorMode; format.SubMode = bitmap_profile.ColorFormat; format.SamplingMode = bitmap_profile.SamplingMode; format.ColorSpace = bitmap_profile.ColorSpace; format.SurfaceID = GFX_SURFACE_ID_Z; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ColorFormat, &format, sizeof(format)); X_surface.StartAddress = circle_addr; X_surface.TotalWidth = circle_profile.Width; SEND_GFX_COMMAND( RMGFXEnginePropertyID_Surface, &X_surface, sizeof(X_surface)); alpha_format.AlphaFormat = GFX_ALPHA_FORMAT_LUT_1BPA; SEND_GFX_COMMAND( RMGFXEnginePropertyID_AlphaFormat, &alpha_format, sizeof(alpha_format )); alpha_palette.Alpha0 = 0x00; alpha_palette.Alpha1 = 0xff; alpha_palette.SurfaceID = GFX_SURFACE_ID_X; SEND_GFX_COMMAND( RMGFXEnginePropertyID_AlphaPalette, &alpha_palette, sizeof(alpha_palette)); x += x_inc; y += y_inc; if ((x >= (bitmap_profile.Width - circle_move.DstWidth - x_inc)) || (x <=1)){ color += 0x886010; color &= 0xffffff; alpha = 0xff; x_inc *= -1; } if ((y >= (bitmap_profile.Height - circle_move.DstHeight - y_inc)) || (y <=1)){ color += 0x102066; color &= 0xffffff; alpha = 0xff; y_inc *= -1; } circle_move.DstX = last_x[pic_index] = (x % (bitmap_profile.Width-64)); circle_move.DstY = last_y[pic_index] = (y % (bitmap_profile.Height-64)); circle_move.SrcX = circle_move.DstX + 16; circle_move.SrcY = circle_move.DstY + 16; SEND_GFX_COMMAND( RMGFXEnginePropertyID_ReplaceAndScaleRectangle, &circle_move, sizeof(circle_move)); break; }}int main(int argc, char *argv[]){ struct DCC *pDCC = NULL; struct DCCVideoSource *pVideoSource; struct dh_context dh_info = {0,}; struct GFXEngine_Open_type gfx_profile; RMuint32 close_profile; RMuint32 pic_luma_addr[2], pic_addr[2], pic_index = 0, surface_addr; RMstatus err; init_display_options(&disp_opt); init_video_options(&video_opt); init_playback_options(&play_opt); disp_opt.dh_info = &dh_info; parse_cmdline(argc, argv); err = RUACreateInstance(&pRUA, play_opt.chip_num); if (RMFAILED(err)) { fprintf(stderr, "Error creating RUA instance! %d\n", err); return err; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -