130 PRECTL prectl =
NULL;
134 if (pVOData->fBlitterReady) {
135 pVOData->fBlitterReady =
FALSE;
136 DiveSetupBlitter(pVOData->hDive, 0);
143 hps = WinGetPS(hwnd);
144 hrgn = GpiCreateRegion(hps, 0,
NULL);
145 if (hrgn == NULLHANDLE) {
149 WinQueryVisibleRegion(hwnd, hrgn);
150 if (hrgnShape != NULLHANDLE)
151 GpiCombineRegion(hps, hrgn, hrgn, hrgnShape, CRGN_AND);
155 rgnCtl.ulDirection = 1;
156 GpiQueryRegionRects(hps, hrgn,
NULL, &rgnCtl,
NULL);
157 if (rgnCtl.crcReturned != 0) {
158 prectl =
SDL_malloc(rgnCtl.crcReturned *
sizeof(RECTL));
159 if (prectl !=
NULL) {
161 rgnCtl.crc = rgnCtl.crcReturned;
162 rgnCtl.ulDirection = 1;
163 GpiQueryRegionRects(hps, hrgn,
NULL, &rgnCtl, prectl);
168 GpiDestroyRegion(hps, hrgn);
171 if (prectl !=
NULL) {
173 SETUP_BLITTER sSetupBlitter;
175 POINTL pointl = { 0 };
177 WinQueryWindowPos(hwnd, &swp);
178 WinMapWindowPoints(hwnd, HWND_DESKTOP, &pointl, 1);
180 sSetupBlitter.ulStructLen =
sizeof(SETUP_BLITTER);
181 sSetupBlitter.fccSrcColorFormat = pVOData->fccColorEncoding;
182 sSetupBlitter.fInvert =
FALSE;
183 sSetupBlitter.ulSrcWidth = pVOData->ulWidth;
184 sSetupBlitter.ulSrcHeight = pVOData->ulHeight;
185 sSetupBlitter.ulSrcPosX = 0;
186 sSetupBlitter.ulSrcPosY = 0;
187 sSetupBlitter.ulDitherType = 0;
188 sSetupBlitter.fccDstColorFormat = FOURCC_SCRN;
189 sSetupBlitter.ulDstWidth = swp.cx;
190 sSetupBlitter.ulDstHeight = swp.cy;
191 sSetupBlitter.lDstPosX = 0;
192 sSetupBlitter.lDstPosY = 0;
193 sSetupBlitter.lScreenPosX = pointl.x;
194 sSetupBlitter.lScreenPosY = pointl.y;
196 sSetupBlitter.ulNumDstRects = rgnCtl.crcReturned;
197 sSetupBlitter.pVisDstRects = prectl;
199 ulRC = DiveSetupBlitter(pVOData->hDive, &sSetupBlitter);
202 if (ulRC == DIVE_SUCCESS) {
203 pVOData->fBlitterReady =
TRUE;
204 WinInvalidateRect(hwnd,
NULL,
TRUE);
213 pVOData->fBlitterReady =
FALSE;
214 DiveSetupBlitter(pVOData->hDive, 0);