问题标签 [wgl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
2611 浏览

winapi - 如何正确设置 OpenGL 场景以可视化单个对象

我需要为我的网格工具包编写一个简单的可视化工具。我正在使用的对象始终位于 [-1,1]^3 框(包括)内,因此我需要确保该对象对用户完全可见。我还希望有可能围绕对象旋转相机,就像用户在对象周围“飞行”一样。

这就是我这样做的方式:

在初始设置期间调用 Reshape 函数,并且在每次调整可视化控件的大小后,在每次重绘时调用 PolarView 函数,其中某些角度和距离大于 3 的平方根(真的很重要吗?)。该代码适用于立方体或球体等凸面对象,但圆环对象存在一些问题(有些面是通过其他人看到的),所以我相信这是关于深度测试的东西。我的设置有什么问题?截图: 我在互联网上进行了一些搜索,发现如果我的近平面和远平面参数有问题,就会出现这样的问题。在我的情况下,这些的正确值是什么?我的绘图过程如下:
坏环面
坏环面填充

我的像素格式描述符:


我找到了一些解决此问题的方法:

  • 为我的近平面和远平面交换值
  • 设置glDepthFuncGL_GREATERglClearDepth确定0
    ,如果有偶数个错误,我的代码将正常工作。但是第一个错误在哪里?
0 投票
1 回答
1935 浏览

opengl - WGL:没有双缓冲+多采样=失败?

wglChoosePixelFormatARB()我通常使用这些参数(以及其他参数)创建像素格式:

即双缓冲和x4 多重采样。这工作得很好。
但是当我尝试打开双缓冲时:

调用wglChoosePixelFormatARB()失败(或者说它没有创建任何东西)
当我有效地关闭多重采样时:

我又正常工作了。

是否有一些固有的东西阻止非双缓冲像素格式与多重采样一起使用?

我关闭双缓冲的原因是为了实现不受限制的帧速率。通过双重缓冲,我得到的帧速率最高仅为 60 FPS(这款笔记本电脑 LCD 工作频率为 60Hz)。但是关闭双缓冲后,我可以达到 1500 FPS。有没有办法通过双缓冲来实现这一点?

0 投票
1 回答
1172 浏览

c++ - 更改 GLUT 调用以使用 MFC/C++

我有一个使用 GLUT 进行 OpenGL 渲染的程序。现在我需要将它放在 MFC 项目中,以便它可以与另一个程序组件一起使用。

我遵循了本教程: http: //www.codeguru.com/cpp/gm/opengl/openfaq/article.php/c10975__1/Setting-Up-OpenGL-in-an-MFC-Control.htm

当计时器触发时,我正在调用作为 GLUT 显示回调的函数,但这不起作用,因为渲染取决于 GLUT 空闲回调中发生的事情。我不明白在我的 MFC 程序中应该在哪里调用 GLUT 空闲回调。我应该为它制作一个单独的事件处理程序,如果有,是哪个事件?还是我在做其他完全错误的事情?我对 OpenGL 相当熟悉,但这是我第一次使用 MFC,所以我可能在这方面犯了错误。

非常感谢您的时间;对此,我真的非常感激!

0 投票
2 回答
1089 浏览

winapi - 在 Windows 中设置 OpenGL/Cuda 互操作

我正在编写一个 DLL,它需要在 Cuda 3.2 中做一些工作,在 OpenGL 中做一些工作。OpenGL 将渲染一些我的 Cuda 代码需要读取和修改的灰度图像,然后将其作为纹理返回给 OpenGL。我相信我需要创建公益组织来做到这一点。我以前做过一些基本的 OpenGL 的东西,但从未使用过扩展,这就是我的问题所在 - 我已经搜索了 2 天,但到目前为止还没有找到一个工作示例,尽管涉水的页面和页面代码。我尝试过的样本都没有工作(我确信我的显卡会支持它,作为 GTX470)

一些具体问题:
1.我安装了nvidia opengl sdk。我应该使用 glew.h 和 wglew.h 来访问扩展吗?
2. 我的 DLL 没有任何 UI - 我需要创建隐藏窗口还是有更简单的方法来创建屏幕外渲染上下文?
3. 可以用GL_RED_8UI格式制作灰度PBO吗?cuda 和 gl 都会对此感到满意吗?我阅读了 cuda 编程手册中的 opengl interop 部分,它说 GL_RGBA_8UI 只能由像素着色器使用,因为它是 OpenGL 3.0 功能,但我不知道这是否适用于 1 通道格式。1 个通道浮动也适用于我的目的。
4. 我认为这很容易做到——它真的需要数百行代码吗?

编辑:
我有创建附加到 HBITMAP 的 OpenGL 上下文的代码。我应该创建一个位图渲染上下文,然后尝试将 PBO 附加到该上下文吗?或者这会通过渲染到 CPU 内存来减慢我的速度吗?创建一个不可见的窗口并将 PBO 附加到它上面会更好吗?另外,我的 PBO 的像素格式是否必须与窗口/位图匹配?尺寸呢?

谢谢,
亚历克斯

0 投票
3 回答
3950 浏览

c++ - 最小的无窗口 OpenGL 上下文初始化

如何用最少的代码初始化无窗口的 OpenGL 上下文?

我在这里读过,您可以使用wglCreateContextAttribsARB它来创建无窗口上下文,但是它没有解释如何?

0 投票
1 回答
141 浏览

opengl - 在 WGL 中打印非英语语言

我想在使用 WGL 时以英语以外的语言(例如俄语和德语)打印单词。

我使用http://nehe.gamedev.net/tutorial/bitmap_fonts/17002/中描述的相同技术来打印英文,但是在使用俄语时,相同的技术没有用,它根本不打印俄语字母,只有数字。

有没有可能的解决方案?

解决了

通过改变解决

0 投票
1 回答
578 浏览

windows - 用 MinGW 寻找 WGL

我已经用 C 语言编写了一个足够的小程序来创建一个窗口。但是,我在向其中添加 OpenGL 渲染上下文和各种函数时遇到了麻烦。

GetDC、ChoosePixelFormat、SetPixelFormat——据我所知,所有 wgl 函数。我认为这些可能是 Visual C++ 特有的,但情况似乎并非如此——除非它们被彻底改变为仅限 C++;与 MinGW 相比,错误的数量是惊人的。

我在哪里可以找到 WGL?如何将其添加到 MinGW?

(稍微相关的源代码可以在这里找到:http: //pastebin.com/eMWLqL6h

0 投票
1 回答
539 浏览

windows - wglCreateContextAttribsARB 崩溃

在我的应用程序中,当我第 128 次尝试创建 wglCreateContextAttribsARB 时,它崩溃了。总是第 128 次,我总是传递相同的参数,它总是返回 0x2095(ERROR_INVALID_VERSION_ARB)。我知道这是一个有效的版本,因为它在前 127 次有效。

此函数调用在此特定数字处失败是否有任何原因?

0 投票
1 回答
243 浏览

opengl - MinGW 中的 WGL 错误

我在 MinGW 中遇到 wgext.h 问题。Visual Studio 的版本不工作(编译器尖叫着缺少定义)。

所以我尝试使用 mesa-dev 并用 MinGW 编译它 - 我得到了错误

任何想法如何解决这个问题?

0 投票
1 回答
1059 浏览

macos - 有没有办法确定 CGLFlushDrawable 对后台缓冲区做了什么?

根据 Apple 的文档,CGLFlushDrawable或者它的 Cocoa 等价物flushBuffer可能会以几种不同的方式表现。通常对于窗口应用程序,后台缓冲区的内容被复制到可见缓冲区,如下所述

CGLFlushDrawable

将双缓冲上下文的后缓冲区复制到前缓冲区。

我假设绘图缓冲区的内容保持不变(请参阅问题 1。)。即使我错了,也可以通过将kCGLPFABackingStore属性传递给CGLChoosePixelFormat.

但进一步阅读显示,在某些情况下,缓冲区可能会被交换而不是执行复制:

如果后备存储属性设置为 false,则可以交换而不是复制缓冲区。在全屏模式下经常出现这种情况。

也说明了

当全屏窗口上方没有内容时,Mac OS X 会自动尝试优化此上下文的性能。例如,当您的应用程序调用对象flushBufferNSOpenGLContext,系统可能会交换缓冲区,而不是将后台缓冲区的内容复制到前台缓冲区。(...) 因为系统可能选择交换缓冲区而不是复制它们,所以您的应用程序必须在每次调用flushBuffer.

这是我的问题:

  1. 如果复制了后台缓冲区,是否可以保证即使没有后台存储属性也可以保留其内容?
  2. 如果缓冲区被交换,后缓冲区是否获得前缓冲区的内容,或者它是否未定义所以它也可以得到随机的东西?
  3. 系统可能会选择交换缓冲区,但有什么方法可以确定它是否 确实选择了这样做?
  4. 在任何这些情况下,有没有办法确定缓冲区是否被保留、与前缓冲区交换或被搞砸了?

此外,任何关于它是如何在 WGL、GLX 或 EGL 中制作的信息都将不胜感激。我特别需要问题 4 的答案。