亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? gbagpu.cpp

?? 一個任天堂掌上游戲機NDS的源代碼
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
                    rotScaleParam = (attr1 >> 9) & 0x1F;                    dx =  (s16)OAMh[(rotScaleParam * 4 * 4) + 3];                    dmx = (s16)OAMh[(rotScaleParam * 4 * 4) + 7];                    dy =  (s16)OAMh[(rotScaleParam * 4 * 4) + 11];                    dmy = (s16)OAMh[(rotScaleParam * 4 * 4) + 15];                    cx = rwidth / 2;                    cy = rheight / 2;                    baseSprite = attr2 & 0x3FF;                    if (dispcnt&0x0040)                        // 1 dimensional                        pitch = (width / 8) * scale;                    else                        // 2 dimensional                        pitch = 0x20;                    rx = (s16)((dmx * (spritey - cy)) - (cx * dx) + (width << 7));                    ry = (s16)((dmy * (spritey - cy)) - (cx * dy) + (height << 7));                    // Draw a rot/scale sprite                    if (attr0&0x2000)                    {			//if(baseSprite && spritey>=0 && spritey<height)                        //printf("GPU: Line #%d: Sprite #%d: %dx%d at %d,%d, rotating, 8-bit\n",curline,oamNum,width,height,x,y);                        // 256 colors                        for (i = x; i < x + rwidth; i++)                        {                            tx = rx >> 8;                            ty = ry >> 8;                            if ((i & 0x1ff) < 240 && tx >= 0 && tx < width && ty >= 0 && ty < height)                            {                                curIdx = (baseSprite + ((ty / 8) * pitch) + ((tx / 8) * scale)) * 32 + ((ty & 7) * 8) + (tx & 7);                                b = VRAMb[0x10000 + curIdx];                                if(b) COLSHIFT(buf+(i&0x1ff)*4, PALh[b+256]);                            }                            rx += dx;                            ry += dy;                        }                    }                    else                    {                        // 16 colors			//if(baseSprite && spritey>=0 && spritey<height)                        //printf("GPU: Line #%d: Sprite #%d: %dx%d at %d,%d, rotating, 4-bit\n",curline,oamNum,width,height,x,y);                        palIdx = ((attr2 >> 8) & 0xF0);                        for (i = x; i < x + rwidth; i++)                        {                            tx = rx >> 8;                            ty = ry >> 8;                            if ((i & 0x1ff) < 240 && tx >= 0 && tx < width && ty >= 0 && ty < height)                            {                                curIdx = (baseSprite + ((ty / 8) * pitch) + ((tx / 8) * scale)) * 32 + ((ty & 7) * 4) + ((tx & 7) / 2);                                b = VRAMb[0x10000 + curIdx];                                if (tx & 1) b>>=4; b&=15;                                if(b) COLSHIFT(buf+(i&0x1ff)*4, PALh[palIdx+b+256]);                            }                            rx += dx;                            ry += dy;                        }                    }                }    } while(oamNum);}// NOTE: Each renderer draws the backgrounds in reverse priority order,// rendering the sprites on each priority level after the background.// Mode 0: 4 tiled BGsvoid gbaGPU::lineM0(u8 *buf){    u16 dispcnt=REG(DISPCNT);    for(int pri=3;pri>=0;pri--)    {        if(ForceBG[3]!=2) if(dispcnt&0x0800 || ForceBG[3]) if((REG(BG3CNT)&3)==pri) scanTile(buf,3);        if(ForceBG[2]!=2) if(dispcnt&0x0400 || ForceBG[2]) if((REG(BG2CNT)&3)==pri) scanTile(buf,2);        if(ForceBG[1]!=2) if(dispcnt&0x0200 || ForceBG[1]) if((REG(BG1CNT)&3)==pri) scanTile(buf,1);        if(ForceBG[0]!=2) if(dispcnt&0x0100 || ForceBG[0]) if((REG(BG0CNT)&3)==pri) scanTile(buf,0);        sprites(buf,pri);    }}// Mode 1: Two tiled and 1 rot BGvoid gbaGPU::lineM1(u8 *buf){    u16 dispcnt=REG(DISPCNT);    for(int pri=3;pri>=0;pri--)    {        if(ForceBG[3]!=2) if(dispcnt&0x0400 || ForceBG[2]) if((REG(BG2CNT)&3)==pri) scanRot(buf,2);        if(ForceBG[2]!=2) if(dispcnt&0x0200 || ForceBG[1]) if((REG(BG1CNT)&3)==pri) scanTile(buf,1);        if(ForceBG[1]!=2) if(dispcnt&0x0100 || ForceBG[0]) if((REG(BG0CNT)&3)==pri) scanTile(buf,0);        sprites(buf,pri);    }}// Mode 2: 2 rot backgroundsvoid gbaGPU::lineM2(u8 *buf){    u16 dispcnt=REG(DISPCNT);    for(int pri=3;pri>=0;pri--)    {        if(ForceBG[3]!=2) if(dispcnt&0x0800 || ForceBG[3]) if((REG(BG3CNT)&3)==pri) scanRot(buf,3);        if(ForceBG[2]!=2) if(dispcnt&0x0400 || ForceBG[2]) if((REG(BG2CNT)&3)==pri) scanRot(buf,2);        sprites(buf,pri);    }}// Mode 3: Flat (rotatable) 16-bit framebuffervoid gbaGPU::lineM3(u8 *buf){    u16 dispcnt=REG(DISPCNT), bg2cnt=REG(BG2CNT), i; int pri;    u32 x,y,ax,ay; s16 dx,dy; u16 mosx,mospx,mosy;    for(pri=3;pri>(bg2cnt&3);pri--) sprites(buf,pri);    if(ForceBG[2]!=2 && (dispcnt&0x0400 || ForceBG[2]==1))    {        x=BGX[0]; y=BGY[0];        if(bg2cnt&0x0040)        {            mosx=(REG(MOSAIC)&0x000F);            mosy=((REG(MOSAIC)&0x00F0)>>4);            mospx=mosx; if(!curline) mospy[2]=mosy;            mospy[2]++; if(mospy[2]<=mosy) y-=mospy[2]*256;            else mospy[2]=0;        } else { mospx=0; mosx=0; }        dx=(signed)REG(BG2PA); dy=(signed)REG(BG2PC);        for(i=0;i<240;i++)        {            ax=x>>8; ay=y>>8;            if (ax >= 0 && ax < 240 && ay >= 0 && ay < 160)            {                if(mospx>=mosx) COLSHIFT(buf+i*4, VRAMh[ay*240+ax]);            }            mospx+=(dx>>8); if(mospx>mosx) mospx=0;            x+=dx; y+=dy;        }    }    for(pri=(bg2cnt&3);pri>=0;pri--) sprites(buf,pri);}// Mode 4: 2 paletted framebuffers, switchable on BG2CNT bit 4void gbaGPU::lineM4(u8 *buf){    u16 dispcnt=REG(DISPCNT), bg2cnt=REG(BG2CNT), i; int pri;    u32 x,y,ax,ay; s16 dx,dy; u8 b=0; u16 mosx,mospx,mosy;    u16 baseIdx=(bg2cnt&0x0010)?0xA000:0;    for(pri=3;pri>(bg2cnt&3);pri--) sprites(buf,pri);    if(ForceBG[2]!=2 && (dispcnt&0x0400 || ForceBG[2]==1))    {        x=BGX[0]; y=BGY[0];        if(bg2cnt&0x0040)        {            mosx=(REG(MOSAIC)&0x000F);            mosy=((REG(MOSAIC)&0x00F0)>>4);            mospx=mosx; if(!curline) mospy[2]=mosy;            mospy[2]++; if(mospy[2]<=mosy) y-=mospy[2]*256;            else mospy[2]=0;        } else { mospx=0; mosx=0; }        dx=(signed)REG(BG2PA); dy=(signed)REG(BG2PC);        for(i=0;i<240;i++)        {            ax=x>>8; ay=y>>8;            if (ax >= 0 && ax < 240 && ay >= 0 && ay < 160)            {                if(mospx>=mosx) b=VRAMb[baseIdx+ay*240+ax];                if(b) COLSHIFT(buf+i*4, PALh[b]);            }            mospx+=(dx>>8); if(mospx>mosx) mospx=0;            x+=dx; y+=dy;        }    }    for(pri=(bg2cnt&3);pri>=0;pri--) sprites(buf,pri);}// Mode 5: 2 reduced-size framebuffers, switchable on BG2CNT b4void gbaGPU::lineM5(u8 *buf){    u16 dispcnt=REG(DISPCNT), bg2cnt=REG(BG2CNT), i; int pri;    u32 x,y,ax,ay; s16 dx,dy; u16 mosx,mospx,mosy;    u16 baseIdx=(bg2cnt&0x0010)?(160*128):0;    for(pri=3;pri>(bg2cnt&3);pri--) sprites(buf,pri);    if(ForceBG[2]!=2 && (dispcnt&0x0400 || ForceBG[2]==1))    {        x=BGX[0]; y=BGY[0];        if(bg2cnt&0x0040)        {            mosx=(REG(MOSAIC)&0x000F);            mosy=((REG(MOSAIC)&0x00F0)>>4);            mospx=mosx; if(!curline) mospy[2]=mosy;            mospy[2]++; if(mospy[2]<=mosy) y-=mospy[2]*256;            else mospy[2]=0;        } else { mospx=0; mosx=0; }        dx=(signed)REG(BG2PA); dy=(signed)REG(BG2PC);        for(i=0;i<240;i++)        {            ax=x>>8; ay=y>>8;            if (ax >= 0 && ax < 160 && ay >= 0 && ay < 128)            {                if(mospx>=mosx) COLSHIFT(buf+i*4, VRAMh[baseIdx+ay*160+ax]);            }            mospx+=(dx>>8); if(mospx>mosx) mospx=0;            x+=dx; y+=dy;        }    }    for(pri=(bg2cnt&3);pri>=0;pri--) sprites(buf,pri);}// Null renderer: Should never have to draw this.void gbaGPU::lineMNULL(u8 *buf){    Logger::log(pluginName) << "How'd we get to lineMNULL?";}// Tell the GPU where it'll be rendering tovoid gbaGPU::setDisplay(u8 *buf){    dispbuffer=buf;}// Render a scanline (wrapper for mode-specific renderers)void gbaGPU::line(){    u16 dispcnt = REG(DISPCNT);    u8 *buffer = dispbuffer;    if(curline >= 0 && curline <= 160)    {	buffer += (curline*240*4);	if(dispcnt&0x0080)  // Blank screen	{	    for(int i=0; i<240; ++i) COLSHIFT(buffer+i*4, 0x00FFFFFF);        }	else  // First draw the backdrop, then the line	{	    for(int i=0; i<240; ++i) COLSHIFT(buffer+i*4, PALh[0]);	    lineM[dispcnt&7](buffer);	}    }    // The line's done, so hblank begins    HBLstart();}// Beginning of hblank: Set hbl bit, fire interruptvoid gbaGPU::HBLstart(){    reg[REG_DISPSTAT].b[0] |= 2;    if(reg[REG_DISPSTAT].b[0] & 16)    {	if((MMU->rdH(0x04000200) & 2) && MMU->rdH(0x04000208))	{	    MMU->wrH(0x04000202, MMU->rdH(0x04000202)&~2);	    CPU->interrupt(CPU_INTERRUPT_NORMAL);	}    }    MMU->event(MMU_EVENT_IMMEDIATE, NULL);        // Tell the GUI to stop hblank in 272 cycles    GUI->eventPush(272, EVENT_HBLANK_END, (vfptr)hblankend, this);}// Finish hblankvoid gbaGPU::HBLend(){    curline++;    // If that end of hblank took us to line 160, we've come to the vblank.    // Fire that off to the CPU    if(curline==160)    {	reg[REG_DISPSTAT].b[0] |= 1;	if(reg[REG_DISPSTAT].b[0] & 8)	{	    if((MMU->rdH(0x04000200) & 1) && MMU->rdH(0x04000208))	    {		MMU->wrH(0x04000202, MMU->rdH(0x04000202)&~1);		CPU->interrupt(CPU_INTERRUPT_NORMAL);	    }	}    }    if(curline>227) curline = 0;    // Update line counter. If we hit a requested vcount, fire    // an interrupt.    reg[REG_VCOUNT].b[0] = curline;    if(curline == reg[REG_DISPSTAT].b[1])    {	reg[REG_DISPSTAT].b[0] |= 4;	if(reg[REG_DISPSTAT].b[0] & 32)	{	    if((MMU->rdH(0x04000200) & 4) && MMU->rdH(0x04000208))	    {		MMU->wrH(0x04000202, MMU->rdH(0x04000202)&~4);		CPU->interrupt(CPU_INTERRUPT_NORMAL);	    }	}    }    else reg[REG_DISPSTAT].b[0] &= ~4;        REG(DISPSTAT)&=(~2);        // Update the background rotation characteristics. If we're at    // the top of the screen, reload them.    BGX[0]+=(s16)REG(BG2PB); BGY[0]+=(s16)REG(BG2PD);    BGX[1]+=(s16)REG(BG3PB); BGY[1]+=(s16)REG(BG3PD);    switch(curline)    {        case 0:           REG(DISPSTAT)&=(~1);           BGX[0]=REG(BG2XL)+(REG(BG2XH)<<16);           BGX[1]=REG(BG3XL)+(REG(BG3XH)<<16);           BGY[0]=REG(BG2YL)+(REG(BG2YH)<<16);           BGY[1]=REG(BG3YL)+(REG(BG3YH)<<16);           break;        case 160:	   REG(DISPSTAT)|=1;	   break;    }    MMU->event(MMU_EVENT_IMMEDIATE, NULL);        // Tell the GUI to draw a line in 960 cycles' time.    GUI->eventPush(960, EVENT_HBLANK_START, (vfptr)drawline, this);}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
人人狠狠综合久久亚洲| 精品剧情v国产在线观看在线| 亚洲在线中文字幕| 日韩视频免费直播| 欧美中文字幕一区| 一本大道久久a久久精二百 | 国产精品久久久久久久久动漫| 色婷婷激情久久| 95精品视频在线| 国产一区二区三区四区五区入口| 国产午夜精品福利| 欧美日韩精品久久久| 不卡一区在线观看| 亚洲在线视频网站| 亚洲男人天堂av网| 一区二区在线电影| 天天射综合影视| 亚洲欧美激情在线| 国产精品理论在线观看| 久久先锋影音av鲁色资源| 久久久久久久综合| 91精品麻豆日日躁夜夜躁| 99vv1com这只有精品| 成人免费视频视频在线观看免费| 国产日韩欧美电影| 国产精品视频线看| 亚洲精品中文在线| 亚洲免费成人av| 午夜视频一区二区| 精品一区二区三区免费毛片爱| 久草中文综合在线| 国产精品一区二区在线播放| 成人福利电影精品一区二区在线观看 | 婷婷开心久久网| 成人一级视频在线观看| 欧美日韩一本到| 中文字幕一区二区三区四区不卡| 亚洲久草在线视频| 成人高清伦理免费影院在线观看| 7777精品伊人久久久大香线蕉的 | 亚洲欧美国产毛片在线| 免费观看久久久4p| 欧美色大人视频| 亚洲一区在线视频| 欧美亚洲国产一区在线观看网站| 中文乱码免费一区二区| 国产毛片精品视频| 欧美国产一区在线| 成人激情综合网站| 亚洲欧洲成人精品av97| 91年精品国产| 丝袜亚洲精品中文字幕一区| 日韩色在线观看| 国产精品1024| 亚洲伊人色欲综合网| 欧美中文字幕一区二区三区亚洲| 丝袜美腿成人在线| 久久久久亚洲蜜桃| 欧美日韩在线三区| 免费高清在线视频一区·| 久久九九久精品国产免费直播| 91在线视频18| 美女在线观看视频一区二区| 中文字幕视频一区二区三区久| 欧美在线影院一区二区| 黄色日韩网站视频| 伊人色综合久久天天| 久久久综合视频| 91久久精品一区二区三| 久久99精品久久久| 亚洲成a人片在线不卡一二三区| 日韩一本二本av| 91猫先生在线| 成人综合激情网| 韩国三级在线一区| 日韩av中文字幕一区二区三区| 综合久久久久综合| 国产日产亚洲精品系列| 日韩久久久久久| 在线免费亚洲电影| av中文字幕亚洲| 99久久精品免费看国产免费软件| 国产综合久久久久久久久久久久| 亚洲va韩国va欧美va精品| 亚洲另类一区二区| 亚洲日穴在线视频| 亚洲欧美偷拍卡通变态| 亚洲欧美一区二区视频| 亚洲人午夜精品天堂一二香蕉| 国产精品伦理在线| 国产精品国产三级国产aⅴ无密码| 337p日本欧洲亚洲大胆精品| 日韩手机在线导航| 久久精品亚洲国产奇米99| 国产视频一区二区在线| 国产精品盗摄一区二区三区| 亚洲自拍偷拍av| 青青青伊人色综合久久| 国产一级精品在线| 在线影视一区二区三区| 欧美一卡在线观看| 国产欧美精品在线观看| 国产精品麻豆视频| 婷婷久久综合九色综合绿巨人| 久久精品免费看| 色综合天天视频在线观看 | 亚洲黄色av一区| 久久精品国产一区二区| 成人av电影在线播放| 欧美三级韩国三级日本三斤| 精品日韩欧美在线| 一区二区三区美女| 国产二区国产一区在线观看| 91黄色免费看| 国产精品婷婷午夜在线观看| 天天影视涩香欲综合网| 日本韩国视频一区二区| 日本一区二区三区四区在线视频| 亚洲妇熟xx妇色黄| 日本韩国欧美国产| 国产亚洲va综合人人澡精品| 麻豆久久久久久久| 欧美亚洲国产一区二区三区va| 国产精品每日更新| 国产成人精品在线看| 久久无码av三级| 国产一区二区日韩精品| 欧美一级国产精品| 日韩精品1区2区3区| 欧美日韩高清不卡| 午夜精品久久久久久久99樱桃| 91色在线porny| 国产精品国产三级国产三级人妇| 国产成人免费视频| 国产无人区一区二区三区| 狠狠v欧美v日韩v亚洲ⅴ| 精品理论电影在线| 成人午夜视频网站| 亚洲靠逼com| 日韩一二三区视频| 国产一区二区主播在线| 国产精品网曝门| 欧亚洲嫩模精品一区三区| 视频一区视频二区中文字幕| 91精品婷婷国产综合久久性色| 男男视频亚洲欧美| 国产精品美女一区二区三区| 日本乱人伦aⅴ精品| 亚洲成人在线免费| 久久综合丝袜日本网| av电影天堂一区二区在线| 视频一区二区欧美| 亚洲国产成人在线| 日韩欧美一级精品久久| 99vv1com这只有精品| 激情文学综合插| 亚洲欧美日韩一区二区 | 日韩经典中文字幕一区| 国产精品视频一二三区| 4438x成人网最大色成网站| 成人国产一区二区三区精品| 日韩不卡在线观看日韩不卡视频| 国产日本欧美一区二区| 欧美电影免费提供在线观看| 99久久99久久精品免费观看 | 精品91自产拍在线观看一区| 日本高清不卡aⅴ免费网站| 国产激情视频一区二区三区欧美 | 亚洲精品视频在线观看网站| 久久综合资源网| 日韩一级片网址| 欧美丰满少妇xxxxx高潮对白| 97久久精品人人做人人爽50路| 激情六月婷婷久久| 国产一区中文字幕| 久久99精品视频| 精品一区二区三区在线播放| 麻豆91精品91久久久的内涵| 亚洲成人av一区| 蜜臀av国产精品久久久久| 日产欧产美韩系列久久99| 日韩高清国产一区在线| 青青草97国产精品免费观看 | 亚洲国产激情av| 中文字幕一区二区三区在线播放| 国产精品久线在线观看| 国产精品乱码妇女bbbb| 亚洲男人天堂av| 亚洲aⅴ怡春院| 黑人精品欧美一区二区蜜桃 | 一区二区三区在线观看动漫| 欧美激情一区二区三区蜜桃视频| 日韩视频一区二区在线观看| 26uuu国产日韩综合| 亚洲码国产岛国毛片在线| 日本欧美肥老太交大片| 风间由美一区二区三区在线观看 | 国产成人精品一区二| 欧美亚洲综合另类| 久久久久国产一区二区三区四区|