开发者

Read Framebuffer-texture like an 1D array

开发者 https://www.devze.com 2023-03-25 20:27 出处:网络
I am doing some gpgpu开发者_JAVA技巧 calculations with GL and want to read my results from the framebuffer.

I am doing some gpgpu开发者_JAVA技巧 calculations with GL and want to read my results from the framebuffer. My framebuffer-texture is logically an 1D array, but I made it 2D to have a bigger area. Now I want to read from any arbitrary pixel in the framebuffer-texture with any given length.

That means all calculations are already done on GPU side and I only need to pass certain data to the cpu that could be aligned over the border of the texture.

Is this possible? If yes is it slower/faster than glReadPixels on the whole image and then cutting out what I need?

EDIT Of course I know about OpenCL/CUDA but they are not desired because I want my program to run out of the box on (almost) any platform.

Also I know that glReadPixels is very slow and one reason might be that it offers some functionality that I do not need (Operating in 2D). Therefore I asked for a more basic function that might be faster.


Reading the whole framebuffer with glReadPixels just to discard it all except for a few pixels/lines would be grossly inefficient. But glReadPixels lets you specify a rect within the framebuffer, so why not just restrict it to fetching the few rows of interest ? So you maybe end up fetching some extra data at the start and end of the first and last lines fetched, but I suspect the overhead of that is minimal compared with making multiple calls.

Possibly writing your data to the framebuffer in tiles and/or using Morton order might help structure it so a tighter bounding box can be be found and the extra data retrieved minimised.


You can use a pixel buffer object (PBO) to transfer pixel data from the framebuffer to the PBO, then use glMapBufferARB to read the data directly:

http://www.songho.ca/opengl/gl_pbo.html

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号