Mercurial > sdl-ios-xcode
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; |