gles2.0环境的在windows上的建立

这里也有一个视频来讲解,大家可以看下,可以多提问题,意见,建议

http://edu.csdn.net/course/detail/606

  1 #include <Windows.h>
  2 #include <tchar.h>
  3 #include <EGL/egl.h>
  4 #include <gles2/gl2.h>
  5
  6
  7
  8 class   CELLWinApp
  9 {
 10 public:
 11     /**
 12     *   应用程序实例句柄
 13     */
 14     HINSTANCE           _hInstance;
 15     /**
 16     *   窗口句柄,操作窗口使用
 17     */
 18     HWND                _hWnd;
 19     /**
 20     *   窗口的宽度和高度
 21     */
 22     int                 _winWidth;
 23     int                 _winHeight;
 24     EGLConfig            _config;
 25     EGLSurface             _surface;
 26     EGLContext             _context;
 27     EGLDisplay             _display;
 28 public:
 29     CELLWinApp(HINSTANCE hInstance = 0)
 30     {
 31         _hWnd       =   0;
 32         _winWidth   =   0;
 33         _winHeight  =   0;
 34         _hInstance  =   hInstance;
 35         _config     =   0;
 36         _surface    =   0;
 37         _context    =   0;
 38         _display    =   0;
 39         /**
 40         *   要想创建一个窗口,首先要注册一个窗口类
 41         *   相关内存,可以了解windows变成,这里不做介绍。
 42         */
 43         ::WNDCLASSEX winClass;
 44         winClass.lpszClassName  =   _T("CELLWinApp");
 45         winClass.cbSize         =   sizeof(::WNDCLASSEX);
 46         winClass.style          =   CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
 47         winClass.lpfnWndProc    =   windowProc;
 48         winClass.hInstance      =   hInstance;
 49         winClass.hIcon            =   0;
 50         winClass.hIconSm        =   0;
 51         winClass.hCursor        =   LoadCursor(NULL, IDC_ARROW);
 52         winClass.hbrBackground  =   (HBRUSH)GetStockObject(BLACK_BRUSH);
 53         winClass.lpszMenuName   =   NULL;
 54         winClass.cbClsExtra     =   0;
 55         winClass.cbWndExtra     =   0;
 56         RegisterClassEx(&winClass);
 57     }
 58     virtual ~CELLWinApp()
 59     {
 60     }
 61     /**
 62     *   渲染函数
 63     */
 64     virtual void    render()
 65     {
 66         glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
 67         glViewport(0,0,_winWidth,_winHeight);
 68         {
 69
 70         }
 71         eglSwapBuffers(_display, _surface);
 72     }
 73
 74     /**
 75     *   入口函数
 76     *   width :创建窗口宽度
 77     *   height:创建窗口的高度
 78     */
 79     int     start(HWND hWnd,int width,int height)
 80     {
 81         _winWidth   =   width;
 82         _winHeight  =   height;
 83
 84         /**
 85         *   创建窗口
 86         */
 87         if (hWnd == 0)
 88         {
 89             if (!_createWindow(_winWidth,_winHeight))
 90             {
 91                 return  -1;
 92             }
 93         }
 94         else
 95         {
 96             _hWnd   =   hWnd;
 97         }
 98         /**
 99         *   初始化gles环境。
100         */
101         if (!initDevice())
102         {
103             return  -2;
104         }
105         onInit();
106
107         if (hWnd)
108         {
109             return  0;
110         }
111         /**
112         *   进入消息循环
113         */
114         MSG msg =   {0};
115         while(msg.message != WM_QUIT)
116         {
117             if (msg.message == WM_DESTROY ||
118                 msg.message == WM_CLOSE)
119             {
120                 break;
121             }
122             /**
123             *   有消息,处理消息,无消息,则进行渲染绘制
124             */
125             if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) )
126             {
127                 TranslateMessage( &msg );
128                 DispatchMessage( &msg );
129             }
130             else
131             {
132                 render();
133             }
134         }
135         /**
136         *   关闭
137         */
138         shutDownDevice();
139
140         return  0;
141     }
142     /**
143     *   初始化OpenGL
144     */
145     bool    initDevice()
146     {
147
148         const EGLint attribs[] =
149         {
150             EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
151             EGL_BLUE_SIZE, 8,
152             EGL_GREEN_SIZE, 8,
153             EGL_RED_SIZE, 8,
154             EGL_DEPTH_SIZE,24,
155             EGL_NONE
156         };
157         EGLint     format(0);
158         EGLint    numConfigs(0);
159         EGLint  major;
160         EGLint  minor;
161
162         //! 1
163         _display        =    eglGetDisplay(EGL_DEFAULT_DISPLAY);
164
165         //! 2init
166         eglInitialize(_display, &major, &minor);
167
168         //! 3
169         eglChooseConfig(_display, attribs, &_config, 1, &numConfigs);
170
171         eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format);
172         //! 4
173         _surface        =     eglCreateWindowSurface(_display, _config, _hWnd, NULL);
174
175         //! 5
176         EGLint attr[]   =   { EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE };
177         _context         =     eglCreateContext(_display, _config, 0, attr);
178         //! 6
179         if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE)
180         {
181             return false;
182         }
183
184         eglQuerySurface(_display, _surface, EGL_WIDTH,  &_winWidth);
185         eglQuerySurface(_display, _surface, EGL_HEIGHT, &_winHeight);
186
187         //! windows api
188         SendMessage(_hWnd,WM_SIZE,0,0);
189         return  true;
190     }
191     /**
192     *   关闭
193     */
194     void    shutDownDevice()
195     {
196
197          onDestroy();
198          if (_display != EGL_NO_DISPLAY)
199          {
200              eglMakeCurrent(_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
201              if (_context != EGL_NO_CONTEXT)
202              {
203                  eglDestroyContext(_display, _context);
204              }
205              if (_surface != EGL_NO_SURFACE)
206              {
207                  eglDestroySurface(_display, _surface);
208              }
209              eglTerminate(_display);
210          }
211          _display    =   EGL_NO_DISPLAY;
212          _context    =   EGL_NO_CONTEXT;
213          _surface    =   EGL_NO_SURFACE;
214
215         UnregisterClass( _T("CELLWinApp"), _hInstance );
216     }
217     /**
218     *   事件
219     */
220     virtual int     events(unsigned msg, unsigned wParam, unsigned lParam)
221     {
222     #ifndef GET_X_LPARAM
223         #define GET_X_LPARAM(lp)                        ((int)(short)LOWORD(lp))
224     #endif
225
226     #ifndef GET_Y_LPARAM
227         #define GET_Y_LPARAM(lp)                        ((int)(short)HIWORD(lp))
228     #endif
229
230     #ifndef GET_WHEEL_DELTA_WPARAM
231         #define GET_WHEEL_DELTA_WPARAM(wParam)          (int)((short)HIWORD(wParam))
232     #endif
233
234         switch( msg )
235         {
236         case WM_SIZE:
237             {
238                 RECT    rt;
239                 GetClientRect(_hWnd,&rt);
240                 _winWidth   =   rt.right - rt.left;
241                 _winHeight  =   rt.bottom - rt.top;
242             }
243             break;
244         case WM_LBUTTONDOWN:
245             {
246             }
247             break;
248         case WM_LBUTTONUP:
249             {
250             }
251             break;
252         case WM_RBUTTONDOWN:
253             {
254             }
255             break;
256         case WM_RBUTTONUP:
257             {
258             }
259             break;
260         case WM_MOUSEMOVE:
261             {
262             }
263             break;
264
265         case WM_MOUSEWHEEL:
266             {
267             }
268             break;
269         case WM_CHAR:
270             {
271             }
272             break;
273         case WM_KEYDOWN:
274             {
275             }
276             break;
277         case WM_CLOSE:
278         case WM_DESTROY:
279             {
280                 ::PostQuitMessage(0);
281             }
282             break;
283         default:
284             return DefWindowProc(_hWnd, msg, wParam, lParam );
285         }
286         return  0;
287     }
288 public:
289     /**
290     *   增加一个初始化OpenGL的函数,第二课中增加
291     *   调用该函数完成对OpenGL的基本状态的初始化
292     *   在进入消息循环之前的一次通知,只调用一次
293     */
294     virtual void    onInit()
295     {
296         /**
297         *   清空窗口为黑色
298         */
299         glClearColor(0,0,0,1);
300         /**
301         *   设置OpenGL视口的位置和大小。
302         */
303         glViewport( 0, 0, (GLint) _winWidth, (GLint) _winHeight );
304     }
305     virtual void        onDestroy()
306     {
307     }
308 protected:
309     /**
310     *   创建窗口函数
311     */
312     bool    _createWindow(int width,int height)
313     {
314         _hWnd   =   CreateWindowEx(
315                                     NULL,
316                                     _T("CELLWinApp"),
317                                     _T("CELLWinApp"),
318                                     WS_OVERLAPPEDWINDOW,
319                                     CW_USEDEFAULT,
320                                     CW_USEDEFAULT,
321                                     width,
322                                     height,
323                                     NULL,
324                                     NULL,
325                                     _hInstance,
326                                     this    //! 这里注意,将当前类的指针作为参数,传递,参见 windowProc函数.
327                                     );
328
329         if( _hWnd == 0 )
330         {
331             return  false;
332         }
333         ShowWindow( _hWnd, SW_SHOW );
334         UpdateWindow( _hWnd );
335         return  true;
336     }
337     /**
338     *   Windows消息过程处理函数
339     */
340     static  LRESULT CALLBACK    windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
341     {
342 #define GWL_USERDATA (-21)
343         /**
344         *   使用this数据,将全局函数,转化为类的成员函数调用
345         */
346         CELLWinApp*  pThis   =   (CELLWinApp*)GetWindowLong(hWnd,GWL_USERDATA);
347         if (pThis)
348         {
349             return  pThis->events(msg,wParam,lParam);
350         }
351         if (WM_CREATE == msg)
352         {
353             CREATESTRUCT*   pCreate =   (CREATESTRUCT*)lParam;
354             SetWindowLong(hWnd,GWL_USERDATA,(DWORD_PTR)pCreate->lpCreateParams);
355         }
356         return  DefWindowProc( hWnd, msg, wParam, lParam );
357     }
358 };
时间: 2025-01-06 00:41:19

gles2.0环境的在windows上的建立的相关文章

在vmware workstation10.0环境下给windows server2012R2成功安装hyper-v

有时我们在vmware workstation10.0环境中给windows server 2012R2安装Hyper-v的时候会提示"无法安装Hyper-v:虚拟机监控程序已在运行中"如图,我们可以通过设置让其顺利安装.(温馨提示,在windows8或者8.1中如果你添加了Hyper-v功能后不可用也可以通过此方法来解决) 第一步,打开虚拟机设置选择处理器勾选中"虚拟化Intel VT-x/EPT 或AMD-V/RVT(V)" 第二步:打开虚拟机文件选中后缀名为&

redis3.0 集群在windows上的配置(转)

1. 安装Redis版本:win-3.0.501https://github.com/MSOpenTech/redis/releases页面有,我下载的是zip版本的:Redis-x64-3.0.501.zip:最好也下载源代码的zip包. 将redis解压,如解压到d:\rediscluster\redis(压缩包内无文件夹) 2. 安装Ruby http://dl.bintray.com/oneclick/rubyinstaller/rubyinstaller-2.2.4-x64.exe 这

windows 8.0上eclipse 4.4.0 配置centos 6.5 上的hadoop2.2.0开发环境

eclipse的hadoop插件下载地址:https://github.com/winghc/hadoop2x-eclipse-plugin 将下载的压缩包解压,将hadoop-eclipse-kepler-plugin-2.2.0这个jar包扔到eclipse下面的dropins目录下,重启eclipse即可 进入windows->Preference配置根目录,这里面的hadoop installation directory并不是你windows上装的hadoop目录,而仅仅是你在cent

Windows上使用Vagrant打造Laravel Homestead可协同跨平台开发环境

1.简介 Laravel 致力于让整个 PHP 开发过程变得让人愉悦,包括本地开发环境,为此官方为我们提供了一整套本地开发环境 —— Laravel Homestead. Laravel Homestead 是一个打包好各种 Laravel 开发所需要的工具及环境的 Vagrant 盒子(Vagrant 提供了一个便捷的方式来管理和设置虚拟机),该盒子为我们提供了优秀的开发环境,有了它,我们不再需要在本地环境安装 PHP.HHVM.Web服务器以及其它工具软件,我们也完全不用再担心误操作搞乱操作

记一次在Windows上搭建React Native Android环境踩过的坑

要说最近技术圈什么比较活跃,我想除了动态加载框架和热修复技术之外,非Facebook的React Native莫属了吧,其实RN对IOS的支持比较早,但是Android似乎难产了,直到9月份才刚开源.距离RN开源也有一段时间了,一直没有去学习,今天兴趣来潮,索性学一把吧. 本文假设你的Windows上安装了Android SDK,并配置好了环境变量. 安装Node.js 从官网https://nodejs.org/en/下载Node.js的windows版,也不知道为什么版本迭代这么快,之前安装

Windows上搭建hadoop开发环境

前言 Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处是使用比较方便,安装过程也简单,本篇文章是介绍第二种方式Cygwin模拟Linux环境. 准备工作 (1)安装JDK1.6或更高版本,安装时注意,最好不要安装到带有空格的路径名下,例如:Programe Files,否则在配置Hadoop的配置文件时会找不到JDK. (2)hadoop官网下载

基于QT 5.7.0 for Android 的 Windows 开发环境搭建

基于QT 5.7.0 for Android 的 Windows 开发环境搭建 本文属于转载原文地址https://my.oschina.net/armsky/blog/740645 一.下载软件1.jdk:jdk-8u102-windows-i586.exehttp://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.htmlhttp://download.oracle.com/otn-pub/ja

windows上eclipse搭建hadoop开发环境(自用,备忘)

注:本文为自用,随时更新. 一.系统环境 Windows7.Ecplise 4.4.0,Hadoop2.7.2 Hadoop安装教程请看:Hadoop2.7.2安装教程 此处需要注意的是:你的hadoop运行在远程的虚拟机上,但是你的windows上也需要有hadoop的运行环境,这样eclipse才能进行远程调试,所按照上面教程安装完虚拟机上的hadoop,还需要下载同样版本的Hadoop加压到windows上即可,还需要配置相应的环境变量,拷贝winutil.exe.hadoop.dll等文

Windows Server 2008-Visual Studio 2010- CUDA7.0环境安装及创建工程

CUDA软件安装 进入https://developer.nvidia.com/cuda-downloads下载CUDA软件,根据相应的系统版本,选择下载项. 下载后双击即可安装,网络已有许多技术资源对CUDA安装过程和截图进行介绍,这里不再详述,具体可见参考文献列出的资源.这里主要列出一些安装过程中需要注意的内容. CUDA安装程序选择 之前版本的需要下载驱动.toolkit.SDK,然后依次安装.对于后面的版本,不需要分别下载并安装这些软件.而只需要到上述网址下载最新CUDA软件,因为现在C