【问题标题】:The Internal format of OpenGL CUDA interopOpenGL CUDA 互操作的内部格式
【发布时间】:2016-01-25 06:09:21
【问题描述】:

我使用 CUDA 表面参考来编写和读取 OpenGL 3D 纹理跟随这篇文章Write to 3D OpenGL textures in CUDA ...

有一个问题让我很困惑。 比如这个函数

glTexImage3D(GL_TEXTURE_3D, 0, GL_INTENSITY, volDim_.x, volDim_.y
        , volDim_.z, 0, GL_LUMINANCE, getVolumeTypeGL(vol), vol->getData());

第三个参数是内部格式。

在 CUDA 内核中,我需要写入或读取纹理,如下面的代码,

ElementType v;
surf3Dread(&v,surfaceRef,x*sizeof(ElementType),y,z);
surf3Dwrite(&v,surfaceRef,x*sizeof(ElementType),y,z);

我不知道如何将内部格式与 ElementType 匹配。 示例

glTexImage3D(GL_TEXTURE_3D, 0, GL_INTENSITY, volDim_.x, volDim_.y
    , volDim_.z, 0, GL_LUMINANCE, GL_UNSIGNED_BYTE, vol->getData());

在主机内存中,卷数据类型的类型是无符号字符。 我应该选择哪种 ElementType?

uchar4 or uchar ,or float

我的一些代码可以在这里找到My GitHub

更新:

我已经解决了这个问题。

GL_RGBA32F ---- float4

GL_RGBA ---- uchar4

GL_INTENSITY -- uchar

【问题讨论】:

  • 请将您的解决方案添加为问题的答案,而不是编辑。回答您自己的问题是完全可以的,并且您最终也将能够接受答案。这就是在Stack Overflow 上将问题标记为已解决的方式,而不是通过编辑问题标题。请不要那样做。谢谢
  • @talonmies 谢谢,我很快就会这样做!
  • 感谢您发布答案

标签: opengl cuda


【解决方案1】:

如果glTeximage3D的内部格式为GL_INTENSITY,则surf3Dreadsurf3Dwrite的元素类型为无符号字符。 GL_RGBA32F 匹配 float4GL_RGBA 匹配 uchar4

【讨论】:

    猜你喜欢
    • 2011-09-22
    • 2011-12-03
    • 2013-04-30
    • 2013-10-15
    • 2013-04-04
    • 2011-07-23
    • 2014-05-11
    • 2015-08-03
    相关资源
    最近更新 更多