by Conan » Jul 9, 2002 @ 10:34pm
Here's the code. I was latterly trying to give Blit the HBITMAP defined near the end
//**** from the display.h
extern BITMAP OffscreenBitmap;
//******** from the display.cpp
BITMAP OffscreenBitmap;
#ifdef GAPI
#include "..\\gapi\\arm\\gx.h"
GXDisplayProperties DisplayProperties;
#else
HBITMAP hOffscreenBitmap;
HDC hDCMem;
#endif
// ----------------------
// Display initialisation
unsigned char DISPLAYinit(HWND hWnd)
{
#ifdef GAPI
GXOpenDisplay(hWnd, GX_FULLSCREEN);
DisplayProperties = GXGetDisplayProperties();
// Create the offscreen bitmap used as a secondary surface to build next image.
OffscreenBitmap.bmWidth = DISP_X;
OffscreenBitmap.bmHeight = DISP_Y;
OffscreenBitmap.bmBitsPixel = 16;
OffscreenBitmap.bmPlanes = 1;
OffscreenBitmap.bmBits = NULL; // (unsigned short *)malloc(DISP_X * DISP_Y * 2);
#else // code pc
long Data[256];
unsigned long *ColorMask;
BITMAPINFO *BitmapInfo;
HDC hDC = GetDC(hWnd);
// For Win32, create a DIB section compatible with original main game window DC.
BitmapInfo = (BITMAPINFO *)Data;
BitmapInfo->bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
BitmapInfo->bmiHeader.biBitCount = 16;
BitmapInfo->bmiHeader.biWidth = DISP_X;
BitmapInfo->bmiHeader.biHeight = -DISP_Y;
BitmapInfo->bmiHeader.biPlanes = 1;
BitmapInfo->bmiHeader.biCompression = BI_BITFIELDS;
BitmapInfo->bmiHeader.biSizeImage = DISP_X * DISP_Y * 2;
BitmapInfo->bmiHeader.biClrUsed = 0;
BitmapInfo->bmiHeader.biClrImportant = 0;
BitmapInfo->bmiHeader.biXPelsPerMeter = 0;
BitmapInfo->bmiHeader.biYPelsPerMeter = 0;
ColorMask = (unsigned long *)&BitmapInfo->bmiColors[0];
ColorMask[0] = 0xF800;
ColorMask[1] = 0x7E0;
ColorMask[2] = 0x1F;
hOffscreenBitmap = CreateDIBSection(hDC, BitmapInfo, DIB_RGB_COLORS, &OffscreenBitmap.bmBits, NULL, 0);
OffscreenBitmap.bmWidth = DISP_X;
OffscreenBitmap.bmHeight = DISP_Y;
OffscreenBitmap.bmBitsPixel = 16;
OffscreenBitmap.bmPlanes = 1;
// And create a memory DC used to blit offscreen bitmap to main window.
hDCMem = CreateCompatibleDC(hDC);
ReleaseDC(hWnd, hDC);
#endif
return(1);
}
//****** DISPLAY UPDATE CODE FOR PC version
#else // code for PC
HBITMAP OriginalBitmap;
OriginalBitmap = (HBITMAP)SelectObject(hDCMem, hOffscreenBitmap); // Blit from memory DC to game window DC.
unsigned short *VirtualScreen = (unsigned short *)OffscreenBitmap.bmBits;
for (int i=0; i<DISP_X*DISP_Y; i++)
{
VirtualScreen[i] = VScreen[i];
VScreen[i] = 0;
ZBuffer[i] = FAR_CLIP;
}
BitBlt(hDC, 0, 0, DISP_X, DISP_Y, hDCMem, 0, 0, SRCCOPY);
SelectObject(hDCMem, OriginalBitmap);
What is Best in Life ?