Added SDL_SCALEMODE_PIXELART

This is based on the algorithm presented by t3ssel8r:
https://www.youtube.com/watch?v=d6tp43wZqps
This commit is contained in:
Sam Lantinga 2025-03-12 08:45:25 -07:00
parent 853375da61
commit 3e9e22f17d
63 changed files with 15968 additions and 13125 deletions

View file

@ -1488,7 +1488,7 @@ static int SDLCALL surface_testScale(void *arg)
SDL_PIXELFORMAT_ARGB128_FLOAT, SDL_PIXELFORMAT_RGBA128_FLOAT,
};
SDL_ScaleMode modes[] = {
SDL_SCALEMODE_NEAREST, SDL_SCALEMODE_LINEAR
SDL_SCALEMODE_NEAREST, SDL_SCALEMODE_LINEAR, SDL_SCALEMODE_PIXELART
};
SDL_Surface *surface, *result;
SDL_PixelFormat format;
@ -1525,7 +1525,9 @@ static int SDLCALL surface_testScale(void *arg)
deltaA <= MAXIMUM_ERROR,
"Checking %s %s scaling results, expected %.4f,%.4f,%.4f,%.4f got %.4f,%.4f,%.4f,%.4f",
SDL_GetPixelFormatName(format),
mode == SDL_SCALEMODE_NEAREST ? "nearest" : "linear",
mode == SDL_SCALEMODE_NEAREST ? "nearest" :
mode == SDL_SCALEMODE_LINEAR ? "linear" :
mode == SDL_SCALEMODE_PIXELART ? "pixelart" : "unknown",
srcR, srcG, srcB, srcA, actualR, actualG, actualB, actualA);
SDL_DestroySurface(surface);

View file

@ -132,6 +132,7 @@ int main(int argc, char *argv[])
quit(2);
}
SDL_GetTextureSize(drawstate->sprite, &drawstate->sprite_rect.w, &drawstate->sprite_rect.h);
SDL_SetTextureScaleMode(drawstate->sprite, SDL_SCALEMODE_PIXELART);
drawstate->scale_direction = 1;
}