http://bugs.winehq.org/show_bug.cgi?id=3319
------- Additional Comments From T.Bonner@freesurf.ch 2007-07-08 15:43 ------- The bug seemed fixed, I had no problems with it (trying out a later wine version). The problem occured on a Permedia II graphics card, just testing out the high-color mode. For interest I attach a windows function to detect 15 or 16 Bits:
/* 565 or 555? */ int DisplayBits (void) { HDC hdcDisplay; HBITMAP hbm; struct MyBitmapInfo { BITMAPINFOHEADER bi; union { RGBQUAD colors[256]; DWORD fields[256]; } un; } video;
ZeroMemory(&video, sizeof(video)); video.bi.biSize = sizeof(video.bi); video.bi.biBitCount = 0;
hdcDisplay = GetDC(NULL); hbm = CreateCompatibleBitmap(hdcDisplay,1,1);
/* twice!!! (on 16-HiColor needed! otherwise erroneously 555 detected!) */ GetDIBits(hdcDisplay,hbm,0,1,NULL,(BITMAPINFO *)&video,DIB_RGB_COLORS); GetDIBits(hdcDisplay,hbm,0,1,NULL,(BITMAPINFO *)&video,DIB_RGB_COLORS);
DeleteObject(hbm); ReleaseDC(NULL,hdcDisplay);
if (video.bi.biCompression != BI_BITFIELDS) { /* Either BI_RGB or BI_RLE_something * .... or perhaps (!!) something else. * Theoretically biCompression might be * mmioFourCC('c','v','i','d') but I doubt it. */ if (video.bi.biBitCount==16 && video.bi.biCompression == BI_RGB) { return 15; /* That is, 555*/ } else { return video.bi.biBitCount; } } else { DWORD allmasks = video.un.fields[0] | video.un.fields[1] | video.un.fields[2]; int k=0; while (allmasks) { if (allmasks&1) k++; allmasks /= 2; } return k; } } /*DisplayBits*/