⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2xsaiwin.cpp

📁 著名SFC模拟器Snes9x的源代码。
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        uint32 Nextline = srcPitch >> 1;        for (height; height; height-=1)	{	    bP = (uint16 *) srcPtr;	    dP = (uint32 *) dstPtr;            for (uint32 finish = width; finish; finish -= 1 )            {           	uint32 color4, color5, color6;           	uint32 color1, color2, color3;           	uint32 colorA0, colorA1, colorA2, colorA3,                  colorB0, colorB1, colorB2, colorB3,                  colorS1, colorS2;           	uint32 product1a, product1b,                  product2a, product2b;            	colorB0 = *(bP- Nextline - 1);            	colorB1 = *(bP- Nextline);            	colorB2 = *(bP- Nextline + 1);            	colorB3 = *(bP- Nextline + 2);            	color4 = *(bP - 1);            	color5 = *(bP);            	color6 = *(bP + 1);            	colorS2 = *(bP + 2);            	color1 = *(bP + Nextline - 1);            	color2 = *(bP + Nextline);            	color3 = *(bP + Nextline + 1);            	colorS1 = *(bP + Nextline + 2);            	colorA0 = *(bP + Nextline + Nextline - 1);            	colorA1 = *(bP + Nextline + Nextline);            	colorA2 = *(bP + Nextline + Nextline + 1);            	colorA3 = *(bP + Nextline + Nextline + 2);                //--------------------------------------                if (color2 == color6 && color5 != color3)                {                   product1b = product2a = color2;                   if ((color1 == color2 && color6 == colorS2) ||                       (color2 == colorA1 && color6 == colorB2))                   {                       product1a = INTERPOLATE (color2, color5);                       product1a = INTERPOLATE (color2, product1a);                       product2b = INTERPOLATE (color2, color3);                       product2b = INTERPOLATE (color2, product2b);//                       product1a = color2;//                       product2b = color2;                   }                   else                   {                      product1a = INTERPOLATE (color5, color6);                      product2b = INTERPOLATE (color2, color3);                   }                }                else                if (color5 == color3 && color2 != color6)                {                   product2b = product1a = color5;                   if ((colorB1 == color5 && color3 == colorA2) ||                       (color4 == color5 && color3 == colorS1))                   {                       product1b = INTERPOLATE (color5, color6);                       product1b = INTERPOLATE (color5, product1b);                       product2a = INTERPOLATE (color5, color2);                       product2a = INTERPOLATE (color5, product2a);//                       product1b = color5;//                       product2a = color5;                   }                   else                   {                      product1b = INTERPOLATE (color5, color6);                      product2a = INTERPOLATE (color2, color3);                   }                }                else                if (color5 == color3 && color2 == color6 && color5 != color6)                {                   register int r = 0;                   r += GetResult (color6, color5, color1, colorA1);                   r += GetResult (color6, color5, color4, colorB1);                   r += GetResult (color6, color5, colorA2, colorS1);                   r += GetResult (color6, color5, colorB2, colorS2);                   if (r > 0)                   {                      product1b = product2a = color2;                      product1a = product2b = INTERPOLATE (color5, color6);                   }                   else                   if (r < 0)                   {                      product2b = product1a = color5;                      product1b = product2a = INTERPOLATE (color5, color6);                   }                   else                   {                      product2b = product1a = color5;                      product1b = product2a = color2;                   }                }                else                {                   if ((color2 == color5) || (color3 == color6))                   {                      product1a = color5;                      product2a = color2;                      product1b = color6;                      product2b = color3;                   }                   else                   {                      product1b = product1a = INTERPOLATE (color5, color6);                      product1a = INTERPOLATE (color5, product1a);                      product1b = INTERPOLATE (color6, product1b);                      product2a = product2b = INTERPOLATE (color2, color3);                      product2a = INTERPOLATE (color2, product2a);                      product2b = INTERPOLATE (color3, product2b);                   }                }            	product1a = product1a | (product1b << 16);            	product2a = product2a | (product2b << 16);		*(dP) = product1a;		*(dP+(dstPitch>>2)) = product2a;                bP += 1;                dP += 1;            }//end of for ( finish= width etc..)	    dstPtr += dstPitch << 1;            srcPtr += srcPitch;            deltaPtr += srcPitch;	}; //endof: for (height; height; height--)#ifdef MMX    }#endif}/*ONLY use with 640x480x16 or higher resolutions*//*Only use this if 2*width * 2*height fits on the current screen*/void _2xSaI(uint8 *srcPtr, uint32 srcPitch,	     uint8 *deltaPtr,	     uint8 *dstPtr, uint32 dstPitch, int width, int height){    uint32 *dP;    uint16 *bP;    uint16 *xP;#ifdef MMX    if (mmx_cpu && width != 512)    {	for (height; height; height-=1)	{	    bP = (uint16 *) srcPtr;	    xP = (uint16 *) deltaPtr;	    dP = (uint32 *) dstPtr;            _2xSaILine  ((uint8 *) bP, (uint8 *) xP, srcPitch, width, (uint8 *)dP, dstPitch);	    dstPtr += dstPitch << 1;	    srcPtr += srcPitch;            deltaPtr += srcPitch;        }    }    else    {#endif        uint32 Nextline = srcPitch >> 1;        for (height; height; height-=1)	{	    bP = (uint16 *) srcPtr;	    dP = (uint32 *) dstPtr;            for (uint32 finish = width; finish; finish -= 1 )            {                register uint32 colorA, colorB;                uint32 colorC, colorD,                       colorE, colorF, colorG, colorH,                       colorI, colorJ, colorK, colorL,                       colorM, colorN, colorO, colorP;                uint32 product, product1, product2;//---------------------------------------// Map of the pixels:                    I|E F|J//                                       G|A B|K//                                       H|C D|L//                                       M|N O|P                colorI = *(bP- Nextline - 1);                colorE = *(bP- Nextline);                colorF = *(bP- Nextline + 1);                colorJ = *(bP- Nextline + 2);                colorG = *(bP - 1);                colorA = *(bP);                colorB = *(bP + 1);                colorK = *(bP + 2);                colorH = *(bP + Nextline - 1);                colorC = *(bP + Nextline);                colorD = *(bP + Nextline + 1);                colorL = *(bP + Nextline + 2);                colorM = *(bP + Nextline + Nextline - 1);                colorN = *(bP + Nextline + Nextline);                colorO = *(bP + Nextline + Nextline + 1);                colorP = *(bP + Nextline + Nextline + 2);                        if ((colorA == colorD) && (colorB != colorC))                        {                           if ( ((colorA == colorE) && (colorB == colorL)) ||                                ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ)) )                           {                              product = colorA;                           }                           else                           {                              product = INTERPOLATE(colorA, colorB);                           }                           if (((colorA == colorG) && (colorC == colorO)) ||                               ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM)) )                           {                              product1 = colorA;                           }                           else                           {                              product1 = INTERPOLATE(colorA, colorC);                           }                           product2 = colorA;                        }                        else                        if ((colorB == colorC) && (colorA != colorD))                        {                           if (((colorB == colorF) && (colorA == colorH)) ||                               ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI)) )                           {                              product = colorB;                           }                           else                           {                              product = INTERPOLATE(colorA, colorB);                           }                           if (((colorC == colorH) && (colorA == colorF)) ||                               ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI)) )                           {                              product1 = colorC;                           }                           else                           {                              product1 = INTERPOLATE(colorA, colorC);                           }                           product2 = colorB;                        }                        else                        if ((colorA == colorD) && (colorB == colorC))                        {                           if (colorA == colorB)                           {                              product = colorA;                              product1 = colorA;                              product2 = colorA;                           }                           else                           {                              register int r = 0;                              product1 = INTERPOLATE(colorA, colorC);                              product = INTERPOLATE(colorA, colorB);                              r += GetResult1 (colorA, colorB, colorG, colorE, colorI);                              r += GetResult2 (colorB, colorA, colorK, colorF, colorJ);                              r += GetResult2 (colorB, colorA, colorH, colorN, colorM);                              r += GetResult1 (colorA, colorB, colorL, colorO, colorP);                              if (r > 0)                                  product2 = colorA;                              else                              if (r < 0)                                  product2 = colorB;                              else                              {                                  product2 = Q_INTERPOLATE(colorA, colorB, colorC, colorD);                              }                           }                        }                        else                        {                           product2 = Q_INTERPOLATE(colorA, colorB, colorC, colorD);                           if ((colorA == colorC) && (colorA == colorF) && (colorB != colorE) && (colorB == colorJ))                           {                              product = colorA;                           }                           else                           if ((colorB == colorE) && (colorB == colorD) && (colorA != colorF) && (colorA == colorI))                           {                              product = colorB;                           }                           else                           {                              product = INTERPOLATE(colorA, colorB);                           }                           if ((colorA == colorB) && (colorA == colorH) && (colorG != colorC) && (colorC == colorM))                           {                              product1 = colorA;                           }                           else                           if ((colorC == colorG) && (colorC == colorD) && (colorA != colorH) && (colorA == colorI))                           {                              product1 = colorC;                           }                           else                           {                              product1 = INTERPOLATE(colorA, colorC);                           }                        }                        product = colorA | (product << 16);                        product1 = product1 | (product2 << 16);			*(dP) = product;			*(dP+(dstPitch>>2)) = product1;                    bP += 1;                    dP += 1;                }//end of for ( finish= width etc..)	    dstPtr += dstPitch << 1;            srcPtr += srcPitch;            deltaPtr += srcPitch;	}; //endof: for (height; height; height--)#ifdef MMX    }#endif}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -