Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/160.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 了解纹理如何与CUDA配合使用_C++_Opengl_Cuda_Textures - Fatal编程技术网

C++ 了解纹理如何与CUDA配合使用

C++ 了解纹理如何与CUDA配合使用,c++,opengl,cuda,textures,C++,Opengl,Cuda,Textures,我对纹理如何与CUDA协同工作感到困惑 当我在“我的GTX 780上”进行设备查询时,我发现: Maximum Texture Dimension Size (x,y,z) 1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096) 现在,当我调查CUDA“粒子示例”时,我发现: checkCudaErrors(cudaBindTexture(0, oldPosTex, sortedPos, numParticles*sizeof(float4)

我对纹理如何与CUDA协同工作感到困惑

当我在“我的GTX 780上”进行设备查询时,我发现:

Maximum Texture Dimension Size (x,y,z)  1D=(65536), 2D=(65536, 65536), 3D=(4096, 4096, 4096)
现在,当我调查CUDA“粒子示例”时,我发现:

checkCudaErrors(cudaBindTexture(0, oldPosTex, sortedPos, numParticles*sizeof(float4)));
在我的例子中,numParticles将其提升到1024*1024*2(大约210万)

这与1D纹理有什么关系

同样在内核中,我发现“需要更多解释,因为这里的一切都是连接的”

现在我还需要知道的是,我可以在一个帧缓冲区绘图中使用这个“纹理”及其定义的大小numParticles*sizeof(float4),而不是在VBO中绘图

这与1D纹理的匹配程度如何

纹理硬件包括两个主要部分,纹理过滤硬件和纹理缓存。纹理过滤包括插值、通过标准化浮点坐标寻址和处理越界地址(钳位、换行、镜像和边界寻址模式)等功能。纹理缓存可以以最大化2D空间位置(从而提高缓存命中率)的方式存储数据。它还可以以常规平面阵列存储数据

最大纹理维度大小
指的是纹理过滤硬件中的限制,而不是纹理缓存硬件。因此,它指的是在使用
tex2D()
等函数时可能遇到的限制,而不是在使用
tex1Dfetch()等函数时可能遇到的限制
,它执行未过滤的纹理查找。因此,您给出的代码可能正在为
tex1Dfetch()
进行设置

需要更多的解释,因为这里的一切都是连接的

texture<float4, 1, cudaReadModeElementType> oldPosTex;
#define FETCH(t, i) tex1Dfetch(t##Tex, i)
这个问题太宽泛,可能是你的问题被否决的原因

现在我还需要知道的是,我可以在一个帧缓冲区绘图中使用这个“纹理”及其定义的大小numParticles*sizeof(float4),而不是在VBO中绘图


这不是CUDA的问题,因为CUDA不能画任何东西。您应该查看CUDA OpenGL互操作,看看您的问题是否得到了回答。如果不是,你应该创建一个新问题,并更清楚地描述你的问题。

解释为什么在问一个我不懂的简单问题时否决投票。非常感谢你澄清了一些事情:),担心这个限制“因为我只使用纹理来存储数据”,尽管我需要了解更多;使用“cudaBindTexture”时,这与Cudamaloc类似?那么它为纹理指定了一个已知的大小?
float4 pos = FETCH(oldPos, sortedIndex);