OpenGLES---初始化OpenGL-ES环境
来源:互联网 发布:iphone4s越狱软件源 编辑:程序博客网 时间:2024/05/18 05:51
转自:http://blog.csdn.net/gamecocos2dx/article/details/51481619
{1:获取 Display2:初始化 egl3:选择 Config4:创建 Surface5:创建上下文对象6:查看 Display Surface Context 是否创建成功7:绘制8:销毁 OpenGLES}
#include <EGL/egl.h>#include <gles2/gl2.h>#include "freeImage/FreeImage.h"class WinApp {public:WinApp(HINSTANCE hInstance);virtual~WinApp(void);virtual LRESULT onEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);static LRESULT CALLBACK wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);int main(int wWidth,int wHegith);bool configurationInit();void draw();//画void destroy();//销毁private:HINSTANCE _hInstance;//实例句柄HWND _hWnd;//窗口句柄protected;int _width; // 视口宽度int _height;// 视口高度EGLDisplay _display;EGLContext _context;EGLSurface _surface;EGLConfig _config;};
#include "WinApp.h" bool WinApp::configurationInit(){ //1:获取 Display _display = eglGetDisplay(EGL_DEFAULT_DISPLAY); //2:初始化 egl EGLint major;//返回主版本号 EGLint minor;//返回次版本号 eglInitialize(_display, &major, &minor); //3:选择 Config const EGLint attribs[] ={ //属性是一对一的初始化(类似与key->value) EGL_SURFACE_TYPE, EGL_WINDOW_BIT,//把数据画到窗口上 EGL_BLUE_SIZE, 8,//R 占8个比特位 EGL_GREEN_SIZE, 8,//G 占8个比特位 EGL_RED_SIZE, 8, //B 占8个比特位 EGL_DEPTH_SIZE,24,//深度值 占24个比特位 画图的深度值 (前后顺序的层) EGL_NONE //这个机构结束了 }; EGLint format(0); EGLint numConfigs(0); //让EGL为你选择一个配置 eglChooseConfig(_display, attribs, &_config, 1, &numConfigs); //可以查询某个配置的某个属性 eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format); 4:创建 Surface _surface = eglCreateWindowSurface(_display, _config, _hWnd, NULL); //5:创建上下文对象 EGLint attr[] ={ EGL_CONTEXT_CLIENT_VERSION, 2, EGL_NONE, EGL_NONE }; //创建上下文对象 _context = eglCreateContext(_display, _config, EGL_NO_CONTEXT, attr); //6:查看 Display Surface Context 是否创建成功 if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE){ return false; } //查询Suface的属性 获取Suface中的宽高 eglQuerySurface(_display, _surface, EGL_WIDTH, &_width); eglQuerySurface(_display, _surface, EGL_HEIGHT, &_height); return true; } void WinApp::draw(){ //glDrawArrays(GL_TRIANGLE_STRIP,0,0); glClearColor(0,0,1,1);//刷屏 //清除颜色GL_COLOR_BUFFER_BIT 和 清除深度值GL_DEPTH_BUFFER_BIT glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glViewport(0,0,_width,_height);//绘制区域 //绘制 eglSwapBuffers(_display,_surface); } void WinApp::destroy(){ if (_display != EGL_NO_DISPLAY){//当前的Display 不等于null //清楚绑定的 Surface Context eglMakeCurrent(_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT); if (_context != EGL_NO_CONTEXT){//不等于空Context //销毁上下文 eglDestroyContext(_display, _context); } if (_surface != EGL_NO_SURFACE){//不等于空Surface //销毁Surface eglDestroySurface(_display, _surface); } //终止Dispay eglTerminate(_display); } //把 Display Context Surface 设置成初始化 _display = EGL_NO_DISPLAY; _context = EGL_NO_CONTEXT; _surface = EGL_NO_SURFACE; } //---------------------窗口---------------------- WinApp::WinApp(HINSTANCE hInstance):_hInstance(hInstance){ WNDCLASSEX winClass; winClass.lpszClassName = _T("CELLWinApp");//指向类名称的指针(窗口名字) winClass.cbSize = sizeof(winClass);//WNDCLASSEX 的大小 winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;//窗口风格 winClass.lpfnWndProc = wndProc;//窗口处理函数的指针 winClass.hInstance = hInstance;//本模块的实例句柄 winClass.hIcon = 0;//图标 winClass.hIconSm = 0;//和窗口类关联的小图标,如果该值为NULL,则把hIcon中的图标转换成大小合适的小图标 winClass.hCursor = LoadCursor(hInstance, IDC_ARROW);//鼠标句柄 winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);//背景画刷的句柄。 winClass.lpszMenuName = NULL;//指向菜单的指针 winClass.cbClsExtra = 0; winClass.cbWndExtra = 0; //1:注册窗口 //随后在调用Createwindow函数和CreatewindowEx函数中使用的窗口注册一个窗口类。 RegisterClassEx(&winClass); } LRESULT CALLBACK WinApp::wndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ //获取窗口属性 WinApp* pThis = (WinApp*)GetWindowLong(hWnd,GWL_USERDATA); if (pThis) { return pThis->onEvent(hWnd,msg,wParam,lParam); } if (WM_CREATE == msg){ //窗口创建完成时发来的消息 CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam; //获取当前对象(CreateWindowEx函数中最后一个参数) DWORD_PTR pCreateParams = (DWORD_PTR)pCreate->lpCreateParams; /**设置窗口属性 * @param HWND hWnd 窗口句柄 * @param int nlndex * @param LONG dwNewLong */ SetWindowLong(hWnd,GWL_USERDATA,pCreateParams); } return DefWindowProc( hWnd, msg, wParam, lParam ); } //事件函数 LRESULT WinApp::onEvent(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam){ switch (msg){ //处理得到的消息 case WM_CLOSE://处理窗口关闭时的消息 case WM_DESTROY://销毁 { ::PostQuitMessage(0); } break; case WM_LBUTTONDOWN: //鼠标左键被按下的消息 break; case WM_RBUTTONDOWN://鼠标右键被按下的消息 break; case WM_MOUSEMOVE://鼠标移动 break; case WM_KEYDOWN://监听键盘按键 switch (wParam){ case VK_LEFT: break; default: break; } break; default: return DefWindowProc( hWnd, msg, wParam, lParam ); } return S_OK; } WinApp::~WinApp(void){ //注销一个窗口类,类释放所需的内存 UnregisterClass(_T("CELLWinApp"),_hInstance); destroy(); } int WinApp::main(int wWidth,int wHegith){ //2:创建窗口 //创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口,其他与CreateWindow函数相同。关于创建窗口和其他参数的内容,请参看CreateWindow。 /**创建一个具有扩展风格的层叠式窗口、弹出式窗口或子窗口 * @param DWORD dwExStyle 窗口的扩展风格 * @param LPCWSTR lpClassName 指向注册类名的指针 * @param LPCWSTR lpWindowName 指向窗口名称的指针 * @param DWORD dwStyle 窗口风格 * @param int X 窗口的水平位置 * @param int Y 窗口的垂直位置 * @param int nWidth 窗口的宽度 * @param int nHeight 窗口的高度 * @param HWND hWndParent 父窗口的句柄 * @param HMENU hMenu 菜单的句柄或是子窗口的标识符 * @param HINSTANCE hInstance 应用程序实例的句柄 * @param LPVOID lpParam 指向窗口的创建数据 */ _hWnd = CreateWindowEx( NULL, _T("CELLWinApp"), _T("CELLWinApp"), WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, wWidth, wHegith, NULL, NULL, _hInstance,this ); if (_hWnd == 0) { return -1; } //3:更新显示窗口 ShowWindow(_hWnd,SW_SHOW);//SW_MAXIMIZE 扩大窗口,SW_SHOW configurationInit(); //4:消息循环 MSG msg = {0}; while(msg.message != WM_QUIT) { //消息不等于退出 //毁坏,结束 if (msg.message == WM_DESTROY || msg.message == WM_CLOSE){ break; } //有消息返回真,无消息返回假 if( PeekMessage( &msg, NULL, 0, 0, PM_REMOVE ) ){//有消息:处理消息 TranslateMessage( &msg );//消息处理 DispatchMessage( &msg );//分发给那个窗口(程序中有好多窗口,那个点击了,就分发给那个) }else{//无消息:则进行渲染绘制或睡眠 // Sleep(1); draw(); } } return 0; }
画出一个蓝色的界面就可以了
0 0
- OpenGLES---初始化OpenGL-ES环境
- OpenGLES---初始化OpenGL-ES环境
- Opengles 显示文字 (Opengl ES笔记)
- OpenGLES::体验OpenGL ES的乐趣
- openGl ES初始化
- OpenGL ES(1) - 构建OpenGL ES环境
- 建立OpenGL ES环境
- opengl es 2.0环境
- 建立OpenGL ES环境
- OpenGLES/OpenGL 区别&OpenGL ES 1.x/OpenGL ES 2.0 区别
- OpenGLES/OpenGL 区别&OpenGL ES 1.x/OpenGL ES 2.0 区别
- WINCE 下 Opengles 纹理的创建 (Opengl ES笔记)
- Opengles 2.0 错误 called unimplemented OpenGL ES API
- 一篇通俗易懂的讲解OpenGL ES的文章,opengles
- 一篇通俗易懂的讲解OpenGL ES的文章,opengles
- 建立一个OpenGL ES环境
- ARCore:OpenGL ES环境搭建
- openGL ES 2.0 初始化(I)
- DB2里-818错误原因及解决方法
- Duilib六大布局及绝对布局和相对布局
- linux下安装Matlab的过程
- Apple Pay编程指导
- rt_thread 采用scons构建系统
- OpenGLES---初始化OpenGL-ES环境
- Java核心内库-线程-线程同步-同步锁(Lock)
- Android 事件捕捉和处理流程
- 用命令实现Win7远程桌面关机和重启
- PHP效率计:从引号开始(单引号、双引号效率区别)
- vim练级攻略
- Android jni 入门之 (java类-》.h-》.c/c++)一条龙对应
- Python34+selenium自动化测试环境部署
- Shell 脚本小试牛刀(2) -- git仓库的选取以及迁移