void ImageScale2x(uchar *src,uchar* dst,int w,int h) { ushort *buf16 = new ushort[w*h*2]; uchar *buf32 = new uchar[w*h*4*4]; switch( HQScaleType ) { case SCLT_SCALE2X: //ImageHQShadow(src,w,h); Scale2x(src,dst,w,h); break; case SCLT_HQ2X: Conv32_16(src,buf16,w,h); //skalujemy kolory InitLUTs(); //TODO: moze wystarczy tylko raz wywolac? hq2x_32( (uchar*)buf16, dst, w, h, w*2*4 ); //skalujemy kanal alpha Conv32A_16(src,buf16,w,h); hq2x_32( (uchar*)buf16, buf32, w, h, w*2*4 ); //laczymy kolory i kanal alpha SetAlphaG(dst,w*2,h*2,buf32); delete[] buf32; delete[] buf16; break; default: break; } }
EXPORT(void) FlipScreen() { if (SDL_MUSTLOCK(SDLScreenBuffer)) if (SDL_LockSurface(SDLScreenBuffer) != 0) return; int pitch = SDLScreenBuffer->pitch / sizeof(BGRA); if (Config.scale) { switch (Config.filter) { case I_NONE: DirectScale((dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_SCALE2X: Scale2x( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_EAGLE: Eagle( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_HQ2X: hq2x( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_2XSAI: _2xSaI( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_SUPER_2XSAI: Super2xSaI( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; case I_SUPER_EAGLE: SuperEagle( (dword*)SDLScreenBuffer->pixels, pitch, (dword*)ScreenBuffer, ScreenBufferWidth, ScreenBufferHeight); break; } } else { BGRA* dst = (BGRA*)SDLScreenBuffer->pixels; BGRA* src = ScreenBuffer; for (int i = 0; i < ScreenBufferHeight; ++i) { memcpy(dst, src, ScreenBufferWidth * sizeof(BGRA)); dst += pitch; src += ScreenBufferWidth; } } if (SDL_MUSTLOCK(SDLScreenBuffer)) SDL_UnlockSurface(SDLScreenBuffer); SDL_Flip(SDLScreenBuffer); }