我有一个PBO,由CUDA每帧更新。在它之后,我还想使用这个PBO更新纹理,我使用glTexSubImage2d
。我担心更新整个纹理是昂贵的,并且只想更新纹理的可视区域,而我的PBO上有整个数据。
问题在于,虽然glTexSubImage2d
接受偏移量,宽度和高度作为参数,但它们仅在绘制到纹理时使用,而我仍然需要线性铺设我的缓冲区数据。我担心自己准备缓冲区数据可能太贵了(实际上它会非常昂贵,因为我的PBO驻留在GPU内存中。)
是否有glTexSubImage2d
的替代方法,它也接受缓冲区偏移量的参数,或者我是否应该一次更新整个纹理?
答案 0 :(得分:7)
请阅读使用glPixelStore设置的像素商店参数。参数GL_UNPACK_ROW_LENGTH
,GL_UNPACK_SKIP_PIXELS
和GL_UNPACK_SKIP_ROWS
对您最感兴趣:
这些值是为了方便程序员而提供的;它们不提供无法通过递增传递给glDrawPixels,glTexImage1D,glTexImage2D,glTexSubImage1D,glTexSubImage2D,glBitmap或glPolygonStipple的指针来复制的功能。将GL_UNPACK_SKIP_PIXELS设置为i等效于将指针递增i n个分量或索引,其中n是每个像素中的分量或索引的数量。将GL_UNPACK_SKIP_ROWS设置为j等效于将指针递增j k个分量或索引,其中k是每行的分量或索引数,如GL_UNPACK_ROW_LENGTH部分中计算的那样。
你仍然会使用glTexImage和/或glTexSubImage进行数据传输。
答案 1 :(得分:1)