overworked
asked on
DirectX Draw Question - ?
I use DirectX Draw in normal cooperative level mode and I need to blit off-screen surfaces onto primary. My off-screen surfaces are 8-bit palettized image data (with same palette as primary surface if video mode is in 8-bit palette). What I want to know is if the primary surface is in 16,24,32bit RGB, can I rely on the blitter to convert my offscreen surfaces to necessary RGB during blit? I don't mind if DirectX has to emulate the procedure if hardware doesn't support it but I don't want to have to code a 2nd alternative if it can't be done on certain user's systems. And DirectX SDK doesn't give me many clues.
If you are somewhat in the least unsure about the answer, PLEASE do not answer and let someone that knows for sure answer instead. I need a definitive answer since alot of work depends on your confidence in the subject.
Thanks
If you are somewhat in the least unsure about the answer, PLEASE do not answer and let someone that knows for sure answer instead. I need a definitive answer since alot of work depends on your confidence in the subject.
Thanks
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Well there goes my points again. You do this to me every time chensu. If you check donut.cpp you'll see that it calls DDLoadBitmap function which is found in ddutil.cpp (in ..\misc) to load the bitmaps. The bitmaps are StretchBlt from DIB hdc to the current Direct Draw hdc. This means that later on the off screen surfaces being blitted to primary are in the same format as the primary surface and not palettized, thus the blit is going from palettized to palettized, 16 to 16, 24 to 24, or 32 to 32 depending upon the current mode. All of this holds no significance to my question and I have no points to ask it again.
I thought perhaps that maybe this time, my additional clause in my original question would safegaurd me from this.
I thought perhaps that maybe this time, my additional clause in my original question would safegaurd me from this.
I am sorry. Yes, you are right. In the sample "Donut", the conversion occurs when blitting from the memory DC to the off screen surface. When the off screen surface is created by CreateSurface(), it has the same format as the current primary surface. It seems that there is no such an example in the DirectX SDK samples. (The sample "Wormhole" loads the DIB data into an off screen surface directly, but it uses exclusive 640x480x8 mode.)
When you create such an off screen surface, you need to set the DDPIXELFORMAT ddpfPixelFormat according to your 8-bit palettized image data exactly. Also, you need to set the palette of the off screen surface using IDirectDrawSurface2::SetPa lette. Then, when you blit the off screen surface to the primary surface, DirectX should do the conversion for you. I don't think it will be slow because the operation is not complicated. But, you should avoid it because the conversion occurs every time.
I am really sorry that I made a mistake.
When you create such an off screen surface, you need to set the DDPIXELFORMAT ddpfPixelFormat according to your 8-bit palettized image data exactly. Also, you need to set the palette of the off screen surface using IDirectDrawSurface2::SetPa
I am really sorry that I made a mistake.
ASKER
no prob, thanks for the apology
ASKER