问题标签 [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.
winapi - 如何正确设置 OpenGL 场景以可视化单个对象
我需要为我的网格工具包编写一个简单的可视化工具。我正在使用的对象始终位于 [-1,1]^3 框(包括)内,因此我需要确保该对象对用户完全可见。我还希望有可能围绕对象旋转相机,就像用户在对象周围“飞行”一样。
这就是我这样做的方式:
在初始设置期间调用 Reshape 函数,并且在每次调整可视化控件的大小后,在每次重绘时调用 PolarView 函数,其中某些角度和距离大于 3 的平方根(真的很重要吗?)。该代码适用于立方体或球体等凸面对象,但圆环对象存在一些问题(有些面是通过其他人看到的),所以我相信这是关于深度测试的东西。我的设置有什么问题?截图:
我在互联网上进行了一些搜索,发现如果我的近平面和远平面参数有问题,就会出现这样的问题。在我的情况下,这些的正确值是什么?我的绘图过程如下:
我的像素格式描述符:
我找到了一些解决此问题的方法:
- 为我的近平面和远平面交换值
- 设置
glDepthFunc
为GL_GREATER
和glClearDepth
确定0
,如果有偶数个错误,我的代码将正常工作。但是第一个错误在哪里?
opengl - WGL:没有双缓冲+多采样=失败?
wglChoosePixelFormatARB()
我通常使用这些参数(以及其他参数)创建像素格式:
即双缓冲和x4 多重采样。这工作得很好。
但是当我尝试打开双缓冲时:
调用wglChoosePixelFormatARB()
失败(或者说它没有创建任何东西)
当我有效地关闭多重采样时:
我又正常工作了。
是否有一些固有的东西阻止非双缓冲像素格式与多重采样一起使用?
我关闭双缓冲的原因是为了实现不受限制的帧速率。通过双重缓冲,我得到的帧速率最高仅为 60 FPS(这款笔记本电脑 LCD 工作频率为 60Hz)。但是关闭双缓冲后,我可以达到 1500 FPS。有没有办法通过双缓冲来实现这一点?
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,所以我可能在这方面犯了错误。
非常感谢您的时间;对此,我真的非常感激!
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 的像素格式是否必须与窗口/位图匹配?尺寸呢?
谢谢,
亚历克斯
c++ - 最小的无窗口 OpenGL 上下文初始化
如何用最少的代码初始化无窗口的 OpenGL 上下文?
我在这里读过,您可以使用wglCreateContextAttribsARB
它来创建无窗口上下文,但是它没有解释如何?
opengl - 在 WGL 中打印非英语语言
我想在使用 WGL 时以英语以外的语言(例如俄语和德语)打印单词。
我使用http://nehe.gamedev.net/tutorial/bitmap_fonts/17002/中描述的相同技术来打印英文,但是在使用俄语时,相同的技术没有用,它根本不打印俄语字母,只有数字。
有没有可能的解决方案?
解决了
通过改变解决
至
windows - 用 MinGW 寻找 WGL
我已经用 C 语言编写了一个足够的小程序来创建一个窗口。但是,我在向其中添加 OpenGL 渲染上下文和各种函数时遇到了麻烦。
GetDC、ChoosePixelFormat、SetPixelFormat——据我所知,所有 wgl 函数。我认为这些可能是 Visual C++ 特有的,但情况似乎并非如此——除非它们被彻底改变为仅限 C++;与 MinGW 相比,错误的数量是惊人的。
我在哪里可以找到 WGL?如何将其添加到 MinGW?
(稍微相关的源代码可以在这里找到:http: //pastebin.com/eMWLqL6h)
windows - wglCreateContextAttribsARB 崩溃
在我的应用程序中,当我第 128 次尝试创建 wglCreateContextAttribsARB 时,它崩溃了。总是第 128 次,我总是传递相同的参数,它总是返回 0x2095(ERROR_INVALID_VERSION_ARB)。我知道这是一个有效的版本,因为它在前 127 次有效。
此函数调用在此特定数字处失败是否有任何原因?
opengl - MinGW 中的 WGL 错误
我在 MinGW 中遇到 wgext.h 问题。Visual Studio 的版本不工作(编译器尖叫着缺少定义)。
所以我尝试使用 mesa-dev 并用 MinGW 编译它 - 我得到了错误
任何想法如何解决这个问题?
macos - 有没有办法确定 CGLFlushDrawable 对后台缓冲区做了什么?
根据 Apple 的文档,CGLFlushDrawable
或者它的 Cocoa 等价物flushBuffer
可能会以几种不同的方式表现。通常对于窗口应用程序,后台缓冲区的内容被复制到可见缓冲区,如下所述:
CGLFlushDrawable
将双缓冲上下文的后缓冲区复制到前缓冲区。
我假设绘图缓冲区的内容保持不变(请参阅问题 1。)。即使我错了,也可以通过将kCGLPFABackingStore
属性传递给CGLChoosePixelFormat
.
但进一步阅读显示,在某些情况下,缓冲区可能会被交换而不是执行复制:
如果后备存储属性设置为 false,则可以交换而不是复制缓冲区。在全屏模式下经常出现这种情况。
这也说明了
当全屏窗口上方没有内容时,Mac OS X 会自动尝试优化此上下文的性能。例如,当您的应用程序调用对象
flushBuffer
时NSOpenGLContext
,系统可能会交换缓冲区,而不是将后台缓冲区的内容复制到前台缓冲区。(...) 因为系统可能选择交换缓冲区而不是复制它们,所以您的应用程序必须在每次调用flushBuffer
.
这是我的问题:
- 如果复制了后台缓冲区,是否可以保证即使没有后台存储属性也可以保留其内容?
- 如果缓冲区被交换,后缓冲区是否获得前缓冲区的内容,或者它是否未定义所以它也可以得到随机的东西?
- 系统可能会选择交换缓冲区,但有什么方法可以确定它是否 确实选择了这样做?
- 在任何这些情况下,有没有办法确定缓冲区是否被保留、与前缓冲区交换或被搞砸了?
此外,任何关于它是如何在 WGL、GLX 或 EGL 中制作的信息都将不胜感激。我特别需要问题 4 的答案。