annotate src/video/win32/SDL_gdirender.c @ 1730:e70477157db9 SDL-1.3

Starting support for Direct3D render driver.
author Sam Lantinga <slouken@libsdl.org>
date Sat, 08 Jul 2006 18:06:02 +0000
parents
children c2a27da60b18
rev   line source
1730
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
1 /*
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
2 SDL - Simple DirectMedia Layer
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
3 Copyright (C) 1997-2006 Sam Lantinga
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
4
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
5 This library is free software; you can redistribute it and/or
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
6 modify it under the terms of the GNU Lesser General Public
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
7 License as published by the Free Software Foundation; either
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
8 version 2.1 of the License, or (at your option) any later version.
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
9
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
10 This library is distributed in the hope that it will be useful,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
13 Lesser General Public License for more details.
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
14
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
16 License along with this library; if not, write to the Free Software
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
18
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
19 Sam Lantinga
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
20 slouken@libsdl.org
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
21 */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
22 #include "SDL_config.h"
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
23
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
24 #if SDL_VIDEO_RENDER_GDI
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
25
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
26 #include "SDL_win32video.h"
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
27 #include "../SDL_yuv_sw_c.h"
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
28
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
29 /* GDI renderer implementation */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
30
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
31 static SDL_Renderer *SDL_GDI_CreateRenderer(SDL_Window * window,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
32 Uint32 flags);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
33 static int SDL_GDI_CreateTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
34 SDL_Texture * texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
35 static int SDL_GDI_QueryTexturePixels(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
36 SDL_Texture * texture, void **pixels,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
37 int *pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
38 static int SDL_GDI_SetTexturePalette(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
39 SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
40 const SDL_Color * colors, int firstcolor,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
41 int ncolors);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
42 static int SDL_GDI_GetTexturePalette(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
43 SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
44 SDL_Color * colors, int firstcolor,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
45 int ncolors);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
46 static int SDL_GDI_UpdateTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
47 SDL_Texture * texture, const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
48 const void *pixels, int pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
49 static int SDL_GDI_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
50 const SDL_Rect * rect, int markDirty,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
51 void **pixels, int *pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
52 static void SDL_GDI_UnlockTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
53 SDL_Texture * texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
54 static void SDL_GDI_DirtyTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
55 SDL_Texture * texture, int numrects,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
56 const SDL_Rect * rects);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
57 static void SDL_GDI_SelectRenderTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
58 SDL_Texture * texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
59 static int SDL_GDI_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
60 Uint32 color);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
61 static int SDL_GDI_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
62 const SDL_Rect * srcrect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
63 const SDL_Rect * dstrect, int blendMode,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
64 int scaleMode);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
65 static int SDL_GDI_RenderReadPixels(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
66 const SDL_Rect * rect, void *pixels,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
67 int pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
68 static int SDL_GDI_RenderWritePixels(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
69 const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
70 const void *pixels, int pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
71 static void SDL_GDI_RenderPresent(SDL_Renderer * renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
72 static void SDL_GDI_DestroyTexture(SDL_Renderer * renderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
73 SDL_Texture * texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
74 static void SDL_GDI_DestroyRenderer(SDL_Renderer * renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
75
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
76
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
77 SDL_RenderDriver SDL_GDI_RenderDriver = {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
78 SDL_GDI_CreateRenderer,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
79 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
80 "gdi",
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
81 (SDL_Renderer_PresentDiscard |
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
82 SDL_Renderer_PresentCopy | SDL_Renderer_RenderTarget),
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
83 (SDL_TextureBlendMode_None |
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
84 SDL_TextureBlendMode_Mask | SDL_TextureBlendMode_Blend),
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
85 (SDL_TextureScaleMode_None | SDL_TextureScaleMode_Fast),
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
86 11,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
87 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
88 SDL_PixelFormat_Index8,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
89 SDL_PixelFormat_RGB555,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
90 SDL_PixelFormat_RGB565,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
91 SDL_PixelFormat_RGB888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
92 SDL_PixelFormat_BGR888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
93 SDL_PixelFormat_ARGB8888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
94 SDL_PixelFormat_RGBA8888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
95 SDL_PixelFormat_ABGR8888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
96 SDL_PixelFormat_BGRA8888,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
97 SDL_PixelFormat_YUY2,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
98 SDL_PixelFormat_UYVY},
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
99 0,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
100 0}
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
101 };
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
102
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
103 typedef struct
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
104 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
105 HWND hwnd;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
106 HDC window_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
107 HDC render_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
108 HDC memory_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
109 HDC current_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
110 LPBITMAPINFO bmi;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
111 HBITMAP window_bmp;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
112 void *window_pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
113 int window_pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
114 } SDL_GDI_RenderData;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
115
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
116 typedef struct
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
117 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
118 SDL_SW_YUVTexture *yuv;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
119 Uint32 format;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
120 HPALETTE hpal;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
121 HBITMAP hbm;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
122 void *pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
123 int pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
124 } SDL_GDI_TextureData;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
125
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
126 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
127 UpdateYUVTextureData(SDL_Texture * texture)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
128 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
129 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
130 SDL_Rect rect;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
131
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
132 rect.x = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
133 rect.y = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
134 rect.w = texture->w;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
135 rect.h = texture->h;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
136 SDL_SW_CopyYUVToRGB(data->yuv, &rect, data->format, texture->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
137 texture->h, data->pixels, data->pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
138 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
139
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
140 void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
141 GDI_AddRenderDriver(_THIS)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
142 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
143 SDL_AddRenderDriver(0, &SDL_GDI_RenderDriver);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
144 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
145
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
146 SDL_Renderer *
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
147 SDL_GDI_CreateRenderer(SDL_Window * window, Uint32 flags)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
148 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
149 SDL_WindowData *windowdata = (SDL_WindowData *) window->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
150 SDL_Renderer *renderer;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
151 SDL_GDI_RenderData *data;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
152 int bmi_size;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
153 HBITMAP hbm;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
154
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
155 renderer = (SDL_Renderer *) SDL_malloc(sizeof(*renderer));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
156 if (!renderer) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
157 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
158 return NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
159 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
160 SDL_zerop(renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
161
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
162 data = (SDL_GDI_RenderData *) SDL_malloc(sizeof(*data));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
163 if (!data) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
164 SDL_GDI_DestroyRenderer(renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
165 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
166 return NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
167 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
168 SDL_zerop(data);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
169
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
170 data->hwnd = windowdata->hwnd;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
171 data->window_hdc = GetDC(data->hwnd);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
172 data->render_hdc = CreateCompatibleDC(data->window_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
173 data->memory_hdc = CreateCompatibleDC(data->window_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
174 data->current_hdc = data->window_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
175
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
176 /* Fill in the compatible bitmap info */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
177 bmi_size = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
178 data->bmi = (LPBITMAPINFO) SDL_malloc(bmi_size);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
179 if (!data->bmi) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
180 SDL_GDI_DestroyRenderer(renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
181 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
182 return NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
183 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
184 SDL_memset(data->bmi, 0, bmi_size);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
185 data->bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
186
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
187 hbm = CreateCompatibleBitmap(data->window_hdc, 1, 1);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
188 GetDIBits(data->window_hdc, hbm, 0, 1, NULL, data->bmi, DIB_RGB_COLORS);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
189 GetDIBits(data->window_hdc, hbm, 0, 1, NULL, data->bmi, DIB_RGB_COLORS);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
190 DeleteObject(hbm);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
191
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
192 renderer->CreateTexture = SDL_GDI_CreateTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
193 renderer->QueryTexturePixels = SDL_GDI_QueryTexturePixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
194 renderer->SetTexturePalette = SDL_GDI_SetTexturePalette;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
195 renderer->GetTexturePalette = SDL_GDI_GetTexturePalette;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
196 renderer->UpdateTexture = SDL_GDI_UpdateTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
197 renderer->LockTexture = SDL_GDI_LockTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
198 renderer->UnlockTexture = SDL_GDI_UnlockTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
199 renderer->DirtyTexture = SDL_GDI_DirtyTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
200 renderer->SelectRenderTexture = SDL_GDI_SelectRenderTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
201 renderer->RenderFill = SDL_GDI_RenderFill;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
202 renderer->RenderCopy = SDL_GDI_RenderCopy;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
203 renderer->RenderReadPixels = SDL_GDI_RenderReadPixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
204 renderer->RenderWritePixels = SDL_GDI_RenderWritePixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
205 renderer->RenderPresent = SDL_GDI_RenderPresent;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
206 renderer->DestroyTexture = SDL_GDI_DestroyTexture;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
207 renderer->DestroyRenderer = SDL_GDI_DestroyRenderer;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
208 renderer->info = SDL_GDI_RenderDriver.info;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
209 renderer->window = window->id;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
210 renderer->driverdata = data;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
211
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
212 renderer->info.flags = SDL_Renderer_RenderTarget;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
213
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
214 return renderer;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
215 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
216
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
217 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
218 SDL_GDI_CreateTexture(SDL_Renderer * renderer, SDL_Texture * texture)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
219 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
220 SDL_GDI_RenderData *renderdata =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
221 (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
222 SDL_Window *window = SDL_GetWindowFromID(renderer->window);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
223 SDL_VideoDisplay *display = SDL_GetDisplayFromWindow(window);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
224 SDL_GDI_TextureData *data;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
225
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
226 data = (SDL_GDI_TextureData *) SDL_malloc(sizeof(*data));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
227 if (!data) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
228 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
229 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
230 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
231 SDL_zerop(data);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
232
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
233 texture->driverdata = data;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
234
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
235 if (SDL_ISPIXELFORMAT_FOURCC(texture->format)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
236 if (texture->access == SDL_TextureAccess_Render) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
237 SDL_SetError("Rendering to YUV format textures is not supported");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
238 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
239 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
240 data->yuv = SDL_SW_CreateYUVTexture(texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
241 if (!data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
242 SDL_GDI_DestroyTexture(renderer, texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
243 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
244 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
245 data->format = display->current_mode.format;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
246 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
247 data->format = texture->format;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
248 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
249 data->pitch = (texture->w * SDL_BYTESPERPIXEL(data->format));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
250
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
251 if (data->yuv || texture->access == SDL_TextureAccess_Local
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
252 || texture->format != SDL_GetCurrentDisplayMode()->format) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
253 int bmi_size;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
254 LPBITMAPINFO bmi;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
255
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
256 bmi_size = sizeof(BITMAPINFOHEADER) + 256 * sizeof(RGBQUAD);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
257 bmi = (LPBITMAPINFO) SDL_malloc(bmi_size);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
258 if (!bmi) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
259 SDL_GDI_DestroyTexture(renderer, texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
260 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
261 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
262 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
263 SDL_memset(bmi, 0, bmi_size);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
264 bmi->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
265 bmi->bmiHeader.biWidth = texture->w;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
266 bmi->bmiHeader.biHeight = -texture->h; /* topdown bitmap */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
267 bmi->bmiHeader.biPlanes = 1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
268 bmi->bmiHeader.biSizeImage = texture->h * data->pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
269 bmi->bmiHeader.biXPelsPerMeter = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
270 bmi->bmiHeader.biYPelsPerMeter = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
271 bmi->bmiHeader.biClrUsed = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
272 bmi->bmiHeader.biClrImportant = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
273 bmi->bmiHeader.biBitCount = SDL_BYTESPERPIXEL(data->format) * 8;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
274 if (SDL_ISPIXELFORMAT_INDEXED(data->format)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
275 int i, ncolors;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
276 LOGPALETTE *palette;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
277
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
278 bmi->bmiHeader.biCompression = BI_RGB;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
279 ncolors = (1 << SDL_BITSPERPIXEL(data->format));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
280 palette =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
281 (LOGPALETTE *) SDL_malloc(sizeof(*palette) +
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
282 ncolors * sizeof(PALETTEENTRY));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
283 if (!palette) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
284 SDL_free(bmi);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
285 SDL_GDI_DestroyTexture(renderer, texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
286 SDL_OutOfMemory();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
287 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
288 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
289 palette->palVersion = 0x300;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
290 palette->palNumEntries = ncolors;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
291 for (i = 0; i < ncolors; ++i) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
292 palette->palPalEntry[i].peRed = 0xFF;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
293 palette->palPalEntry[i].peGreen = 0xFF;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
294 palette->palPalEntry[i].peBlue = 0xFF;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
295 palette->palPalEntry[i].peFlags = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
296 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
297 data->hpal = CreatePalette(palette);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
298 SDL_free(palette);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
299 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
300 int bpp;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
301 Uint32 Rmask, Gmask, Bmask, Amask;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
302
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
303 bmi->bmiHeader.biCompression = BI_BITFIELDS;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
304 SDL_PixelFormatEnumToMasks(data->format, &bpp, &Rmask, &Gmask,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
305 &Bmask, &Amask);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
306 ((Uint32 *) bmi->bmiColors)[0] = Rmask;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
307 ((Uint32 *) bmi->bmiColors)[1] = Gmask;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
308 ((Uint32 *) bmi->bmiColors)[2] = Bmask;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
309 data->hpal = NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
310 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
311 data->hbm =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
312 CreateDIBSection(renderdata->memory_hdc, bmi, DIB_RGB_COLORS,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
313 &data->pixels, NULL, 0);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
314 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
315 data->hbm =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
316 CreateCompatibleBitmap(renderdata->window_hdc, texture->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
317 texture->h);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
318 data->pixels = NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
319 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
320 if (!data->hbm) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
321 SDL_GDI_DestroyTexture(renderer, texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
322 WIN_SetError("Couldn't create bitmap");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
323 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
324 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
325 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
326 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
327
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
328 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
329 SDL_GDI_QueryTexturePixels(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
330 void **pixels, int *pitch)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
331 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
332 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
333
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
334 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
335 return SDL_SW_QueryYUVTexturePixels(data->yuv, pixels, pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
336 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
337 *pixels = data->pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
338 *pitch = texture->w * SDL_BYTESPERPIXEL(texture->format);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
339 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
340 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
341 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
342
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
343 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
344 SDL_GDI_SetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
345 const SDL_Color * colors, int firstcolor,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
346 int ncolors)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
347 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
348 SDL_GDI_RenderData *renderdata =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
349 (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
350 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
351
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
352 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
353 SDL_SetError("YUV textures don't have a palette");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
354 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
355 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
356 PALETTEENTRY entries[256];
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
357 int i;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
358
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
359 for (i = 0; i < ncolors; ++i) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
360 entries[i].peRed = colors[i].r;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
361 entries[i].peGreen = colors[i].g;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
362 entries[i].peBlue = colors[i].b;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
363 entries[i].peFlags = 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
364 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
365 if (!SetPaletteEntries(data->hpal, firstcolor, ncolors, entries)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
366 WIN_SetError("SetPaletteEntries()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
367 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
368 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
369 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
370 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
371 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
372
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
373 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
374 SDL_GDI_GetTexturePalette(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
375 SDL_Color * colors, int firstcolor, int ncolors)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
376 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
377 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
378
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
379 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
380 SDL_SetError("YUV textures don't have a palette");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
381 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
382 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
383 PALETTEENTRY entries[256];
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
384 int i;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
385
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
386 if (!GetPaletteEntries(data->hpal, firstcolor, ncolors, entries)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
387 WIN_SetError("GetPaletteEntries()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
388 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
389 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
390 for (i = 0; i < ncolors; ++i) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
391 colors[i].r = entries[i].peRed;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
392 colors[i].g = entries[i].peGreen;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
393 colors[i].b = entries[i].peBlue;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
394 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
395 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
396 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
397 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
398
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
399 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
400 SDL_GDI_UpdateTexture(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
401 const SDL_Rect * rect, const void *pixels, int pitch)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
402 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
403 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
404
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
405 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
406 if (SDL_SW_UpdateYUVTexture(data->yuv, rect, pixels, pitch) < 0) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
407 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
408 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
409 UpdateYUVTextureData(texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
410 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
411 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
412 SDL_GDI_RenderData *renderdata =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
413 (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
414
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
415 if (data->pixels) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
416 Uint8 *src, *dst;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
417 int row;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
418 size_t length;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
419
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
420 src = (Uint8 *) pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
421 dst =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
422 (Uint8 *) data->pixels + rect->y * data->pitch +
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
423 rect->x * SDL_BYTESPERPIXEL(texture->format);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
424 length = rect->w * SDL_BYTESPERPIXEL(texture->format);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
425 for (row = 0; row < rect->h; ++row) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
426 SDL_memcpy(dst, src, length);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
427 src += pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
428 dst += data->pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
429 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
430 } else if (rect->w == texture->w && pitch == data->pitch) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
431 if (!SetDIBits
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
432 (renderdata->window_hdc, data->hbm, rect->y, rect->h, pixels,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
433 renderdata->bmi, DIB_RGB_COLORS)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
434 WIN_SetError("SetDIBits()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
435 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
436 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
437 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
438 SDL_SetError
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
439 ("FIXME: Need to allocate temporary memory and do GetDIBits() followed by SetDIBits(), since we can only set blocks of scanlines at a time");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
440 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
441 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
442 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
443 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
444 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
445
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
446 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
447 SDL_GDI_LockTexture(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
448 const SDL_Rect * rect, int markDirty, void **pixels,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
449 int *pitch)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
450 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
451 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
452
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
453 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
454 return SDL_SW_LockYUVTexture(data->yuv, rect, markDirty, pixels,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
455 pitch);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
456 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
457 GdiFlush();
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
458 *pixels =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
459 (void *) ((Uint8 *) data->pixels + rect->y * data->pitch +
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
460 rect->x * SDL_BYTESPERPIXEL(texture->format));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
461 *pitch = data->pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
462 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
463 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
464 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
465
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
466 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
467 SDL_GDI_UnlockTexture(SDL_Renderer * renderer, SDL_Texture * texture)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
468 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
469 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
470
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
471 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
472 SDL_SW_UnlockYUVTexture(data->yuv);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
473 UpdateYUVTextureData(texture);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
474 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
475 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
476
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
477 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
478 SDL_GDI_DirtyTexture(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
479 int numrects, const SDL_Rect * rects)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
480 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
481 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
482
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
483 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
484 SDL_GDI_SelectRenderTexture(SDL_Renderer * renderer, SDL_Texture * texture)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
485 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
486 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
487
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
488 if (texture) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
489 SDL_GDI_TextureData *texturedata =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
490 (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
491 SelectObject(data->render_hdc, texturedata->hbm);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
492 if (texturedata->hpal) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
493 SelectPalette(data->render_hdc, texturedata->hpal, TRUE);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
494 RealizePalette(data->render_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
495 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
496 data->current_hdc = data->render_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
497 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
498 data->current_hdc = data->current_hdc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
499 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
500 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
501
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
502 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
503 SDL_GDI_RenderFill(SDL_Renderer * renderer, const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
504 Uint32 color)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
505 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
506 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
507 Uint8 r, g, b;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
508 RECT rc;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
509 static HBRUSH brush;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
510 int status;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
511
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
512 r = (Uint8) ((color >> 16) & 0xFF);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
513 g = (Uint8) ((color >> 8) & 0xFF);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
514 b = (Uint8) (color & 0xFF);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
515
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
516 rc.left = rect->x;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
517 rc.top = rect->y;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
518 rc.right = rect->x + rect->w + 1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
519 rc.bottom = rect->y + rect->h + 1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
520
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
521 /* Should we cache the brushes? .. it looks like GDI does for us. :) */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
522 brush = CreateSolidBrush(RGB(r, g, b));
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
523 SelectObject(data->current_hdc, brush);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
524 status = FillRect(data->current_hdc, &rc, brush);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
525 DeleteObject(brush);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
526
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
527 if (!status) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
528 WIN_SetError("FillRect()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
529 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
530 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
531 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
532 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
533
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
534 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
535 SDL_GDI_RenderCopy(SDL_Renderer * renderer, SDL_Texture * texture,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
536 const SDL_Rect * srcrect, const SDL_Rect * dstrect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
537 int blendMode, int scaleMode)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
538 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
539 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
540 SDL_GDI_TextureData *texturedata =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
541 (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
542
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
543 SelectObject(data->memory_hdc, texturedata->hbm);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
544 if (texturedata->hpal) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
545 SelectPalette(data->memory_hdc, texturedata->hpal, TRUE);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
546 RealizePalette(data->memory_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
547 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
548 if (blendMode & (SDL_TextureBlendMode_Mask | SDL_TextureBlendMode_Blend)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
549 static BLENDFUNCTION blendFunc = {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
550 AC_SRC_OVER,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
551 0,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
552 255,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
553 AC_SRC_ALPHA
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
554 };
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
555 /* FIXME: GDI uses premultiplied alpha! */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
556 if (!AlphaBlend
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
557 (data->current_hdc, dstrect->x, dstrect->y, dstrect->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
558 dstrect->h, data->memory_hdc, srcrect->x, srcrect->y, srcrect->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
559 srcrect->h, blendFunc)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
560 WIN_SetError("AlphaBlend()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
561 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
562 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
563 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
564 if (srcrect->w == dstrect->w && srcrect->h == dstrect->h) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
565 if (!BitBlt
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
566 (data->current_hdc, dstrect->x, dstrect->y, dstrect->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
567 srcrect->h, data->memory_hdc, srcrect->x, srcrect->y,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
568 SRCCOPY)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
569 WIN_SetError("BitBlt()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
570 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
571 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
572 } else {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
573 if (!StretchBlt
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
574 (data->current_hdc, dstrect->x, dstrect->y, dstrect->w,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
575 dstrect->h, data->memory_hdc, srcrect->x, srcrect->y,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
576 srcrect->w, srcrect->h, SRCCOPY)) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
577 WIN_SetError("StretchBlt()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
578 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
579 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
580 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
581 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
582 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
583 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
584
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
585 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
586 CreateWindowDIB(SDL_GDI_RenderData * data, SDL_Window * window)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
587 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
588 data->window_pitch = window->w * (data->bmi->bmiHeader.biBitCount / 8);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
589 data->bmi->bmiHeader.biWidth = window->w;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
590 data->bmi->bmiHeader.biHeight = -window->h;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
591 data->bmi->bmiHeader.biSizeImage =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
592 window->h * (data->bmi->bmiHeader.biBitCount / 8);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
593 data->window_bmp =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
594 CreateDIBSection(data->window_hdc, data->bmi, DIB_RGB_COLORS,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
595 &data->window_pixels, NULL, 0);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
596 if (!data->window_bmp) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
597 WIN_SetError("CreateDIBSection()");
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
598 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
599 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
600 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
601 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
602
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
603 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
604 SDL_GDI_RenderReadPixels(SDL_Renderer * renderer, const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
605 void *pixels, int pitch)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
606 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
607 SDL_Window *window = SDL_GetWindowFromID(renderer->window);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
608 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
609
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
610 if (!data->window_bmp) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
611 if (CreateWindowDIB(data, window) < 0) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
612 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
613 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
614 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
615
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
616 SelectObject(data->memory_hdc, data->window_bmp);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
617 BitBlt(data->memory_hdc, rect->x, rect->y, rect->w, rect->h,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
618 data->window_hdc, rect->x, rect->y, SRCCOPY);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
619
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
620 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
621 int bpp = data->bmi->bmiHeader.biBitCount / 8;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
622 Uint8 *src =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
623 (Uint8 *) data->window_pixels + rect->y * data->window_pitch +
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
624 rect->x * bpp;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
625 Uint8 *dst = (Uint8 *) pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
626 int row;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
627
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
628 for (row = 0; row < rect->h; ++row) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
629 SDL_memcpy(dst, src, rect->w * bpp);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
630 src += data->window_pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
631 dst += pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
632 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
633 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
634
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
635 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
636 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
637
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
638 static int
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
639 SDL_GDI_RenderWritePixels(SDL_Renderer * renderer, const SDL_Rect * rect,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
640 const void *pixels, int pitch)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
641 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
642 SDL_Window *window = SDL_GetWindowFromID(renderer->window);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
643 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
644
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
645 if (!data->window_bmp) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
646 if (CreateWindowDIB(data, window) < 0) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
647 return -1;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
648 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
649 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
650
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
651 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
652 int bpp = data->bmi->bmiHeader.biBitCount / 8;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
653 Uint8 *src = (Uint8 *) pixels;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
654 Uint8 *dst =
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
655 (Uint8 *) data->window_pixels + rect->y * data->window_pitch +
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
656 rect->x * bpp;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
657 int row;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
658
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
659 for (row = 0; row < rect->h; ++row) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
660 SDL_memcpy(dst, src, rect->w * bpp);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
661 src += pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
662 dst += data->window_pitch;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
663 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
664 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
665
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
666 SelectObject(data->memory_hdc, data->window_bmp);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
667 BitBlt(data->window_hdc, rect->x, rect->y, rect->w, rect->h,
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
668 data->memory_hdc, rect->x, rect->y, SRCCOPY);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
669
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
670 return 0;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
671 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
672
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
673 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
674 SDL_GDI_RenderPresent(SDL_Renderer * renderer)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
675 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
676 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
677
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
678 static void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
679 SDL_GDI_DestroyTexture(SDL_Renderer * renderer, SDL_Texture * texture)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
680 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
681 SDL_GDI_TextureData *data = (SDL_GDI_TextureData *) texture->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
682
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
683 if (!data) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
684 return;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
685 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
686 if (data->yuv) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
687 SDL_SW_DestroyYUVTexture(data->yuv);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
688 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
689 if (data->hpal) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
690 DeleteObject(data->hpal);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
691 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
692 if (data->hbm) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
693 DeleteObject(data->hbm);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
694 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
695 SDL_free(data);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
696 texture->driverdata = NULL;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
697 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
698
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
699 void
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
700 SDL_GDI_DestroyRenderer(SDL_Renderer * renderer)
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
701 {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
702 SDL_GDI_RenderData *data = (SDL_GDI_RenderData *) renderer->driverdata;
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
703
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
704 if (data) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
705 ReleaseDC(data->hwnd, data->window_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
706 DeleteDC(data->render_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
707 DeleteDC(data->memory_hdc);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
708 if (data->bmi) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
709 SDL_free(data->bmi);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
710 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
711 if (data->window_bmp) {
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
712 DeleteObject(data->window_bmp);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
713 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
714 SDL_free(data);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
715 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
716 SDL_free(renderer);
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
717 }
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
718
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
719 #endif /* SDL_VIDEO_RENDER_GDI */
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
720
e70477157db9 Starting support for Direct3D render driver.
Sam Lantinga <slouken@libsdl.org>
parents:
diff changeset
721 /* vi: set ts=4 sw=4 expandtab: */