Mercurial > sdl-ios-xcode
changeset 1917:3f54b3ec5a07
Implemented scaling in the D3D renderer
author | Sam Lantinga <slouken@libsdl.org> |
---|---|
date | Wed, 19 Jul 2006 05:45:42 +0000 |
parents | c773b0c0ac89 |
children | 092bd3a019c5 |
files | src/video/win32/SDL_d3drender.c test/testsprite2.c |
diffstat | 2 files changed, 49 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- 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);