Am 25.11.2005 um 23:44 schrieb Bob Courchaine:
Bert Freudenberg wrote:
Regarding endianness: BitBlt now deals fine with LSB forms, I thought. Works fine for 8 bpp at least, not sure about 2, though ...
Looks like it's been there since 2001, Bert.
It's been that long already? Rats, I'm getting old ... To my defense I could say that 4 years is still rather recent compared to the 30 years BitBlt has been around in Smalltalk ;-)
At least any VM in use now should have little-endian BitBlt support.
But it still is a lesser know feature - if even Tim didn't know or remember, who would? ;-)
And this note implies down to 1 bpp IIRC.
(from http://lists.squeakfoundation.org/pipermail/squeak-dev/2001-May/ 000076.html)
3984BitBltExtensions-ar -- Andreas Raab -- 4 May 2001 The change set includes various extensions for BitBlt with the goal of migrating the useful features from FXBlt into the general BitBlt mechanisms. These include:
- Handling of LSB and MSB forms:
BitBlt now handles both, MSB and LSB forms (and their conversions). Only instances of Bitmap are assumed to contain big-endian pixels. All others are assumed to be little endian (reason is that we can only identify Bitmap here). Note that 'LSB' and 'MSB' refers to PIXELS, that is a 1bpp LSB form has its left most pixel in the lowest bit whereas a 1bpp MSB form has its left-most pixel in the highest bit. For pixel depths < 8 this can be different from what your OS supplies (as an example, Windows bitmaps < 8 are big-endian pixels in little-endian words; we might call them 'middle-endian'). We simply don't deal with those - forms are either big or little endian but nothing inbetween. BitBlt has got an extra combination rule for swapping pixels in the destination form. This can be used to make byte swapping much more efficient (as soon as we've got more VMs with support for it).
It might just work if you request -2 bpp for display:
ioHasDisplayDepth(int d) { return d == -2; }
- Bert -