Figure 8-28 Priority image
● Priority when priority numbers are equal ●SPRITE> RBG0> NBG0> NBG1> NBG2> NBG3
High (front) ←−−−−−−−−−−−→low (back)
Note) POLYGON is included in SPRITE.
In addition, in the default state of SGL, priorities are assigned to each drawing surface as follows.
priority number | ||||||||
---|---|---|---|---|---|---|---|---|
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | |
drawing surface | NBG0 | SPRITE | SPRITE | RGB0 | NBG1 | NBG2 | NBG3 | Not set |
The following sample program (Listing 8-9) actually uses the SGL library functions "slPriorityNbg0~3,Rbg0" to implement scroll priority processing.
Listing 8-9 sample_8_11: Scroll display priority
/*------------------------------------------------ ----------------------*/ /* Scroll Priority Change */ /*------------------------------------------------ ----------------------*/ #include "sgl.h" #include "ss_scroll.h" #define NBG1_CEL_ADR ( VDP2_VRAM_B1 + 0x02000 ) #define NBG1_MAP_ADR ( VDP2_VRAM_B1 + 0x12000 ) #define NBG1_COL_ADR ( VDP2_COLRAM + 0x00200 ) #define RBG0_CEL_ADR VDP2_VRAM_A0 #define RBG0_MAP_ADR VDP2_VRAM_B0 #define RBG0_PAR_ADR ( VDP2_VRAM_A1 + 0x1fe00 ) #define BACK_COL_ADR ( VDP2_VRAM_A1 + 0x1fffe ) void ss_main(void) { Uint16 PryNBG = 4 , PryRBG = 1, PryWRK; FIXED yama_posx = SIPOSX , yama_posy = SIPOSY; ANGLE ascii_angz = DEGtoANG(0.0); slInitSystem(TV_320x224,NULL,1); slTVOff(); slPrint("Sample program 8.11" , slLocate(9,2)); slColRAMMode(CRM16_1024); slBack1ColSet((void *)BACK_COL_ADR , 0); slCharNbg1(COL_TYPE_256 , CHAR_SIZE_1x1); slPageNbg1((void *)NBG1_CEL_ADR , 0 , PNB_1WORD|CN_12BIT); slPlaneNbg1(PL_SIZE_1x1); slMapNbg1((void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR , (void *)NBG1_MAP_ADR); Cel2VRAM(yama_cel , (void *)NBG1_CEL_ADR , 31808); Map2VRAM(yama_map, (void *)NBG1_MAP_ADR, 32, 16, 1, 256); Pal2CRAM(yama_pal , (void *)NBG1_COL_ADR , 256); slRparaInitSet((void *)RBG0_PAR_ADR); slCharRbg0(COL_TYPE_256 , CHAR_SIZE_1x1); slPageRbg0((void *)RBG0_CEL_ADR , 0 , PNB_1WORD|CN_10BIT); slPlaneRA(PL_SIZE_1x1); sl1MapRA((void *)RBG0_MAP_ADR); slOverRA(2); Map2VRAM(ascii_map ,(void *)RBG0_MAP_ADR , 32 , 4 , 0 , 0); slScrPosNbg1(yama_posx, yama_posy); slDispCenterR(toFIXED(160.0) , toFIXED(112.0)); slLookR(toFIXED(128.0) , toFIXED(24.0)); slPriorityNbg1(PryNBG); slPriorityRbg0(PryRBG); slScrAutoDisp(NBG0ON | NBG1ON | RBG0ON); slTVOn(); while( 1 ){ if(yama_posx >= (SX + SIPOSX)) { PryWRK = PryNBG; PryNBG = PryRBG; PryRBG = PryWRK; slPriorityNbg1(PryNBG); slPriorityRbg0(PryRBG); yama_posx = SIPOSX; } slScrPosNbg1(yama_posx, yama_posy); yama_posx += POSX_UP; slZrotR( ascii_angz ); ascii_angz += DEGtoANG(1.0); slSynch(); } }