我有一个PBO,由CUDA每帧更新.在它之后,我还想使用这个PBO更新纹理,我使用它glTexSubImage2d
.我担心更新整个纹理是昂贵的,并且只想更新纹理的可视区域,而我的PBO上有整个数据.
问题是,尽管glTexSubImage2d
接受偏移量,宽度和高度作为参数,但它们仅在绘制到纹理时使用,而我仍然需要线性铺设我的缓冲区数据.我担心自己准备缓冲区数据可能太贵了(实际上它会非常昂贵,因为我的PBO驻留在GPU内存中.)
有没有替代方法glTexSubImage2d
也需要缓冲区偏移量的参数,还是应该一次更新整个纹理?
请阅读像素存储参数,使用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进行数据传输.