- 学习OpenGL总结二
- OpenGL_FirstWin32.cpp : 定义应用程序的入口点
- //OpenGL Framework
- //OpenGL 框架类
- #include "stdafx.h"
- #include "OpenGL_FirstWin32.h"
- #include "DrawGLScene_3D.h"
- #include "DrawGLScene_贴图.h"
- OpenGLFrameWork* GLFW;
- LRESULT CALLBACK WndProc( HWND hWnd, // 窗口的句柄
- UINT uMsg, // 窗口的消息
- WPARAM wParam, // 附加的消息内容
- LPARAM lParam) // 附加的消息内容
- {
- switch (uMsg) // 检查Windows消息
- {
- case WM_ACTIVATE: // 监视窗口激活消息
- {
- if (!HIWORD(wParam)) // 检查最小化状态
- {
- GLFW->active=TRUE; // 程序处于激活状态
- }
- else
- {
- GLFW->active=FALSE; // 程序不再激活
- }
- return 0; // 返回消息循环
- }
- case WM_SYSCOMMAND:// 中断系统命令Intercept System Commands
- {
- switch (wParam) // 检查系统调用Check System Calls
- {
- case SC_SCREENSAVE: // 屏保要运行?
- case SC_MONITORPOWER: // 显示器要进入节电模式?
- return 0; // 阻止发生
- }
- break; // 退出
- }
- case WM_CLOSE: //收到Close消息?
- {
- PostQuitMessage(0); // 发出退出消息
- return 0;
- }
- case WM_KEYDOWN: // 有键按下么?
- {
- GLFW->keys[wParam] = TRUE; // 如果是,设为TRUE
- return 0; // 返回
- }
- case WM_KEYUP: // 有键放开么?
- {
- GLFW->keys[wParam] = FALSE; // 如果是,设为FALSE
- return 0; // 返回
- }
- case WM_SIZE: // 调整OpenGL窗口大小
- {
- GLFW->ReSizeGLScene(LOWORD(lParam),HIWORD(lParam)); // LoWord=Width,HiWord=Height
- return 0; // 返回
- }
- }
- //向 DefWindowProc传递所有未处理的消息。
- return DefWindowProc(hWnd,uMsg,wParam,lParam);
- }
- //下面是我们的Windows程序的入口。将会调用窗口创建例程,处理窗口消息,并监视人机交互。
- int WINAPI WinMain( HINSTANCE hInstance,//实例
- HINSTANCE hPrevInstance,// 前一个实例
- LPSTR lpCmdLine, // 命令行参数
- int nCmdShow) // 窗口显示状态
- {
- MSG msg; // Windowsx消息结构
- BOOL done=FALSE; // 用来退出循环的Bool 变量
- //GLFW=new OpenGLFrameWork();
- GLFW=new OpenGLFrameWork_3D();
- //GLFW=new OpenGLFrameWork_TT();
- // 提示用户选择运行模式
- if (MessageBox(NULL,(LPCWSTR)"Would You Like To Run In Fullscreen Mode?", (LPCWSTR)"Start
- FullScreen?",MB_YESNO|MB_ICONQUESTION)==IDNO)
- {
- GLFW->fullscreen=FALSE; //窗口模式
- }
- //创建OpenGL窗口
- if (!GLFW->CreateGLWindow("NeHe's OpenGL Framework",640,480,16,GLFW->fullscreen))
- {
- return 0; // 失败退出
- }
- while(!done) //保持循环直到 done=TRUE
- {
- if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))
- {//有消息在等待吗?
- if (msg.message==WM_QUIT)//收到退出消息?
- {
- done=TRUE; // 是,则done=TRUE
- }
- else // 不是,处理窗口消息
- { //如果不是退出消息,我们翻译消息,然后发送消息,使得WndProc() 或 Windows能够
- 处理他们。
- TranslateMessage(&msg);// 翻译消息
- DispatchMessage(&msg); // 发送消息
- }
- }
- else // 如果没有消息
- {
- //如果没有消息,绘制我们的OpenGL场景。代码的第一行查看窗口是否激活。如果按下ESC键
- ,done变量被设为TRUE,程序将会退出。
- // 绘制场景。监视ESC键和来自DrawGLScene()的退出消息
- if (GLFW->active) // 程序激活的么?
- {
- if (GLFW->keys[VK_ESCAPE]) // ESC 按下了么?
- {
- done=TRUE; // ESC 发出退出信号
- }
- else// 不是退出的时候,刷新屏幕
- {
- //DrawGLScene();// 绘制场景
- GLFW->DrawGLScene();// 绘制3D场景
- SwapBuffers(GLFW->hDC);// 交换缓存 (双缓存)
- }
- }
- if (GLFW->keys[VK_F1])// F1键按下了么?
- {
- GLFW->keys[VK_F1]=FALSE;// 若是,使对应的Key数组中的值为 FALSE
- GLFW->KillGLWindow();// 销毁当前的窗口
- GLFW->fullscreen=!GLFW->fullscreen;// 切换 全屏 / 窗口 模式
- // 重建 OpenGL 窗口 第一课内容
- /*if (!CreateGLWindow("NeHe's OpenGL Framework",640,480,16,fullscreen))
- // 如果窗口未能创建,程序退出
- {
- return 0;
- }*/
- //NeHe's First Polygon Tutorial 第二课内容
- if (!GLFW->CreateGLWindow("NeHe's First Polygon
- Tutorial",640,480,16,GLFW->fullscreen)) // 如果窗口未能创建,程序退出
- {
- return 0;
- }
- }
- }
- } //end while
- // 关闭程序
- GLFW->KillGLWindow(); // 销毁窗口
- return (msg.wParam); // 退出程序
- }
学习OpenGL总结二
最新推荐文章于 2024-09-23 21:41:10 发布