--- a/src/video/win32/SDL_d3drender.c Wed Jul 19 05:03:21 2006 +0000
+++ b/src/video/win32/SDL_d3drender.c Wed Jul 19 05:45:42 2006 +0000
@@ -653,6 +653,28 @@
break;
}
+ switch (scaleMode) {
+ case SDL_TextureScaleMode_None:
+ case SDL_TextureScaleMode_Fast:
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MINFILTER,
+ D3DTEXF_POINT);
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MAGFILTER,
+ D3DTEXF_POINT);
+ break;
+ case SDL_TextureScaleMode_Slow:
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MINFILTER,
+ D3DTEXF_LINEAR);
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MAGFILTER,
+ D3DTEXF_LINEAR);
+ break;
+ case SDL_TextureScaleMode_Best:
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MINFILTER,
+ D3DTEXF_GAUSSIANQUAD);
+ IDirect3DDevice9_SetSamplerState(data->device, 0, D3DSAMP_MAGFILTER,
+ D3DTEXF_GAUSSIANQUAD);
+ break;
+ }
+
result =
IDirect3DDevice9_SetTexture(data->device, 0,
(IDirect3DBaseTexture9 *) texturedata->
--- a/test/testsprite2.c Wed Jul 19 05:03:21 2006 +0000
+++ b/test/testsprite2.c Wed Jul 19 05:45:42 2006 +0000
@@ -17,6 +17,7 @@
static SDL_Rect *velocities;
static int sprite_w, sprite_h;
static SDL_TextureBlendMode blendMode = SDL_TextureBlendMode_Mask;
+static SDL_TextureScaleMode scaleMode = SDL_TextureScaleMode_None;
/* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */
static void
@@ -87,12 +88,6 @@
/* Move the sprite, bounce at the wall, and draw */
n = 0;
SDL_RenderFill(NULL, BACKGROUND);
- /*
- for (i = 0; i < num_sprites; ++i) {
- position = &positions[i];
- SDL_RenderFill(position, BACKGROUND);
- }
- */
for (i = 0; i < num_sprites; ++i) {
position = &positions[i];
velocity = &velocities[i];
@@ -108,8 +103,7 @@
}
/* Blit the sprite onto the screen */
- SDL_RenderCopy(sprite, NULL, position, blendMode,
- SDL_TextureScaleMode_None);
+ SDL_RenderCopy(sprite, NULL, position, blendMode, scaleMode);
}
/* Update the screen! */
@@ -142,6 +136,9 @@
if (SDL_strcasecmp(argv[i + 1], "none") == 0) {
blendMode = SDL_TextureBlendMode_None;
consumed = 2;
+ } else if (SDL_strcasecmp(argv[i + 1], "mask") == 0) {
+ blendMode = SDL_TextureBlendMode_Mask;
+ consumed = 2;
} else if (SDL_strcasecmp(argv[i + 1], "blend") == 0) {
blendMode = SDL_TextureBlendMode_Blend;
consumed = 2;
@@ -153,13 +150,30 @@
consumed = 2;
}
}
+ } else if (SDL_strcasecmp(argv[i], "--scale") == 0) {
+ if (argv[i + 1]) {
+ if (SDL_strcasecmp(argv[i + 1], "none") == 0) {
+ scaleMode = SDL_TextureScaleMode_None;
+ consumed = 2;
+ } else if (SDL_strcasecmp(argv[i + 1], "fast") == 0) {
+ scaleMode = SDL_TextureScaleMode_Fast;
+ consumed = 2;
+ } else if (SDL_strcasecmp(argv[i + 1], "slow") == 0) {
+ scaleMode = SDL_TextureScaleMode_Slow;
+ consumed = 2;
+ } else if (SDL_strcasecmp(argv[i + 1], "best") == 0) {
+ scaleMode = SDL_TextureScaleMode_Best;
+ consumed = 2;
+ }
+ }
} else if (SDL_isdigit(*argv[i])) {
num_sprites = SDL_atoi(argv[i]);
consumed = 1;
}
}
if (consumed < 0) {
- fprintf(stderr, "Usage: %s %s [--blend none|blend|add|mod]",
+ fprintf(stderr,
+ "Usage: %s %s [--blend none|mask|blend|add|mod] [--scale none|fast|slow|best]",
argv[0], CommonUsage(state));
quit(1);
}
@@ -192,6 +206,10 @@
quit(2);
}
srand(time(NULL));
+ if (scaleMode != SDL_TextureScaleMode_None) {
+ sprite_w += sprite_w / 2;
+ sprite_h += sprite_h / 2;
+ }
for (i = 0; i < num_sprites; ++i) {
positions[i].x = rand() % (state->window_w - sprite_w);
positions[i].y = rand() % (state->window_h - sprite_h);