SDL2和glfw库windows下创建到界面窗口中的简单方法
来源:互联网 发布:云数据存储 编辑:程序博客网 时间:2024/05/18 01:38
SDL2和glfw都是跨平台的库,都能很好的初始化OpenGL环境,但我们在windows下面应用的时候,经常要在windows界面编程中使用OpenGL,但这两个库创建的window都是独立的。SDL2虽然有SDL_CreateWindowFrom()这个函数,但发现至少v2.0.5版本仍然是不好用的。创建的窗口虽然可以嵌在界面中,但无法通过SDL_GL_CreateContext()创建OpenGL环境。
网上查了一天的资料,有介绍如何修改源代码的,操作很复杂。最简单的方法,就是通过wglGetCurrentDC()这个函数得到当前SDL2或者glfw创建的OpenGL环境DC,再通过WindowFromDC()这个API得到窗口的句柄。有了句柄,你就可以随意操作了。
glfwWindow* window;//没有边框和标题栏glfwWindowHint(GLFW_DECORATED, GL_FALSE);//创建窗口window = glfwCreateWindow(500, 500, "OpenGL", 0, 0);//显示窗口glfwShowWindow(window);//创建OpenGL环境glfwMakeContextCurrent(window);//必须在SDL2或者glfw创建OpenGL环境之后使用,不然wglGetCurrentDC()的操作是无效的。#ifdef _WIN32//获得glfw创建的窗口句柄HWND hWnd = WindowFromDC(wglGetCurrentDC());//设置到自己的窗口中,至此操作完成,可以看到效果了::SetParent(hWnd, hParentWindow);#endif
如果要修改源代码的话,网上有介绍修改窗口创建函数的,这个比较复杂,而且版本更新后修改太麻烦。SDL2有SDL_GetWindowWMInfo()这个函数,可以通过曲线救国得到窗口句柄,glfw就麻烦点。
修改"glfw/src/window.c",添加代码如下:
GLFWAPI void* glfwGetWindowHandle(GLFWwindow* handle){#ifdef _GLFW_WIN32_GLFWwindow* window = (_GLFWwindow*) handle;return window->win32.handle;#elsereturn null;#endif}在你的程序里面加个定义:
GLFWAPI void* glfwGetWindowHandle(GLFWwindow* handle);
就可以使用这个函数得到glfwWindow的真实句柄了。
0 0
- SDL2和glfw库windows下创建到界面窗口中的简单方法
- Opengl备忘--创建一个简单GLFW窗口
- windows,glut,glfw窗口设计
- SDL2.0窗口创建历程
- OpenGL 使用GLFW创建全屏窗口
- Windows简单窗口的创建
- Windows下用C++关闭某个窗口的简单方法
- Windows下创建OpenGL窗口
- windows下窗口的创建
- 使用GLFW与GLAD创建窗口并画出三角形
- Windows下配置SDL2.0开发环境
- Duilib 界面库的窗口类型和实现方法
- 在sdk下创建windows窗口
- MFC下创建一个简单的窗口
- GLFW库
- Windows下创建线程的方法_beginThread和CreateThread区别
- c++下创建无界面窗口并获取句柄
- win7下创建和删除服务的简单实用方法
- [南阳OJ-No.13]Fibonacci数|无穷数列1,1,2,3,5,8,13,21,34,55...称为Fibonacci数列,它可以递归地定义为 F(n)=1 ...........(n=1或
- 学习笔记:js里调用函数时,函数名带括号与不带括号的区别
- LazyMan
- java中的Date类和Calendar类
- HTML5学习笔记16-SVG
- SDL2和glfw库windows下创建到界面窗口中的简单方法
- Java的StringBuffer类
- Android DataBinding库(MVVM设计模式)
- 贪吃蛇 C/C++代码
- 412. Fizz Buzz
- JavaScript内置对象--Date类型详解
- android 去掉标题栏、无标题栏
- 九度OJ-1183-守形数
- 正则表达式详细笔记,Java