gpt4 book ai didi

ios - glReadPixels直接贴图

转载 作者:行者123 更新时间:2023-12-01 17:55:41 25 4
gpt4 key购买 nike

  • 我渲染场景(到默认的renderbuffer)
  • 我想从该场景中抓取一个矩形并从中创建一个纹理
  • 我想这样做,而不会把glReadPixels()降级到CPU,然后将数据上传回GPU上
  • 使用OpenGL ES 2.0有可能吗?
  • P.S. -我想使用屏幕的POT区域,而不是一些奇怪的形状

  • 我已经正常工作的GPU-> CPU-> GPU实施的伪代码:
    // Render stuff here

    byte *magData = glReadPixels();

    // Bind the already-generated texture object
    BindTexture(GL_TEXTURE0, GL_TEXTURE_2D, alias);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, MAGWIDTH, MAGHEIGHT, 0, GL_RGB, GL_UNSIGNED_BYTE, magData);

    最佳答案

    您可以使用glCopyTexImage2D从后台缓冲区进行复制:

    glBindTexture(GL_TEXTURE_2D, textureID);
    glCopyTexImage2D(GL_TEXTURE_2D, level, internalFormat, x, y, width, height, border);

    OpenGL ES 2.0总是从后缓冲区(或单缓冲区配置的前缓冲区)进行复制。使用OpenGL ES 3.0,您可以使用以下命令指定副本的来源:
    glReadBuffer(GL_BACK);

    根据ClayMontgomery的回答( glCopyTexImage2D较慢)-您可能会发现使用大小正确且格式正确的 glCopyTexSubImage2D更快,因为它会写入预先分配的纹理,而不是每次都分配一个新的缓冲区。如果仍然太慢,则应尝试按照他的建议进行操作,然后渲染到帧缓冲区(尽管您还需要使用帧缓冲区的纹理在屏幕上绘制四边形,以获得相同的结果)。

    关于ios - glReadPixels直接贴图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18199275/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com