【问题标题】:Do i need to recreate a texture when using opengl/CUDA interoperability?使用 opengl/CUDA 互操作性时是否需要重新创建纹理?
【发布时间】:2011-10-13 04:25:00
【问题描述】:

我想使用 CUDA 来操作我在 opengl 中使用的纹理。知道我需要为此使用 PBO,我想知道是否每次像这样对 PBO 进行更改时都必须重新创建纹理:

// Select the appropriate buffer
glBindBuffer( GL_PIXEL_UNPACK_BUFFER, bufferID);
// Select the appropriate texture
glBindTexture( GL_TEXTURE_2D, textureID);
// Make a texture from the buffer
glTexSubImage2D( GL_TEXTURE_2D, 0, 0, 0, Width, Height,GL_BGRA, GL_UNSIGNED_BYTE, NULL);

glTexSubImage2D 等是否从 PBO 复制数据?

【问题讨论】:

    标签: opengl cuda textures pbo


    【解决方案1】:

    所有pixel transfer operations 都使用缓冲区对象。由于glTexSubImage2D发起了一个像素传输操作,所以可以和buffer对象一起使用。


    用于像素传输的缓冲区对象和纹理之间没有长期联系。缓冲区对象的使用很像用于glTexSubImage2D 调用的客户端内存指针。它可以在 OpenGL 格式化并将其拉入纹理时存储数据。完成后,您可以随心所欲地使用它。

    唯一的区别是,因为 OpenGL 管理缓冲区对象,所以从缓冲区上传可以是异步的。好吧,你就可以玩游戏,比如通过 GPU 操作(无论是来自 OpenGL、OpenCL 还是 CUDA)填充缓冲区对象。

    【讨论】:

    • 我知道我可以使用它,但我想知道他的缓冲区实际上是如何用于创建纹理的,纹理是使用缓冲区来存储其数据还是复制数据?跨度>
    猜你喜欢
    • 2013-10-15
    • 2011-12-03
    • 2016-08-18
    • 2020-12-22
    • 2013-04-04
    • 2011-09-22
    • 2012-11-22
    • 1970-01-01
    • 2015-08-03
    相关资源
    最近更新 更多