[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Here is a short list of implementation features related to DIVE:
FOURCC_LUT8
FOURCC_R565
FOURCC_R664
FOURCC_R555
FOURCC_BGR4
If you use `DEPTH=8' in Crystal Space configuration file, or use `-depth 8' command-line parameter, Crystal Space will start with `FOURCC_LUT8' pixel format, regardless of what PM screen depth you have. If you choose 15, 16 or 32 bit color depth, the format will be chosen as follows:
Note: Due to a bug (or a misimplemented feature, to say so) in OS/2 DIVE library, you can't use 32-bit modes with the stock `DIVE.DLL' library. You have to patch it first so that it won't reject `BGR4' pixel format when creating image buffers.
Warning: This is a Bad Fix however I didn't have any other choice. It works for me with Matrox Mystique and Matrox Millenium ][ video cards, but I don't guarantee it will work for you:
Go to `\MMOS2\DLL'. Take the `DIVE.DLL' library. Unpack it, if it is packed (`lxlite /x dive.dll'). Now find the following sequence of bytes inside it:
83 C2 08 41 83 F9 [10] |
This sequence happens only once in my `DIVE.DLL'; I hope this is true for your `DIVE.DLL' as well. Now change the `10' that I took into square brackets with `16'. That's all.
Note that you will likely get wrong results if your current pixel format is not low-endian 32-bit (i.e. `BGR4'). That's not my fault.
DiveSetupBlitter()
with same parameters as usual, but clipping first
all rectangles returned by GpiQueryRegionRects()
against the rectangle
you want to update. Look in `libDIVE.cpp'
(diveWindow::SetupBlitter
) for more details.
DiveSetupBlitter()
is a longplay
operation, I think if you should update only a small part of screen it is
still faster to use it (for example, CSWS mostly needs to update only the
portion of screen around mouse cursor, 6.6 Crystal Space Windowing System (CSWS)). DiveSetupBlitter()
is not called multiple times if update region does not change, so if you
always call Graphics2D::Print()
with a constant argument (or
`NULL' for entire area), it won't be called more often than in the
"classic" situation.
Note: If you're running 16 BPP or 32 BPP on Matrox cards, make sure you disabled the "Enable EnDIVE in 16 BPP and 32 BPP" checkbox in the Matrox settings notebook. This is a real performance killer. (FPS drops twice on my Matrox II AGP, for example.)
[ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |