kao*_*aoD 4 opengl interop cuda
我正在创建一个这样的OpenGL纹理:
glGenTextures( 1, &boardTex );
glBindTexture( GL_TEXTURE_2D, boardTex );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST );
glTexImage2D( GL_TEXTURE_2D, 0, GL_RGBA32F, width, height, 0, GL_RGBA, GL_FLOAT, NULL);
Run Code Online (Sandbox Code Playgroud)
我得到了一个句柄,board所以我假设纹理已成功创建.我想与CUDA共享这个纹理,所以我注册并映射资源:
cudaGLSetGLDevice(0);
cudaGraphicsGLRegisterImage( &boardImage, boardTex, GL_TEXTURE_2D, cudaGraphicsMapFlagsNone );
cudaGraphicsMapResources( 1, &boardImage, 0 );
Run Code Online (Sandbox Code Playgroud)
然后我尝试获取映射指针,如下所示:
float4* mappedPointer;
size_t mappedSize;
cudaGraphicsResourceGetMappedPointer( (void**)&mappedPointer, &mappedSize, boardImage );
Run Code Online (Sandbox Code Playgroud)
不幸的是,此调用返回错误并拒绝工作.为了以防万一,我确保纹理没有绑定在OpenGL上下文中.还是行不通.cudaGetErrorString产生"未知错误",所以我很困惑.我很欣赏任何想法.
好的,我自己发现了这个:
cudaGraphicsSubResourceGetMappedArray (&array, resource, 0, 0);返回一个cudaArray工作.我还没有考虑如何cudaArray工作(我可能最终使用PBO),但至少它没有崩溃.
编辑:
从CUDA参考指南条目cudaGraphicsResourceGetMappedPointer():
如果资源不是缓冲区,则无法通过指针访问它,并返回cudaErrorUnknown.
从CUDA参考指南条目cudaGraphicsSubResourceGetMappedArray():
如果资源不是纹理,则无法通过数组访问它,并返回cudaErrorUnknown.
换句话说,对映射的缓冲区对象使用GetMappedPointer.将GetMappedArray用于映射的纹理对象.
| 归档时间: |
|
| 查看次数: |
1755 次 |
| 最近记录: |