--- a/src/video/win32/SDL_d3drender.c Fri Jul 14 06:40:53 2006 +0000
+++ b/src/video/win32/SDL_d3drender.c Fri Jul 14 07:41:16 2006 +0000
@@ -113,7 +113,8 @@
typedef struct
{
float x, y, z;
- float tu, tv;
+ float rhw;
+ float u, v;
} Vertex;
static void
@@ -330,9 +331,17 @@
data->beginScene = SDL_TRUE;
/* Set up parameters for rendering */
+ IDirect3DDevice9_SetVertexShader(data->device, NULL);
+ IDirect3DDevice9_SetFVF(data->device, D3DFVF_XYZRHW | D3DFVF_TEX1);
IDirect3DDevice9_SetRenderState(data->device, D3DRS_CULLMODE,
D3DCULL_NONE);
- IDirect3DDevice9_SetFVF(data->device, D3DFVF_XYZ | D3DFVF_TEX1);
+ IDirect3DDevice9_SetRenderState(data->device, D3DRS_LIGHTING, FALSE);
+ IDirect3DDevice9_SetRenderState(data->device, D3DRS_ALPHABLENDENABLE,
+ TRUE);
+ IDirect3DDevice9_SetRenderState(data->device, D3DRS_SRCBLEND,
+ D3DBLEND_SRCALPHA);
+ IDirect3DDevice9_SetRenderState(data->device, D3DRS_DESTBLEND,
+ D3DBLEND_INVSRCALPHA);
return renderer;
}
@@ -560,7 +569,7 @@
SDL_D3D_TextureData *texturedata =
(SDL_D3D_TextureData *) texture->driverdata;
float minx, miny, maxx, maxy;
- float mintu, maxtu, mintv, maxtv;
+ float minu, maxu, minv, maxv;
Vertex vertices[4];
HRESULT result;
@@ -569,36 +578,43 @@
data->beginScene = SDL_FALSE;
}
- minx = (float) dstrect->x;
- miny = (float) dstrect->y;
- maxx = (float) dstrect->x + dstrect->w;
- maxy = (float) dstrect->y + dstrect->h;
+ minx = (float) dstrect->x - 0.5f;
+ miny = (float) dstrect->y - 0.5f;
+ maxx = (float) dstrect->x + dstrect->w - 0.5f;
+ maxy = (float) dstrect->y + dstrect->h - 0.5f;
- mintu = (float) srcrect->x / texture->w;
- maxtu = (float) (srcrect->x + srcrect->w) / texture->w;
- mintv = (float) srcrect->y / texture->h;
- maxtv = (float) (srcrect->y + srcrect->h) / texture->h;
+ minu = (float) srcrect->x / texture->w;
+ maxu = (float) (srcrect->x + srcrect->w) / texture->w;
+ minv = (float) srcrect->y / texture->h;
+ maxv = (float) (srcrect->y + srcrect->h) / texture->h;
vertices[0].x = minx;
vertices[0].y = miny;
vertices[0].z = 0.0f;
- vertices[0].tu = mintu;
- vertices[0].tv = mintv;
+ vertices[0].rhw = 1.0f;
+ vertices[0].u = minu;
+ vertices[0].v = minv;
+
vertices[1].x = maxx;
vertices[1].y = miny;
vertices[1].z = 0.0f;
- vertices[1].tu = maxtu;
- vertices[1].tv = mintv;
+ vertices[1].rhw = 1.0f;
+ vertices[1].u = maxu;
+ vertices[1].v = minv;
+
vertices[2].x = maxx;
vertices[2].y = maxy;
vertices[2].z = 0.0f;
- vertices[2].tu = maxtu;
- vertices[2].tv = maxtv;
+ vertices[2].rhw = 1.0f;
+ vertices[2].u = maxu;
+ vertices[2].v = maxv;
+
vertices[3].x = minx;
vertices[3].y = maxy;
vertices[3].z = 0.0f;
- vertices[3].tu = mintu;
- vertices[3].tv = maxtv;
+ vertices[3].rhw = 1.0f;
+ vertices[3].u = minu;
+ vertices[3].v = maxv;
result =
IDirect3DDevice9_SetTexture(data->device, 0,
--- a/test/testsprite2.c Fri Jul 14 06:40:53 2006 +0000
+++ b/test/testsprite2.c Fri Jul 14 07:41:16 2006 +0000
@@ -5,7 +5,7 @@
#include "SDL.h"
-#define NUM_WINDOWS 1
+#define NUM_WINDOWS 4
#define WINDOW_W 640
#define WINDOW_H 480
#define NUM_SPRITES 100
@@ -141,22 +141,23 @@
num_sprites = NUM_SPRITES;
window_w = WINDOW_W;
window_h = WINDOW_H;
- while (argc > 1) {
- if (strcmp(argv[argc - 1], "-width") == 0) {
- window_w = atoi(argv[argc]);
- --argc;
- } else if (strcmp(argv[argc - 1], "-height") == 0) {
- window_h = atoi(argv[argc]);
- --argc;
- } else if (strcmp(argv[argc - 1], "-fullscreen") == 0) {
+ for (i = 1; i < argc; ++i) {
+ if (strcmp(argv[i], "-width") == 0 && (i + 1 < argc)) {
+ window_w = atoi(argv[++i]);
+ } else if (strcmp(argv[i], "-height") == 0 && (i + 1 < argc)) {
+ window_h = atoi(argv[++i]);
+ } else if (strcmp(argv[i], "-windows") == 0 && (i + 1 < argc)) {
+ num_windows = atoi(argv[++i]);
+ window_flags &= ~SDL_WINDOW_FULLSCREEN;
+ } else if (strcmp(argv[i], "-fullscreen") == 0) {
num_windows = 1;
window_flags |= SDL_WINDOW_FULLSCREEN;
- --argc;
- } else if (isdigit(argv[argc][0])) {
- num_sprites = atoi(argv[argc]);
+ } else if (isdigit(argv[i][0])) {
+ num_sprites = atoi(argv[i]);
} else {
fprintf(stderr,
- "Usage: %s [-width] [-height] [numsprites]\n", argv[0]);
+ "Usage: %s [-width N] [-height N] [-windows N] [-fullscreen] [numsprites]\n",
+ argv[0]);
quit(1);
}
}
@@ -240,8 +241,7 @@
}
break;
case SDL_KEYDOWN:
- ///* Any keypress quits the app... */
- break;
+ /* Any keypress quits the app... */
case SDL_QUIT:
done = 1;
break;