我正在编写一个 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 的像素格式是否必须与窗口/位图匹配?尺寸呢?
谢谢,
亚历克斯