如何阅读特定于窗口的扩展
How to read windows specific extensions
在OpenGL超级圣经中,示例说我可以通过以下方式读取Windows特定的扩展:
//Type defined in the book as char, but that is not what glGetString returns...
const GLubyte *extensions = glGetString(GL_EXTENSIONS);
if(strstr(extensions, "WGL_EXT_swap_control") != NULL)
{
wglSwapIntervalEXT = (PFNWGLSWAPINTERVALEXTPROC)wglGetProcAddress("wglSwapIntervalEXT");
if(wglSwapIntervalEXT != NULL)
wglSwapIntervalEXT(1);
}
strstr
不需要GLubyte
. 如何做到这一点?
您可以将 glGetString
的返回值强制转换为 const char 指针,并使用您喜欢的字符串处理函数。
但实际上,我建议使用库(例如 GLEW)来管理扩展。
glGetString(GL_EXTENSIONS)
将返回视频卡支持的大多数扩展名(用空格分隔)。但是 Windows 特定的WGL_扩展(对于 OpenGL 版本 3.0+)不包括在此调用中。您还需要调用 wglGetExtensionsString(HDC)
才能获取该卡支持的其余 WGL 扩展。
这是一个代码片段(您可以删除 ARB 后缀):
#include <windows.h>
#include <iostream>
#include <GL/gl.h>
// function ptr: WGL specific extensions for v3.0+
typedef const char* (WINAPI * PFNWGLGETEXTENSIONSSTRINGARBPROC)(HDC hdc);
PFNWGLGETEXTENSIONSSTRINGARBPROC pwglGetExtensionsStringARB = 0;
#define wglGetExtensionsStringARB pwglGetExtensionsStringARB
...
// get WGL specific extensions for v3.0+
wglGetExtensionsStringARB = (PFNWGLGETEXTENSIONSSTRINGARBPROC)wglGetProcAddress("wglGetExtensionsStringARB");
if(wglGetExtensionsStringARB)
{
const char* str = wglGetExtensionsStringARB(hdc);
if(str)
{
std::cout << str << std::endl;
}
}
请注意,wglGetExtensionsString()
需要当前窗口显示的 HDC(设备上下文句柄)作为参数。 您可以从窗口句柄 (HWND) 获取 HDC;
HDC hdc = ::GetDC(hwnd);
相关文章:
- 如何在Qt窗口小部件中使用QStringView(或QStringRef)
- 是否可以通过C++扩展强制多个python进程共享同一内存
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- 问:如何使用C++中的按钮从窗口打开窗口
- SDL 窗口不会弹出
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 如何将这个C++哈希表转换为动态扩展和收缩,而不是使用硬设置的最大值
- 扩展光电二极管探测器以支持多个传感器
- 如何在cpp文件之间切换窗口?在Qt中
- 如何从C++扩展的QQuickItem创建QQuickWindow作为子窗口?
- 为什么初始化 Wintab 扩展后没有收到WT_PACKETEXT窗口消息?
- Firefox 扩展中的无窗口嵌入式 exe
- 如何阅读特定于窗口的扩展
- 在C++中扩展 QML 应用程序窗口
- 拔下/切换扩展显示器时是否有消息发送到应用程序窗口
- visual studio中用于复杂表单的C++可扩展GUI窗口
- 如何将小部件"stick"到扩展窗口的底部?
- Shell扩展窗口:最好的通信之间的ContextMenu和IconOverlay
- 地址窗口扩展
- 窗口上的扩展文件属性(ntfs)