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

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

 #include <Windows.h>
#include <tchar.h>
#include <EGL/egl.h>
#include <gles2/gl2.h> class CELLWinApp
{
public:
/**
* 应用程序实例句柄
*/
HINSTANCE _hInstance;
/**
* 窗口句柄,操作窗口使用
*/
HWND _hWnd;
/**
* 窗口的宽度和高度
*/
int _winWidth;
int _winHeight;
EGLConfig _config;
EGLSurface _surface;
EGLContext _context;
EGLDisplay _display;
public:
CELLWinApp(HINSTANCE hInstance = )
{
_hWnd = ;
_winWidth = ;
_winHeight = ;
_hInstance = hInstance;
_config = ;
_surface = ;
_context = ;
_display = ;
/**
* 要想创建一个窗口,首先要注册一个窗口类
* 相关内存,可以了解windows变成,这里不做介绍。
*/
::WNDCLASSEX winClass;
winClass.lpszClassName = _T("CELLWinApp");
winClass.cbSize = sizeof(::WNDCLASSEX);
winClass.style = CS_HREDRAW | CS_VREDRAW | CS_OWNDC;
winClass.lpfnWndProc = windowProc;
winClass.hInstance = hInstance;
winClass.hIcon = ;
winClass.hIconSm = ;
winClass.hCursor = LoadCursor(NULL, IDC_ARROW);
winClass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
winClass.lpszMenuName = NULL;
winClass.cbClsExtra = ;
winClass.cbWndExtra = ;
RegisterClassEx(&winClass);
}
virtual ~CELLWinApp()
{
}
/**
* 渲染函数
*/
virtual void render()
{
glClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
glViewport(,,_winWidth,_winHeight);
{ }
eglSwapBuffers(_display, _surface);
} /**
* 入口函数
* width :创建窗口宽度
* height:创建窗口的高度
*/
int start(HWND hWnd,int width,int height)
{
_winWidth = width;
_winHeight = height; /**
* 创建窗口
*/
if (hWnd == )
{
if (!_createWindow(_winWidth,_winHeight))
{
return -;
}
}
else
{
_hWnd = hWnd;
}
/**
* 初始化gles环境。
*/
if (!initDevice())
{
return -;
}
onInit(); if (hWnd)
{
return ;
}
/**
* 进入消息循环
*/
MSG msg = {};
while(msg.message != WM_QUIT)
{
if (msg.message == WM_DESTROY ||
msg.message == WM_CLOSE)
{
break;
}
/**
* 有消息,处理消息,无消息,则进行渲染绘制
*/
if( PeekMessage( &msg, NULL, , , PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
render();
}
}
/**
* 关闭
*/
shutDownDevice(); return ;
}
/**
* 初始化OpenGL
*/
bool initDevice()
{ const EGLint attribs[] =
{
EGL_SURFACE_TYPE, EGL_WINDOW_BIT,
EGL_BLUE_SIZE, ,
EGL_GREEN_SIZE, ,
EGL_RED_SIZE, ,
EGL_DEPTH_SIZE,,
EGL_NONE
};
EGLint format();
EGLint numConfigs();
EGLint major;
EGLint minor; //! 1
_display = eglGetDisplay(EGL_DEFAULT_DISPLAY); //! 2init
eglInitialize(_display, &major, &minor); //! 3
eglChooseConfig(_display, attribs, &_config, , &numConfigs); eglGetConfigAttrib(_display, _config, EGL_NATIVE_VISUAL_ID, &format);
//! 4
_surface = eglCreateWindowSurface(_display, _config, _hWnd, NULL); //! 5
EGLint attr[] = { EGL_CONTEXT_CLIENT_VERSION, , EGL_NONE, EGL_NONE };
_context = eglCreateContext(_display, _config, , attr);
//! 6
if (eglMakeCurrent(_display, _surface, _surface, _context) == EGL_FALSE)
{
return false;
} eglQuerySurface(_display, _surface, EGL_WIDTH, &_winWidth);
eglQuerySurface(_display, _surface, EGL_HEIGHT, &_winHeight); //! windows api
SendMessage(_hWnd,WM_SIZE,,);
return true;
}
/**
* 关闭
*/
void shutDownDevice()
{ onDestroy();
if (_display != EGL_NO_DISPLAY)
{
eglMakeCurrent(_display, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (_context != EGL_NO_CONTEXT)
{
eglDestroyContext(_display, _context);
}
if (_surface != EGL_NO_SURFACE)
{
eglDestroySurface(_display, _surface);
}
eglTerminate(_display);
}
_display = EGL_NO_DISPLAY;
_context = EGL_NO_CONTEXT;
_surface = EGL_NO_SURFACE; UnregisterClass( _T("CELLWinApp"), _hInstance );
}
/**
* 事件
*/
virtual int events(unsigned msg, unsigned wParam, unsigned lParam)
{
#ifndef GET_X_LPARAM
#define GET_X_LPARAM(lp) ((int)(short)LOWORD(lp))
#endif #ifndef GET_Y_LPARAM
#define GET_Y_LPARAM(lp) ((int)(short)HIWORD(lp))
#endif #ifndef GET_WHEEL_DELTA_WPARAM
#define GET_WHEEL_DELTA_WPARAM(wParam) (int)((short)HIWORD(wParam))
#endif switch( msg )
{
case WM_SIZE:
{
RECT rt;
GetClientRect(_hWnd,&rt);
_winWidth = rt.right - rt.left;
_winHeight = rt.bottom - rt.top;
}
break;
case WM_LBUTTONDOWN:
{
}
break;
case WM_LBUTTONUP:
{
}
break;
case WM_RBUTTONDOWN:
{
}
break;
case WM_RBUTTONUP:
{
}
break;
case WM_MOUSEMOVE:
{
}
break; case WM_MOUSEWHEEL:
{
}
break;
case WM_CHAR:
{
}
break;
case WM_KEYDOWN:
{
}
break;
case WM_CLOSE:
case WM_DESTROY:
{
::PostQuitMessage();
}
break;
default:
return DefWindowProc(_hWnd, msg, wParam, lParam );
}
return ;
}
public:
/**
* 增加一个初始化OpenGL的函数,第二课中增加
* 调用该函数完成对OpenGL的基本状态的初始化
* 在进入消息循环之前的一次通知,只调用一次
*/
virtual void onInit()
{
/**
* 清空窗口为黑色
*/
glClearColor(,,,);
/**
* 设置OpenGL视口的位置和大小。
*/
glViewport( , , (GLint) _winWidth, (GLint) _winHeight );
}
virtual void onDestroy()
{
}
protected:
/**
* 创建窗口函数
*/
bool _createWindow(int width,int height)
{
_hWnd = CreateWindowEx(
NULL,
_T("CELLWinApp"),
_T("CELLWinApp"),
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
width,
height,
NULL,
NULL,
_hInstance,
this //! 这里注意,将当前类的指针作为参数,传递,参见 windowProc函数.
); if( _hWnd == )
{
return false;
}
ShowWindow( _hWnd, SW_SHOW );
UpdateWindow( _hWnd );
return true;
}
/**
* Windows消息过程处理函数
*/
static LRESULT CALLBACK windowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
#define GWL_USERDATA (-21)
/**
* 使用this数据,将全局函数,转化为类的成员函数调用
*/
CELLWinApp* pThis = (CELLWinApp*)GetWindowLong(hWnd,GWL_USERDATA);
if (pThis)
{
return pThis->events(msg,wParam,lParam);
}
if (WM_CREATE == msg)
{
CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam;
SetWindowLong(hWnd,GWL_USERDATA,(DWORD_PTR)pCreate->lpCreateParams);
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
};

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

  1. 神经网络环境搭建,windows上安装theano和keras的流程

    今天碰到有朋友问道怎么在windows下安装keras,正好我刚完成搭建,总结下过程,也算是一个教程吧,给有需要的朋友. 步骤一:安装python. 这一步没啥好说的,下载相应的python安装即可, ...

  2. 新公司,环境搭建,windows上的坑

    1 在windows上安装nodejs环境,node -v 后可以看到版本号 2 在windows上安装nvm管理node的版本,可以对node版本自由切换,使用5.3.0版本的node 3 在win ...

  3. python环境搭建-在Windows上安装python3.5.2

    在Windows上安装Python3.5.2 首先,根据你的Windows版本(64位还是32位)从Python的官方网站下载Python 3.5.2对应的64位安装程序或32位安装程序(网速慢的同学 ...

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

    1. 安装Redis版本:win-3.0.501https://github.com/MSOpenTech/redis/releases页面有,我下载的是zip版本的:Redis-x64-3.0.50 ...

  5. Windows上安装配置SSH教程(2)——在Windows XP和Windows 10上安装并配置OpenSSH for Windows

    知识点汇总:http://www.cnblogs.com/feipeng8848/p/8559803.html ------------------------ 安装方式有3种: (1)Windows ...

  6. Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的Hadoop2.2.0开发环境

    原文地址:http://www.linuxidc.com/Linux/2014-11/109200.htm 图文详解Windows 8.0上Eclipse 4.4.0 配置CentOS 6.5 上的H ...

  7. 在Windows上安装Elasticsearch 5.0

    在windows上安装Elasticsearch Elasticsearch可以使用.zip软件包安装在Windows上. elasticsearch-service.bat命令,它将设置Elasti ...

  8. [转]phoneGap3.0安装步骤(以windows下的android环境为例):

    phoneGap3.0安装步骤(以windows下的android环境为例): 环境: WIN系统,JDK,Android,Eclipse,Ant,Git,PhoneGap3.x (Cordova) ...

  9. 深入体验bash on windows,在windows上搭建原生的linux开发环境,酷!

    今年微软Build 2016大会最让开发人员兴奋的消息之一,就是在Windows上可以原生运行Linux bash,对开发人员来说,这是一个喜闻乐见的消息. 1 安装 你必须安装开发者预览版本,才能使 ...

随机推荐

  1. day08(异常处理,创建异常,finally,throws和throw的区别)

    异常处理, 异常的产生  运行时异常:程序运行中产生的异常:RuntimeException类.   编译时异常:程序在编译时产生的异常:除了RuntimeException类  其他都是编译时产生的 ...

  2. 20155302 2016-2017-2 《Java程序设计》第六周学习总结

    20155302 2016-2017-2 <Java程序设计>第6周学习总结 教材学习内容总结 Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入 ...

  3. java梳理-序列化与反序列化

    一背景: 之前笔记关于rpc框架介绍中,提到为了调用远程服务,需要再确定消息结构后考虑序列化与反序列化,序列化主要是把对象转换成二进制码便于网络传输,反序列化就是相反的,主要目的是生成对象便于后续处理 ...

  4. Codeforces758B Blown Garland 2017-01-20 10:19 87人阅读 评论(0) 收藏

    B. Blown Garland time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  5. 图片转化为pdf(转)

    方法1: 利用Adobe公司的Adobe Acrobat Professional进行转化.注意,一定是Professional版本的,Reader版本没有这个功能.  首先安装Adobe Acrob ...

  6. JavaLogin小框架制作【精品博客】

    做一个小登录接口方法,让用户传入用户名,密码,就可以知道登录的结果信息,并以接口监听的方式控制. 先看客户端执行效果: 输入正确: 输入错误: 模拟客户端使用登录小框架: package com.de ...

  7. kylin的clube合并后清理hbase中产生的相关历史表

    kylin的clube合并后清理hbase中产生的相关历史表 kylin 的clube 历史的每次构建,都会产生一个hbase的表:虽然可以设置按照一定策略合并,但是合并后hbase 历史表不会被自动 ...

  8. Asp.net WebForm 中无法引用App_Code文件夹下的类

    在VS2013中新建asp.net webform应用程序,手动添加"APP_Code"文件夹并新建类文件,发现这些类无法在APP_Code文件夹以外被引用. 解决办法: 选中类文 ...

  9. NLayerAppV3-Distributed Service Layer(分布式服务层)

    回顾:NLayerAppV3是一个使用.net 2.1实现的经典DDD的分层架构的项目. NLayerAppV3是在NLayerAppV2的基础上,使用.net core2.1进行重新构建的:它包含了 ...

  10. 微信小程序支付C#后端源码

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.W ...