comparison src/video/windows/SDL_d3drender.c @ 5151:5429daf5e3f9

The DrawRect API is implemented using lines
author Sam Lantinga <slouken@libsdl.org>
date Tue, 01 Feb 2011 20:50:04 -0800
parents c8e049de174c
children be02be2ea897
comparison
equal deleted inserted replaced
5150:ad50b3db78bd 5151:5429daf5e3f9
112 int numrects, const SDL_Rect * rects); 112 int numrects, const SDL_Rect * rects);
113 static int D3D_RenderDrawPoints(SDL_Renderer * renderer, 113 static int D3D_RenderDrawPoints(SDL_Renderer * renderer,
114 const SDL_Point * points, int count); 114 const SDL_Point * points, int count);
115 static int D3D_RenderDrawLines(SDL_Renderer * renderer, 115 static int D3D_RenderDrawLines(SDL_Renderer * renderer,
116 const SDL_Point * points, int count); 116 const SDL_Point * points, int count);
117 static int D3D_RenderDrawRects(SDL_Renderer * renderer,
118 const SDL_Rect ** rects, int count);
119 static int D3D_RenderFillRects(SDL_Renderer * renderer, 117 static int D3D_RenderFillRects(SDL_Renderer * renderer,
120 const SDL_Rect ** rects, int count); 118 const SDL_Rect ** rects, int count);
121 static int D3D_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture, 119 static int D3D_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
122 const SDL_Rect * srcrect, const SDL_Rect * dstrect); 120 const SDL_Rect * srcrect, const SDL_Rect * dstrect);
123 static int D3D_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect, 121 static int D3D_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
444 renderer->LockTexture = D3D_LockTexture; 442 renderer->LockTexture = D3D_LockTexture;
445 renderer->UnlockTexture = D3D_UnlockTexture; 443 renderer->UnlockTexture = D3D_UnlockTexture;
446 renderer->DirtyTexture = D3D_DirtyTexture; 444 renderer->DirtyTexture = D3D_DirtyTexture;
447 renderer->RenderDrawPoints = D3D_RenderDrawPoints; 445 renderer->RenderDrawPoints = D3D_RenderDrawPoints;
448 renderer->RenderDrawLines = D3D_RenderDrawLines; 446 renderer->RenderDrawLines = D3D_RenderDrawLines;
449 renderer->RenderDrawRects = D3D_RenderDrawRects;
450 renderer->RenderFillRects = D3D_RenderFillRects; 447 renderer->RenderFillRects = D3D_RenderFillRects;
451 renderer->RenderCopy = D3D_RenderCopy; 448 renderer->RenderCopy = D3D_RenderCopy;
452 renderer->RenderReadPixels = D3D_RenderReadPixels; 449 renderer->RenderReadPixels = D3D_RenderReadPixels;
453 renderer->RenderWritePixels = D3D_RenderWritePixels; 450 renderer->RenderWritePixels = D3D_RenderWritePixels;
454 renderer->RenderPresent = D3D_RenderPresent; 451 renderer->RenderPresent = D3D_RenderPresent;
985 } 982 }
986 return 0; 983 return 0;
987 } 984 }
988 985
989 static int 986 static int
990 D3D_RenderDrawRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
991 int count)
992 {
993 D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
994 DWORD color;
995 int i;
996 Vertex vertices[5];
997 HRESULT result;
998
999 if (data->beginScene) {
1000 IDirect3DDevice9_BeginScene(data->device);
1001 data->beginScene = SDL_FALSE;
1002 }
1003
1004 D3D_SetBlendMode(data, renderer->blendMode);
1005
1006 result =
1007 IDirect3DDevice9_SetTexture(data->device, 0,
1008 (IDirect3DBaseTexture9 *) 0);
1009 if (FAILED(result)) {
1010 D3D_SetError("SetTexture()", result);
1011 return -1;
1012 }
1013
1014 color = D3DCOLOR_ARGB(renderer->a, renderer->r, renderer->g, renderer->b);
1015
1016 for (i = 0; i < SDL_arraysize(vertices); ++i) {
1017 vertices[i].z = 0.0f;
1018 vertices[i].rhw = 1.0f;
1019 vertices[i].color = color;
1020 vertices[i].u = 0.0f;
1021 vertices[i].v = 0.0f;
1022 }
1023
1024 for (i = 0; i < count; ++i) {
1025 const SDL_Rect *rect = rects[i];
1026
1027 vertices[0].x = (float) rect->x;
1028 vertices[0].y = (float) rect->y;
1029
1030 vertices[1].x = (float) rect->x+rect->w-1;
1031 vertices[1].y = (float) rect->y;
1032
1033 vertices[2].x = (float) rect->x+rect->w-1;
1034 vertices[2].y = (float) rect->y+rect->h-1;
1035
1036 vertices[3].x = (float) rect->x;
1037 vertices[3].y = (float) rect->y+rect->h-1;
1038
1039 vertices[4].x = (float) rect->x;
1040 vertices[4].y = (float) rect->y;
1041
1042 result =
1043 IDirect3DDevice9_DrawPrimitiveUP(data->device, D3DPT_LINESTRIP, 4,
1044 vertices, sizeof(*vertices));
1045
1046 if (FAILED(result)) {
1047 D3D_SetError("DrawPrimitiveUP()", result);
1048 return -1;
1049 }
1050 }
1051 return 0;
1052 }
1053
1054 static int
1055 D3D_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects, 987 D3D_RenderFillRects(SDL_Renderer * renderer, const SDL_Rect ** rects,
1056 int count) 988 int count)
1057 { 989 {
1058 D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata; 990 D3D_RenderData *data = (D3D_RenderData *) renderer->driverdata;
1059 DWORD color; 991 DWORD color;