Blit Timing (Windows CE 5.0)
When you copy pixels to a surface using either IDirectDrawSurface5::Blt or IDirectDrawSurface5::BltFast, the method might fail with DDERR_WASSTILLDRAWING because the hardware blitter was not ready to accept the command.
If your application has no urgent business to perform while waiting for the blitter to come back into a state of readiness, you can specify the DDBLT_WAIT flag in the dwFlags parameter of Blt, or the equivalent DDBLTFAST_WAIT flag for BltFast.
The flag causes the method to wait until the blit can be handed off to the blitter (or until an error other than DDERR_WASSTILLDRAWING occurs).
Blt accepts another flag, DDBLT_ASYNC, that takes advantage of any hardware FIFO (first in, first out) queuing capabilities. If the dwFlags member is DDBLT_ASYNC, and there is enough FIFO memory to do a blit, the blit is done asynchronously through the FIFO queue, in the order received. If there is not enough FIFO memory, a message is sent out for debugging purposes to indicate that the asynchronous blit failed, the ddRVal member of the DDHAL_BLTDATA structure is set to DDERR_WASSTILLDRAWING, and DDHAL_DRIVER_HANDLED is returned.
If you set both DDBLT_ASYNC and DDBL_WAIT the call will try to queue the blit in the FIFO and, if successful, return immediately. If the queue is blocked, the call will wait until there is room in the queue. Once there is room for the blit, the call place the blit on the queue and then proceed asynchronously.
Send Feedback on this topic to the authors