亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? nehegl.cpp

?? opengl開發的 小游戲
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
/***********************************************
*                                              *
*    Jeff Molofee's Revised OpenGL Basecode    *
*  Huge Thanks To Maxwell Sayles & Peter Puck  *
*            http://nehe.gamedev.net           *
*                     2001                     *
*                                              *
***********************************************/

#include <windows.h>													// Header File For The Windows Library
#include <gl/gl.h>														// Header File For The OpenGL32 Library
#include <gl/glu.h>														// Header File For The GLu32 Library

#include "NeHeGL.h"														// Header File For The NeHeGL Basecode

#define WM_TOGGLEFULLSCREEN (WM_USER+1)									// Application Define Message For Toggling

static BOOL g_isProgramLooping;											// Window Creation Loop, For FullScreen/Windowed Toggle																		// Between Fullscreen / Windowed Mode
static BOOL g_createFullScreen;											// If TRUE, Then Create Fullscreen

void TerminateApplication (GL_Window* window)							// Terminate The Application
{
	PostMessage (window->hWnd, WM_QUIT, 0, 0);							// Send A WM_QUIT Message
	g_isProgramLooping = FALSE;											// Stop Looping Of The Program
}

void ToggleFullscreen (GL_Window* window)								// Toggle Fullscreen/Windowed
{
	PostMessage (window->hWnd, WM_TOGGLEFULLSCREEN, 0, 0);				// Send A WM_TOGGLEFULLSCREEN Message
}

void ReshapeGL (int width, int height)									// Reshape The Window When It's Moved Or Resized
{
	glViewport (0, 0, (GLsizei)(width), (GLsizei)(height));				// Reset The Current Viewport
	glMatrixMode (GL_PROJECTION);										// Select The Projection Matrix
	glLoadIdentity ();													// Reset The Projection Matrix
	gluPerspective(50, (float)width/(float)height, 5,  2000);
	glMatrixMode (GL_MODELVIEW);										// Select The Modelview Matrix
	glLoadIdentity ();													// Reset The Modelview Matrix
}

BOOL ChangeScreenResolution (int width, int height, int bitsPerPixel)	// Change The Screen Resolution
{
	DEVMODE dmScreenSettings;											// Device Mode
	ZeroMemory (&dmScreenSettings, sizeof (DEVMODE));					// Make Sure Memory Is Cleared
	dmScreenSettings.dmSize				= sizeof (DEVMODE);				// Size Of The Devmode Structure
	dmScreenSettings.dmPelsWidth		= width;						// Select Screen Width
	dmScreenSettings.dmPelsHeight		= height;						// Select Screen Height
	dmScreenSettings.dmBitsPerPel		= bitsPerPixel;					// Select Bits Per Pixel
	dmScreenSettings.dmFields			= DM_BITSPERPEL | DM_PELSWIDTH | DM_PELSHEIGHT;
	if (ChangeDisplaySettings (&dmScreenSettings, CDS_FULLSCREEN) != DISP_CHANGE_SUCCESSFUL)
	{
		return FALSE;													// Display Change Failed, Return False
	}
	return TRUE;														// Display Change Was Successful, Return True
}

BOOL CreateWindowGL (GL_Window* window)									// This Code Creates Our OpenGL Window
{
	DWORD windowStyle = WS_OVERLAPPEDWINDOW;							// Define Our Window Style
	DWORD windowExtendedStyle = WS_EX_APPWINDOW;						// Define The Window's Extended Style

	PIXELFORMATDESCRIPTOR pfd =											// pfd Tells Windows How We Want Things To Be
	{
		sizeof (PIXELFORMATDESCRIPTOR),									// Size Of This Pixel Format Descriptor
		1,																// Version Number
		PFD_DRAW_TO_WINDOW |											// Format Must Support Window
		PFD_SUPPORT_OPENGL |											// Format Must Support OpenGL
		PFD_DOUBLEBUFFER,												// Must Support Double Buffering
		PFD_TYPE_RGBA,													// Request An RGBA Format
		window->init.bitsPerPixel,										// Select Our Color Depth
		0, 0, 0, 0, 0, 0,												// Color Bits Ignored
		1,																// Alpha Buffer
		0,																// Shift Bit Ignored
		0,																// No Accumulation Buffer
		0, 0, 0, 0,														// Accumulation Bits Ignored
		16,																// 16Bit Z-Buffer (Depth Buffer)  
		0,																// No Stencil Buffer
		0,																// No Auxiliary Buffer
		PFD_MAIN_PLANE,													// Main Drawing Layer
		0,																// Reserved
		0, 0, 0															// Layer Masks Ignored
	};

	RECT windowRect = {0, 0, window->init.width, window->init.height};	// Define Our Window Coordinates

	GLuint PixelFormat;													// Will Hold The Selected Pixel Format

	if (window->init.isFullScreen == TRUE)								// Fullscreen Requested, Try Changing Video Modes
	{
		if (ChangeScreenResolution (window->init.width, window->init.height, window->init.bitsPerPixel) == FALSE)
		{
			// Fullscreen Mode Failed.  Run In Windowed Mode Instead
			MessageBox (HWND_DESKTOP, "Mode Switch Failed.\nRunning In Windowed Mode.", "Error", MB_OK | MB_ICONEXCLAMATION);
			window->init.isFullScreen = FALSE;							// Set isFullscreen To False (Windowed Mode)
		}
		else															// Otherwise (If Fullscreen Mode Was Successful)
		{
			ShowCursor (FALSE);											// Turn Off The Cursor
			windowStyle = WS_POPUP;										// Set The WindowStyle To WS_POPUP (Popup Window)
			windowExtendedStyle |= WS_EX_TOPMOST;						// Set The Extended Window Style To WS_EX_TOPMOST
		}																// (Top Window Covering Everything Else)
	}
	else																// If Fullscreen Was Not Selected
	{
		// Adjust Window, Account For Window Borders
		AdjustWindowRectEx (&windowRect, windowStyle, 0, windowExtendedStyle);
	}

	// Create The OpenGL Window
	window->hWnd = CreateWindowEx (windowExtendedStyle,					// Extended Style
								   window->init.application->className,	// Class Name
								   window->init.title,					// Window Title
								   windowStyle,							// Window Style
								   0, 0,								// Window X,Y Position
								   windowRect.right - windowRect.left,	// Window Width
								   windowRect.bottom - windowRect.top,	// Window Height
								   HWND_DESKTOP,						// Desktop Is Window's Parent
								   0,									// No Menu
								   window->init.application->hInstance, // Pass The Window Instance
								   window);

	if (window->hWnd == 0)												// Was Window Creation A Success?
	{
		return FALSE;													// If Not Return False
	}

	window->hDC = GetDC (window->hWnd);									// Grab A Device Context For This Window
	if (window->hDC == 0)												// Did We Get A Device Context?
	{
		// Failed
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
		return FALSE;													// Return False
	}

	PixelFormat = ChoosePixelFormat (window->hDC, &pfd);				// Find A Compatible Pixel Format
	if (PixelFormat == 0)												// Did We Find A Compatible Format?
	{
		// Failed
		ReleaseDC (window->hWnd, window->hDC);							// Release Our Device Context
		window->hDC = 0;												// Zero The Device Context
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
		return FALSE;													// Return False
	}

	if (SetPixelFormat (window->hDC, PixelFormat, &pfd) == FALSE)		// Try To Set The Pixel Format
	{
		// Failed
		ReleaseDC (window->hWnd, window->hDC);							// Release Our Device Context
		window->hDC = 0;												// Zero The Device Context
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
		return FALSE;													// Return False
	}

	window->hRC = wglCreateContext (window->hDC);						// Try To Get A Rendering Context
	if (window->hRC == 0)												// Did We Get A Rendering Context?
	{
		// Failed
		ReleaseDC (window->hWnd, window->hDC);							// Release Our Device Context
		window->hDC = 0;												// Zero The Device Context
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
		return FALSE;													// Return False
	}

	// Make The Rendering Context Our Current Rendering Context
	if (wglMakeCurrent (window->hDC, window->hRC) == FALSE)
	{
		// Failed
		wglDeleteContext (window->hRC);									// Delete The Rendering Context
		window->hRC = 0;												// Zero The Rendering Context
		ReleaseDC (window->hWnd, window->hDC);							// Release Our Device Context
		window->hDC = 0;												// Zero The Device Context
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
		return FALSE;													// Return False
	}

	ShowWindow (window->hWnd, SW_NORMAL);								// Make The Window Visible
	window->isVisible = TRUE;											// Set isVisible To True

	ReshapeGL (window->init.width, window->init.height);				// Reshape Our GL Window

	ZeroMemory (window->keys, sizeof (Keys));							// Clear All Keys

	window->lastTickCount = GetTickCount ();							// Get Tick Count

	return TRUE;														// Window Creating Was A Success
																		// Initialization Will Be Done In WM_CREATE
}

BOOL DestroyWindowGL (GL_Window* window)								// Destroy The OpenGL Window & Release Resources
{
	if (window->hWnd != 0)												// Does The Window Have A Handle?
	{	
		if (window->hDC != 0)											// Does The Window Have A Device Context?
		{
			wglMakeCurrent (window->hDC, 0);							// Set The Current Active Rendering Context To Zero
			if (window->hRC != 0)										// Does The Window Have A Rendering Context?
			{
				wglDeleteContext (window->hRC);							// Release The Rendering Context
				window->hRC = 0;										// Zero The Rendering Context

			}
			ReleaseDC (window->hWnd, window->hDC);						// Release The Device Context
			window->hDC = 0;											// Zero The Device Context
		}
		DestroyWindow (window->hWnd);									// Destroy The Window
		window->hWnd = 0;												// Zero The Window Handle
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品一区二区三区五月婷| 丝袜诱惑亚洲看片| 丁香激情综合五月| 日本一区二区免费在线观看视频 | 在线观看免费成人| 亚洲一区二区美女| 欧美一区二区精品在线| 国产一区二区免费视频| 亚洲国产精品av| 色视频欧美一区二区三区| 悠悠色在线精品| 欧美一区二区在线不卡| 国产九九视频一区二区三区| 亚洲视频中文字幕| 欧美日韩在线播放一区| 裸体一区二区三区| 欧美国产综合一区二区| 在线观看三级视频欧美| 精品一区二区三区欧美| 国产精品美女久久久久久久网站| 色爱区综合激月婷婷| 美日韩一区二区三区| 中文在线一区二区| 欧美最新大片在线看| 韩国一区二区三区| 一区二区欧美精品| 2023国产精华国产精品| 色先锋久久av资源部| 美女尤物国产一区| 中文字幕一区二区三区四区不卡 | 一区二区不卡在线播放| 在线不卡一区二区| 成人国产亚洲欧美成人综合网| 亚洲一区二区三区四区在线 | 日韩欧美一级特黄在线播放| 波多野结衣中文一区| 男女男精品视频| 亚洲男帅同性gay1069| 精品91自产拍在线观看一区| 在线观看精品一区| 成人免费毛片app| 免费av成人在线| 一区二区三区精品在线观看| 久久久久99精品国产片| 91精品一区二区三区久久久久久 | www.欧美日韩国产在线| 麻豆91在线播放| 亚洲一区二区三区爽爽爽爽爽| 国产日韩三级在线| 日韩一级欧美一级| 在线观看国产日韩| 99国产精品久久久久| 久久精品久久久精品美女| 午夜国产精品一区| 一个色综合av| 亚洲日本在线视频观看| 欧美高清在线一区| 国产亚洲精品超碰| www激情久久| 日韩精品一区二区三区视频播放| 欧美三级蜜桃2在线观看| 92国产精品观看| 国产成人av电影在线| 国产呦精品一区二区三区网站| 欧美a级理论片| 日韩一区精品字幕| 亚洲成精国产精品女| 夜色激情一区二区| 洋洋成人永久网站入口| 亚洲一区中文日韩| 亚洲综合精品自拍| 亚洲国产中文字幕在线视频综合| 亚洲欧美日韩系列| 亚洲欧美日韩在线| 一区二区三区影院| 亚洲小说欧美激情另类| 一区二区视频在线看| 亚洲精品水蜜桃| 亚洲一本大道在线| 肉色丝袜一区二区| 美脚の诱脚舐め脚责91| 久久97超碰色| 国产成人午夜高潮毛片| 成人禁用看黄a在线| voyeur盗摄精品| 色综合激情五月| 欧美系列一区二区| 日韩一区二区三区在线| 日韩精品在线一区二区| 久久人人97超碰com| 国产欧美一区视频| 亚洲日本va午夜在线影院| 悠悠色在线精品| 婷婷一区二区三区| 激情综合网最新| 成人深夜视频在线观看| 欧美亚洲综合网| 欧美高清一级片在线| 欧美成人一区二区三区| 中文字幕av一区二区三区免费看 | 国产综合色视频| 97se狠狠狠综合亚洲狠狠| 色94色欧美sute亚洲13| 欧美高清精品3d| 国产欧美精品在线观看| 亚洲一区二区三区国产| 久久精品国产亚洲a| 大白屁股一区二区视频| 在线观看不卡视频| 精品久久免费看| 亚洲特黄一级片| 蜜桃av一区二区| 波多野结衣精品在线| 在线不卡中文字幕播放| 欧美国产亚洲另类动漫| 午夜精品影院在线观看| 国产精品99久久不卡二区| 欧美色综合久久| 国产亚洲欧美日韩俺去了| 亚洲综合久久av| 国产夫妻精品视频| 欧美日韩一区中文字幕| 欧美高清在线视频| 免费精品99久久国产综合精品| 99久久精品一区| 欧美mv日韩mv| 亚洲国产三级在线| 成人av免费网站| 欧美大黄免费观看| 亚洲一区二区视频在线观看| 国产成人亚洲精品青草天美| 欧美一区日本一区韩国一区| **欧美大码日韩| 韩国av一区二区三区| 91精品国模一区二区三区| 亚洲精品免费在线| 成人av网在线| 久久久噜噜噜久噜久久综合| 天天做天天摸天天爽国产一区| 91免费在线看| 久久精品男人天堂av| 久久精品国产999大香线蕉| 欧美亚洲一区三区| 中文字幕亚洲一区二区va在线| 国产在线视频一区二区三区| 6080亚洲精品一区二区| 亚洲精品精品亚洲| 99久久久精品| 亚洲欧洲精品成人久久奇米网| 国产一区二区视频在线播放| 欧美一卡2卡3卡4卡| 亚洲va韩国va欧美va精品| 色狠狠一区二区| 成人免费小视频| 99re免费视频精品全部| 久久精品日产第一区二区三区高清版 | 风流少妇一区二区| 久久久久久夜精品精品免费| 久久超级碰视频| 欧美一激情一区二区三区| 午夜精品久久久久久| 欧美日韩三级视频| 香蕉久久一区二区不卡无毒影院| 在线视频一区二区三| 一区二区三区国产精华| 色婷婷av一区二区| 亚洲精品国产a久久久久久| 国产日韩v精品一区二区| 欧美日韩一二三| 国产精品网站在线观看| 亚洲成av人片www| 51精品秘密在线观看| 青青草原综合久久大伊人精品 | 在线观看日韩av先锋影音电影院| 亚洲三级在线观看| 欧亚一区二区三区| 五月天激情综合网| 欧美一区二区三区四区久久 | 国模冰冰炮一区二区| 国产亚洲视频系列| yourporn久久国产精品| 亚洲精品日日夜夜| 欧美日韩一区不卡| 久久精品999| 中文字幕免费观看一区| 91在线观看下载| 亚洲成人第一页| 欧美videos中文字幕| 成人激情动漫在线观看| 一区二区三区视频在线看| 欧美日韩在线播| 国产真实乱偷精品视频免| 国产精品免费av| 欧美色成人综合| 国产一区二区三区精品视频| 国产精品久99| 欧美一区二区三区成人| 国产91对白在线观看九色| 亚洲欧美成aⅴ人在线观看| 欧美一区二视频|