Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Looking for alternative to glTexSubImage2d with data offset support

I have a PBO which is updated each frame by CUDA. After it, I also want to update a texture using this PBO, which I do using glTexSubImage2d. I'm afraid updating the whole texture is expensive and would like to update only the viewable region of the texture while my PBO has the whole data on it.

The problem is that, although glTexSubImage2d accepts an offset, width and height as parameters, they're only used when painting to the texture, while I still need my buffer data to be linearly layed. I'm afraid preparing the buffer data myself might be too expensive (actually it would be extremely expensive, since my PBO resides in GPU memory.)

Is there any alternative to glTexSubImage2d which also takes parameters for the buffer offset or should I keep updating the whole texture at once?

like image 919
kaoD Avatar asked Feb 28 '12 14:02

kaoD


2 Answers

Please read up on the pixel store parameters, set with glPixelStore. The parameters GL_UNPACK_ROW_LENGTH, GL_UNPACK_SKIP_PIXELS and GL_UNPACK_SKIP_ROWS are of most interest for you:

Pixel Store Parameters

These values are provided as a convenience to the programmer; they provide no functionality that cannot be duplicated by incrementing the pointer passed to glDrawPixels, glTexImage1D, glTexImage2D, glTexSubImage1D, glTexSubImage2D, glBitmap, or glPolygonStipple. Setting GL_UNPACK_SKIP_PIXELS to i is equivalent to incrementing the pointer by i ⁢ n components or indices, where n is the number of components or indices in each pixel. Setting GL_UNPACK_SKIP_ROWS to j is equivalent to incrementing the pointer by j ⁢ k components or indices, where k is the number of components or indices per row, as just computed in the GL_UNPACK_ROW_LENGTH section.

You're still going to use glTexImage and/or glTexSubImage for data transfer.

like image 159
datenwolf Avatar answered Nov 15 '22 07:11

datenwolf


glTexSubimage2D has errors on getting data from the PBO if the selected ROI in the texture is not equal to the whole texture size. That is a known issue which may not be fixed (e.g. opengl forum thread).

like image 25
broumbroum Avatar answered Nov 15 '22 09:11

broumbroum