/************************************************************************************************ * Small footprint OpenGL init code made by Rasmus Christian Kaae (kaae@daimi.au.dk) * * Made in January 2002 - Please credit me if you use this! * * * * Usage: * * Make a main.c file containing two functions : * * * * void InitIntro() * * { /* todo: init stuff */ } * * void RunIntro() * * { * * glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); * * /* todo: display something nice */ * * } * * * * Compile your DEBUG project as normal and set your RELEASE version to no-defaultlibs. * * This OpenGL init code will leave a small footprint of about 1.5kb uncompressed code. * * Tested with MS Visual Studio 6.0. * ************************************************************************************************/ #define WIN32_LEAN_AND_MEAN #include #include #include /************************************************************************************************/ // out-comment this to get windowed rendering #define FULLSCREEN /************************************************************************************************/ // implement these in your main.c file extern void InitIntro(); extern void RunIntro(); /************************************************************************************************/ #ifdef _DEBUG int WINAPI WinMain(HINSTANCE i, HINSTANCE p, LPSTR cmd, int n) #else int WinMainCRTStartup() #endif { PIXELFORMATDESCRIPTOR pfd; HWND hwnd; HDC hdc; int pixelFormat; #ifdef FULLSCREEN DEVMODE dmScreenSettings; // Device Mode #endif #ifndef _DEBUG HINSTANCE i = GetModuleHandle(NULL); #endif /* init the pixelformat descriptor */ RtlZeroMemory(&pfd,sizeof(PIXELFORMATDESCRIPTOR)); // Clear the struct pfd.nSize=sizeof(PIXELFORMATDESCRIPTOR); // Size pfd.nVersion=1; // Version pfd.dwFlags=PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER; // Selected flags pfd.iPixelType=PFD_TYPE_RGBA; // Pixelformat pfd.cColorBits=32; // Pixel depth pfd.cDepthBits=16; // Zbuffer depth pfd.iLayerType=PFD_MAIN_PLANE; // Place the pixelformat on the main plane #ifdef FULLSCREEN /* init the resolution change settings */ RtlZeroMemory(&dmScreenSettings,sizeof(dmScreenSettings)); // Clear the struct dmScreenSettings.dmSize=sizeof(dmScreenSettings); // Size Of The Devmode Structure dmScreenSettings.dmPelsWidth = 640; // Selected Screen Width dmScreenSettings.dmPelsHeight = 480; // Selected Screen Height dmScreenSettings.dmBitsPerPel = 32; // Selected Bits Per Pixel dmScreenSettings.dmFields=DM_BITSPERPEL|DM_PELSWIDTH|DM_PELSHEIGHT; // Notify which fields we have used if (ChangeDisplaySettings(&dmScreenSettings,CDS_FULLSCREEN)!=DISP_CHANGE_SUCCESSFUL) return 0; #endif /* setup the window handle */ hwnd=CreateWindowEx(WS_EX_TOOLWINDOW, "STATIC", "blipblop", WS_POPUP|WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE|WS_CLIPSIBLINGS|WS_CLIPCHILDREN, 0, 0, 640, 480, 0, 0, i, 0); /* select the pixel format for the current window */ hdc = GetDC(hwnd); pixelFormat = ChoosePixelFormat(hdc, &pfd); SetPixelFormat(hdc, pixelFormat, &pfd); wglMakeCurrent( hdc, wglCreateContex(hdc) ); /* cursor be gone */ SetCursor(0); /* init the actual intro */ InitIntro(); /* loop until escape is pressed all normal windows messages are ignored */ while (!GetAsyncKeyState(VK_ESCAPE)) { RunIntro(); // nifty effects here SwapBuffers(hdc); // display the cool stuff } return 0; // exit to OS }