【问题标题】:glReadPixels vs. glGetTexImageglReadPixels 与 glGetTexImage
【发布时间】:2016-07-02 08:36:49
【问题描述】:

我需要从大纹理 (2048x2048) 中提取一个小矩形 (200x200),并将 RGBA 像素放入内存中。似乎有两种方法可以做到这一点:

a) 使用 glGetTexImage 并传入接收整个纹理的缓冲区,并从中读取适当的像素

b) 创建一个帧缓冲区,使用纹理仅将需要的部分绘制到其中,然后提取使用 glReadPixels 生成的像素。

我猜 b) 更快,但我是相对新手,我想知道我是否朝着正确的方向前进。 a) 更容易编码,所以我想知道可能的速度影响是否可以忽略不计。

史蒂夫

【问题讨论】:

    标签: opengl


    【解决方案1】:

    鉴于图像数据在纹理中,有几种可能的解决方案。从最想要到最不想要的顺序:

    只有在非常旧的 OpenGL 实现下工作时才需要将纹理渲染到带有三角形的帧缓冲区。

    【讨论】:

    • 哎呀,a)我的意思是 glGetTexImage 不是 glTexImage2d。
    • 好的,我编写了解决方案 b),它快了 50 倍(100 微秒与 5 毫秒相比。)事后看来是 20/20。
    • @stevenkucera:我已更新我的答案以匹配您更正的问题。
    • 好吧,我试过 glGetTextureSubImage 并且记录下来只需要大约 25 微秒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-02
    • 2016-12-10
    相关资源
    最近更新 更多