31 0xd7b70ee0, 0x4340, 0x11cf,
32 { 0xb0, 0x63, 0x00, 0x20, 0xaf, 0xc2, 0xcd, 0x35 }
36 0x593817a0, 0x7db3, 0x11cf,
37 { 0xa2, 0xde, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56 }
41 0x6c14db80, 0xa733, 0x11ce,
42 { 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60 }
46 0xb3a6f3e0, 0x2b43, 0x11cf,
47 { 0xa2, 0xde, 0x00, 0xaa, 0x00, 0xb9, 0x33, 0x56 }
51 0x6c14db81, 0xa733, 0x11ce,
52 { 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60 }
56 0x57805885, 0x6eec, 0x11cf,
57 { 0x94, 0x41, 0xa8, 0x23, 0x03, 0xc1, 0x0e, 0x27 }
61 0x6c14db84, 0xa733, 0x11ce,
62 { 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60 }
66 0x6c14db85, 0xa733, 0x11ce,
67 { 0xa5, 0x21, 0x00, 0x20, 0xaf, 0x0b, 0xe5, 0x60 }
131#pragma function(strlen)
158 1000.0f / ((float)timeGetTime() -
172void SetHudMessageText(
char *text,
unsigned short colour,
unsigned short duration);
173void DIBerror(
const char *tag,
int hr);
184 "Space Flight Max FPS : %.1f",
226 (
unsigned short)hr, tag);
234 errorFile = fopen(
"direct.err",
"wt+");
261 IDirectDraw2_SetCooperativeLevel(
264 DIBerror(
"DIBreInstall DIBcascade Failure", err);
270#pragma function(memset)
274 LPDIRECTDRAW directDraw;
278 result = DirectDrawCreate(0, &directDraw, 0);
280 DIBerror(
"DIBInstall Create", result);
282 result = IDirectDraw_QueryInterface(
286 DIBerror(
"DIBInstall Unable to acquire DirectDraw2 interface", result);
289 result = IDirectDraw2_SetCooperativeLevel(
292 result = IDirectDraw2_SetCooperativeLevel(
295 DIBerror(
"DIBmakeInstall SetCooperativeLevel", result);
299 DIBerror(
"DIBinstall DIBcascade Failure", result);
316 DDSURFACEDESC surface;
333 if (reportedResult != 0)
334 *reportedResult = result;
342 if (reportedResult != 0)
343 *reportedResult = result;
351 if (reportedResult != 0)
352 *reportedResult = result;
363 result = IDirectDrawSurface_Restore(
365 if (reportedResult != 0)
366 *reportedResult = result;
368 DIBerror(
"DIBcascade Unable to restore surface (secondary)",
373 if (reportedResult != 0)
374 *reportedResult = result;
376 DIBerror(
"DIBcascade Unable to restore surface", result);
378 result = IDirectDrawSurface_SetPalette(
381 DIBerror(
"DIBcascade CreatePalette", result);
386 memset(&surface, 0,
sizeof(surface));
387 surface.dwSize =
sizeof(surface);
388 surface.dwFlags = DDSD_CAPS;
389 surface.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE;
390 result = IDirectDraw2_CreateSurface(
393 if (reportedResult != 0)
394 *reportedResult = result;
395 if (result != DD_OK) {
402 result = IDirectDrawSurface_Lock(
404 if (reportedResult != 0)
405 *reportedResult = result;
406 if (result != DD_OK) {
433#pragma function(memcpy)
437 DDSURFACEDESC surfaceDesc;
438 PALETTEENTRY colours[256];
442 memset(&surfaceDesc, 0,
sizeof(surfaceDesc));
443 surfaceDesc.dwSize =
sizeof(surfaceDesc);
444 surfaceDesc.dwFlags = DDSD_CAPS;
445 surfaceDesc.ddsCaps.dwCaps = DDSCAPS_PRIMARYSURFACE | DDSCAPS_MODEX;
446 hr = IDirectDraw2_CreateSurface(
450 DIBerror(
"DIBmakeDIB CreateSurface (primary)", hr);
453 for (paletteIndex = 0; paletteIndex < 256; paletteIndex++) {
457 colours[paletteIndex].peFlags = 0;
461 hr = IDirectDraw2_CreatePalette(
465 DIBerror(
"DIBmakeDIB CreatePalette", hr);
468 hr = IDirectDrawSurface_SetPalette(
472 DIBerror(
"DIBmakeDIB CreatePalette", hr);
477 memset(&surfaceDesc, 0,
sizeof(surfaceDesc));
478 surfaceDesc.dwSize =
sizeof(surfaceDesc);
479 surfaceDesc.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH;
480 surfaceDesc.dwWidth = 320;
481 surfaceDesc.dwHeight = 200;
482 surfaceDesc.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN | DDSCAPS_SYSTEMMEMORY;
483 hr = IDirectDraw2_CreateSurface(
487 DIBerror(
"DIBmakeDIB CreateSurface (secondary)", hr);
512 DIBerror(
"DIBdestroyDIB secondary->Release", result);
518 DIBerror(
"DIBdestroyDIB primary->Release", result);
536 tick = GetTickCount();
541 "DIBslam %d times in %d seconds\n",
564 DDSURFACEDESC surfaceDetails;
565 unsigned char *destPixels;
566 unsigned char *source;
572 unsigned int nowTick;
575 nowTick = GetTickCount();
582 "DIBslamReal %d times in %d seconds\n",
590 memset(&surfaceDetails, 0,
sizeof(surfaceDetails));
591 surfaceDetails.dwSize =
sizeof(surfaceDetails);
597 status = IDirectDrawSurface_Lock(
599 0, &surfaceDetails, DDLOCK_WAIT, 0);
601 status = IDirectDrawSurface_Lock(
603 0, &surfaceDetails, DDLOCK_WAIT, 0);
605 if (status != DD_OK) {
606 if (status == DDERR_SURFACELOST) {
608 status = IDirectDrawSurface_Restore(
613 status = IDirectDrawSurface_Restore(
619 status = IDirectDrawSurface_Lock(
621 0, &surfaceDetails, DDLOCK_WAIT, 0);
623 status = IDirectDrawSurface_Lock(
625 0, &surfaceDetails, DDLOCK_WAIT, 0);
630 IDirectDrawSurface_Unlock(
632 DIBerror(
"DIBslamReal secondary->Lock", status);
636 destPixels = (
unsigned char *)surfaceDetails.lpSurface;
639 IDirectDraw2_WaitForVerticalBlank(
644 destPixels += surfaceDetails.lPitch;
649 status = IDirectDrawSurface_Unlock(
652 status = IDirectDrawSurface_Unlock(
661 outputRect.right = 639;
662 outputRect.bottom = 399;
665 sourceArea.right = 319;
666 sourceArea.bottom = 199;
668 outputRect.top += 40;
669 outputRect.bottom += 40;
672 status = IDirectDrawSurface_Blt(
676 if (status != DD_OK) {
677 if (status == DDERR_SURFACELOST) {
678 status = IDirectDrawSurface_Restore(
682 status = IDirectDrawSurface_Restore(
686 status = IDirectDrawSurface_Blt(
693 DIBerror(
"DIBslamReal primary->Blt", status);
710 unsigned char *destPixels;
711 unsigned char *source;
712 DDSURFACEDESC surfaceDetails;
728 else if (right > 319)
736 else if (bottom > 199)
739 byteWidth = right - left + 1;
740 height = bottom - top + 1;
742 targetRect.left = left;
743 targetRect.top = top;
744 targetRect.right = byteWidth;
745 targetRect.bottom = height;
746 updateSource.left = left;
747 updateSource.top = top;
748 updateSource.right = byteWidth;
749 updateSource.bottom = height;
750 memset(&surfaceDetails, 0,
sizeof(surfaceDetails));
751 surfaceDetails.dwSize =
sizeof(surfaceDetails);
752 hResult = IDirectDrawSurface_Lock(
755 if (hResult != DD_OK) {
756 IDirectDrawSurface_Unlock(
758 DIBerror(
"DIBupdate primary->Lock", hResult);
761 destPixels = (
unsigned char *)surfaceDetails.lpSurface
762 + surfaceDetails.lPitch * top + left;
766 IDirectDraw2_WaitForVerticalBlank(
768 for (currentLine = 0; height > currentLine; currentLine++) {
769 memcpy(destPixels, source, byteWidth);
770 destPixels += surfaceDetails.lPitch;
773 hResult = IDirectDrawSurface_Unlock(
815 *(
unsigned char *)&rgb[0];
819 *(
unsigned char *)&rgb[1];
823 *(
unsigned char *)&rgb[2];
832 PALETTEENTRY entries[256];
836 for (index = 0; index < 256; index++) {
837 entries[index].peRed =
839 entries[index].peGreen =
841 entries[index].peBlue =
843 entries[index].peFlags = 0;
846 error = IDirectDrawPalette_SetEntries(
849 DIBerror(
"DIBramPalette SetEntries", error);
864 *(
unsigned char *)&rgb[0];
868 *(
unsigned char *)&rgb[1];
872 *(
unsigned char *)&rgb[2];
885 error = IDirectDrawPalette_SetEntries(
889 DIBerror(
"DIBsetPalette SetEntries", error);
891 error = IDirectDrawSurface_SetPalette(
895 DIBerror(
"DIBmakeDIB CreatePalette", error);
910 unsigned char entries[0x400];
914 IDirectDraw2_WaitForVerticalBlank(
916 for (index = 0; index < 0x100; index++) {
922 palette[index * 3 + 1];
923 entries[index * 4 + 1] =
926 palette[index * 3 + 2];
927 entries[index * 4 + 2] =
929 entries[index * 4 + 3] = 0;
934 hr = IDirectDrawPalette_SetEntries(
936 (LPPALETTEENTRY)entries);
938 DIBerror(
"DIBsetWholePalette SetEntries", hr);
940 hr = IDirectDrawSurface_SetPalette(
943 DIBerror(
"DIBmakeDIB CreatePalette", hr);
950 unsigned char entries[0x400];
954 IDirectDraw2_WaitForVerticalBlank(
956 for (index = 0; index < 0x100; index++) {
958 *(
unsigned char *)&palette[index * 3];
962 *(
unsigned char *)&palette[index * 3 + 1];
963 entries[index * 4 + 1] =
966 *(
unsigned char *)&palette[index * 3 + 2];
967 entries[index * 4 + 2] =
969 entries[index * 4 + 3] = 0;
974 hr = IDirectDrawPalette_SetEntries(
976 (LPPALETTEENTRY)entries);
978 DIBerror(
"DIBsetWholePalette SetEntries", hr);
980 hr = IDirectDrawSurface_SetPalette(
983 DIBerror(
"DIBmakeDIB CreatePalette", hr);
990 IDirectDraw2_WaitForVerticalBlank(
WINUSERAPI HDC WINAPI GetDC(HWND window)
WINUSERAPI int WINAPI ReleaseDC(HWND window, HDC deviceContext)
WINGDIAPI BOOL WINAPI TextOutA(HDC deviceContext, int x, int y, LPCSTR text, int length)
const GUID IID_IDirectDrawSurface2
const GUID IID_IDirectDrawPalette
static int g_nDisplayFrameRate
static int g_nDefaultFrameRate
const GUID IID_IDirectDrawClipper
const GUID IID_IDirectDraw
const GUID IID_IDirectDraw2
const GUID CLSID_DirectDraw
const GUID IID_IDirectDrawSurface
void RefreshMouseCursorDisplay(void)
void DIBpixelBufferHook(void)
HWND GetDIBWindowHandle(void)
void RestoreMouseCursorBackground(void)
void SetSpaceFlightFrameTiming(void)
void ReportSpaceFlightMaxFps(float adjustment)
void GetPaletteEntryAsWords(short i, unsigned short *rgb)
void ThrottleFrameAndDrawFps(HDC dc)
void DIBinstall(HWND window)
void DIBpositionWindow(void)
void DrawMouseCursor(void)
void DIBsetPalette(short index, short *rgb)
int DIBcascade(int mode, int *reportedResult)
void CaptureMouseCursorBackground(void)
void CachePaletteEntryFromWords(short index, unsigned short *rgb)
void ServiceSoundSystem(void)
unsigned int GetDIBWidth(void)
void DIBwholePaletteFromWords(unsigned short *palette)
unsigned char * GetDIBPixelBuffer(void)
void UpdateStreamerStoppedFlag(void)
void DIBwholePaletteFromTriplets(unsigned char *palette)
void SetHudMessageText(char *text, unsigned short colour, unsigned short duration)
void DisableDibSlam(void)
void DIBupdate(int left, int top, int right, int bottom)
void SetCinematicFrameTiming(float frameRate)
void DIBwaitForVerticalBlank(void)
void WriteDebugString(const char *s)
void DIBerror(const char *tag, int hr)
void SetDefaultFrameTiming(void)
unsigned int GetDIBHeight(void)
Shared Win32 declarations, types and library interfaces.
#define COM_RELEASE(surface)
int g_bFrameTimingInitialized
QueuedMouseState g_16_stEventQueuePointerData
LPDIRECTDRAWSURFACE g_pSecondarySurface
unsigned int g_38_nSurfaceHeight
unsigned int g_38_nDibOriginX
int g_bUseHardwarePalette
int g_28_nUnusedFrameSlot
LPDIRECTDRAWSURFACE g_pPrimarySurface
unsigned char g_11_abFrameBackingStore[0xfa00]
char g_szFrameErrorMessage[0x8c]
unsigned char g_3_abColourShadow[1024]
float g_fMeasuredFrameRate
char g_3_szDibSlamRealDebugBuf[256]
DWORD g_dwNextFrameDeadline
unsigned int g_10_dwLastSurfaceSlamRealNoticeTick
LPDIRECTDRAW2 g_pDirectDraw2
float g_1_fPreviousFrameSpeed
unsigned int g_101_nDibOffsetY
unsigned char * g_18_pDisplayPixelBuffer
unsigned int g_28_nDisplayRowBytes
char g_18_szSpaceFlightBestFpsMessage[0x80]
unsigned int g_dwLastDibDirtyReportTime
int g_nDisplayModeCascade
int g_bConfigQuickModeEnabled
int g_8_nDibFlipRealCount
unsigned short g_ausPaletteWords[256][3]
long g_17_nFramePeriodMillis
char g_2_szDibDebugScratch[260]
Viewport g_101_stScrViewInfo
long g_lPreviousFrameTick
const GUID CLSID_DirectDrawClipper
LPDIRECTDRAWPALETTE g_pDirectDrawPalette
float g_fSpaceFlightFrameRate
char g_59_szFrameFrequencyString[32]
unsigned char * allocation