10ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner/* San Angeles Observation OpenGL ES version example 20ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * Copyright 2004-2005 Jetro Lauha 30ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * All rights reserved. 40ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * Web: http://iki.fi/jetro/ 50ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * 60ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * This source is free software; you can redistribute it and/or 70ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * modify it under the terms of EITHER: 80ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * (1) The GNU Lesser General Public License as published by the Free 90ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * Software Foundation; either version 2.1 of the License, or (at 100ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * your option) any later version. The text of the GNU Lesser 110ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * General Public License is included with this source in the 120ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * file LICENSE-LGPL.txt. 130ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * (2) The BSD-style license that is included with this source in 140ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * the file LICENSE-BSD.txt. 150ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * 160ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * This source is distributed in the hope that it will be useful, 170ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * but WITHOUT ANY WARRANTY; without even the implied warranty of 180ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files 190ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * LICENSE-LGPL.txt and LICENSE-BSD.txt for more details. 200ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * 210ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * $Id: app-win32.c,v 1.6 2005/02/24 20:29:00 tonic Exp $ 220ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner * $Revision: 1.6 $ 230ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner */ 240ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 250ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#define WIN32_LEAN_AND_MEAN 260ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include <windows.h> 270ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include <tchar.h> 280ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifdef UNDER_CE 290ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include <aygshell.h> 300ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif 310ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 320ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include <stdio.h> 330ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 340ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include "importgl.h" 350ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 360ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#include "app.h" 370ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 380ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 390ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerint gAppAlive = 1; 400ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 410ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic HINSTANCE sInstance; 420ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 430ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic const _TCHAR sAppName[] = 440ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner _T("San Angeles Observation OpenGL ES version example (Win32)"); 450ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic HWND sWnd; 460ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic int sWindowWidth = WINDOW_DEFAULT_WIDTH; 470ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic int sWindowHeight = WINDOW_DEFAULT_HEIGHT; 480ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic EGLDisplay sEglDisplay = EGL_NO_DISPLAY; 490ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic EGLConfig sEglConfig; 500ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic EGLContext sEglContext = EGL_NO_CONTEXT; 510ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic EGLSurface sEglSurface = EGL_NO_SURFACE; 520ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 530ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 540ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic void checkGLErrors() 550ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 560ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner GLenum error = glGetError(); 570ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (error != GL_NO_ERROR) 580ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 590ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner _TCHAR errorString[32]; 600ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner _stprintf(errorString, _T("0x%04x"), error); 610ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner MessageBox(NULL, errorString, _T("GL Error"), MB_OK); 620ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 630ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 640ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 650ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 660ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic void checkEGLErrors() 670ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 680ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGLint error = eglGetError(); 690ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (error != EGL_SUCCESS) 700ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 710ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner _TCHAR errorString[32]; 720ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner _stprintf(errorString, _T("0x%04x"), error); 730ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner MessageBox(NULL, errorString, _T("EGL Initialization Error"), MB_OK); 740ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 750ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 760ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 770ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 780ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic BOOL initEGL(HWND wnd) 790ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 800ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner static const EGLint configAttribs[] = 810ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 820ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#if (WINDOW_BPP == 16) 830ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_RED_SIZE, 5, 840ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_GREEN_SIZE, 5, 850ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_BLUE_SIZE, 5, 860ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#elif (WINDOW_BPP == 32) 870ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_RED_SIZE, 8, 880ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_GREEN_SIZE, 8, 890ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_BLUE_SIZE, 8, 900ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#else 910ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#error WINDOW_BPP must be 16 or 32 920ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif 930ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_DEPTH_SIZE, 16, 940ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_ALPHA_SIZE, EGL_DONT_CARE, 950ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_STENCIL_SIZE, EGL_DONT_CARE, 960ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_SURFACE_TYPE, EGL_WINDOW_BIT, 970ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGL_NONE 980ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner }; 990ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGLBoolean success; 1000ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGLint numConfigs; 1010ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGLint majorVersion; 1020ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner EGLint minorVersion; 1030ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifdef PVRSDK 1040ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner HDC dc; 1050ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif // PVRSDK 1060ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1070ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifndef DISABLE_IMPORTGL 1080ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner int importGLResult; 1090ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner importGLResult = importGLInit(); 1100ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (!importGLResult) 1110ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return FALSE; 1120ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif // !DISABLE_IMPORTGL 1130ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1140ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifdef PVRSDK 1150ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner dc = GetDC(sWnd); 1160ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sEglDisplay = eglGetDisplay(dc); 1170ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#else 1180ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY); 1190ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif // !PVRSDK 1200ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = eglInitialize(sEglDisplay, &majorVersion, &minorVersion); 1210ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success != EGL_FALSE) 1220ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = eglGetConfigs(sEglDisplay, NULL, 0, &numConfigs); 1230ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success != EGL_FALSE) 1240ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = eglChooseConfig(sEglDisplay, configAttribs, 1250ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner &sEglConfig, 1, &numConfigs); 1260ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success != EGL_FALSE) 1270ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 1280ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sEglSurface = eglCreateWindowSurface(sEglDisplay, sEglConfig, 1290ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wnd, NULL); 1300ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (sEglSurface == EGL_NO_SURFACE) 1310ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = EGL_FALSE; 1320ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 1330ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success != EGL_FALSE) 1340ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 1350ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sEglContext = eglCreateContext(sEglDisplay, sEglConfig, NULL, NULL); 1360ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (sEglContext == EGL_NO_CONTEXT) 1370ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = EGL_FALSE; 1380ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 1390ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success != EGL_FALSE) 1400ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner success = eglMakeCurrent(sEglDisplay, sEglSurface, 1410ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sEglSurface, sEglContext); 1420ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1430ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (success == EGL_FALSE) 1440ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner checkEGLErrors(); 1450ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1460ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return success; 1470ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 1480ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1490ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1500ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic void deinitEGL() 1510ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 1520ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner eglMakeCurrent(sEglDisplay, NULL, NULL, NULL); 1530ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner eglDestroyContext(sEglDisplay, sEglContext); 1540ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner eglDestroySurface(sEglDisplay, sEglSurface); 1550ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner eglTerminate(sEglDisplay); 1560ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifndef DISABLE_IMPORTGL 1570ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner importGLDeinit(); 1580ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif // !DISABLE_IMPORTGL 1590ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 1600ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1610ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1620ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerstatic LRESULT CALLBACK wndProc(HWND wnd, UINT message, 1630ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner WPARAM wParam, LPARAM lParam) 1640ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 1650ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner RECT rc; 1660ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner int useDefWindowProc = 0; 1670ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1680ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner switch (message) 1690ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 1700ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner case WM_CLOSE: 1710ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner DestroyWindow(wnd); 1720ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner gAppAlive = 0; 1730ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner break; 1740ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1750ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner case WM_DESTROY: 1760ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner PostQuitMessage(0); 1770ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner gAppAlive = 0; 1780ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner break; 1790ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1800ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner case WM_KEYDOWN: 1810ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (wParam == VK_ESCAPE || wParam == VK_RETURN) 1820ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner gAppAlive = 0; 1830ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner useDefWindowProc = 1; 1840ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner break; 1850ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1860ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner case WM_KEYUP: 1870ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner useDefWindowProc = 1; 1880ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner break; 1890ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1900ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner case WM_SIZE: 1910ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner GetClientRect(sWnd, &rc); 1920ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWindowWidth = rc.right; 1930ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWindowHeight = rc.bottom; 1940ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner break; 1950ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 1960ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner default: 1970ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner useDefWindowProc = 1; 1980ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 1990ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2000ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (useDefWindowProc) 2010ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return DefWindowProc(wnd, message, wParam, lParam); 2020ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return 0; 2030ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 2040ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2050ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2060ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turnerint WINAPI WinMain(HINSTANCE instance, HINSTANCE prevInstance, 2070ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner LPTSTR cmdLine, int cmdShow) 2080ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner{ 2090ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner MSG msg; 2100ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner WNDCLASS wc; 2110ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner DWORD windowStyle; 2120ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner int windowX, windowY; 2130ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2140ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner // not referenced: 2150ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner prevInstance = prevInstance; 2160ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner cmdLine = cmdLine; 2170ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2180ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2190ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sInstance = instance; 2200ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2210ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner // register class 2220ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.style = CS_HREDRAW | CS_VREDRAW; 2230ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.lpfnWndProc = (WNDPROC)wndProc; 2240ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.cbClsExtra = 0; 2250ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.cbWndExtra = 0; 2260ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.hInstance = sInstance; 2270ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.hIcon = NULL; 2280ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.hCursor = 0; 2290ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.hbrBackground = GetStockObject(BLACK_BRUSH); 2300ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.lpszMenuName = NULL; 2310ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner wc.lpszClassName = sAppName; 2320ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (!RegisterClass(&wc)) 2330ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return FALSE; 2340ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2350ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner // init instance 2360ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowStyle = WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_VISIBLE; 2370ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifdef UNDER_CE 2380ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWindowWidth = GetSystemMetrics(SM_CXSCREEN); 2390ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWindowHeight = GetSystemMetrics(SM_CYSCREEN); 2400ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowX = windowY = 0; 2410ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#else 2420ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowStyle |= WS_OVERLAPPEDWINDOW; 2430ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowX = CW_USEDEFAULT; 2440ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowY = 0; 2450ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif 2460ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWnd = CreateWindow(sAppName, sAppName, windowStyle, 2470ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner windowX, windowY, 2480ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner sWindowWidth, sWindowHeight, 2490ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner NULL, NULL, instance, NULL); 2500ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (!sWnd) 2510ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return FALSE; 2520ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2530ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner ShowWindow(sWnd, cmdShow); 2540ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2550ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#ifdef UNDER_CE 2560ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner SHFullScreen(sWnd, 2570ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner SHFS_HIDETASKBAR | SHFS_HIDESIPBUTTON | SHFS_HIDESTARTICON); 2580ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner MoveWindow(sWnd, 0, 0, sWindowWidth, sWindowHeight, TRUE); 2590ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner#endif 2600ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2610ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner UpdateWindow(sWnd); 2620ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2630ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (!initEGL(sWnd)) 2640ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return FALSE; 2650ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2660ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner appInit(sWindowWidth, sWindowHeight); 2670ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2680ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner while (gAppAlive) 2690ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 2700ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner while (PeekMessage(&msg, sWnd, 0, 0, PM_NOREMOVE)) 2710ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 2720ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (GetMessage(&msg, sWnd, 0, 0)) 2730ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 2740ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner TranslateMessage(&msg); 2750ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner DispatchMessage(&msg); 2760ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 2770ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner else 2780ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner gAppAlive = 0; 2790ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 2800ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2810ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner if (gAppAlive) 2820ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner { 2830ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner appRender(GetTickCount(), sWindowWidth, sWindowHeight); 2840ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner checkGLErrors(); 2850ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner eglSwapBuffers(sEglDisplay, sEglSurface); 2860ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner checkEGLErrors(); 2870ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 2880ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner } 2890ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2900ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner appDeinit(); 2910ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner deinitEGL(); 2920ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner 2930ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner return 0; 2940ae5c705473be544c624e9298bbdcc5ae2b91968David 'Digit' Turner} 295