The visible rectangles are passed using the pVisDstRects parameter of SETUP_BLITTER. These rectangles are relative to the destination window origin. The display engine will determine if it is fully visible if ulNumDstRects = 1 and the first *pVisDstRects = {0, 0, width, height}. The display engine will also assume the image is fully clipped if ulNumDstRects = = 0 or if ulNumDstRects = = 1 and the rectangle width or height are zero.
If DiveSetupBlitter determines that the requested blitter operations to follow can be performed partially or wholly using display hardware features, it will do so. If the requested input format is supported by the software emulation within the display engine but not by the display hardware, DiveSetupBlitter will enable conversion to a format that is supported by the hardware to an internally allocated buffer. The converted image will, in turn, be transferred from the internal buffer to the screen by the hardware.
When PM sends a WM_VRNDISABLED message, the application must inform DIVE that the visible regions are about to enter a changing state. This is done with a call to DiveSetupBlitter ( hDive, 0 ). When the state of visible regions again becomes static, PM sends a WM_VRNENABLED message and a normal call to DiveSetupBlitter is used.
DiveSetupBlitter was not intended to be called at high frequency. If several different source/destination size pairs are to be used, try opening several instances to increase performance.
Note: The fNonScreenInstance parameter specified on DiveOpen indicates whether or not DiveSetupBlitter should use acceleration hardware when present.