再不解决就要被炒鱿鱼:3.3.1 GLES3Texture getPixelBytes 获取到的结果是花屏

其他升级问题,部分已解决。希望对需要的同学有帮助

我们基于 3.0.0 实现了 GLES3Texture.getPixelBytes 功能,一切正常。但升级到 3.3.1 版本后,同样的代码发现获取到的图片不符合预期

实际效果如下

预期效果如下
captureFile_2_1

代码实现

unsigned char* GLES3Texture::getPixelBytes() {
    const GLuint texture = _gpuTexture->glTexture;
    const uint width = _gpuTexture->width;
    const uint height = _gpuTexture->height;

    // convert texture to pixel array
    GLuint fbo;
    glGenFramebuffers(1, &fbo);
    glBindFramebuffer(GL_FRAMEBUFFER, fbo);
    glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
    const uint size = width * height * 4;
    auto* pixels = new GLubyte[size];
    glReadPixels(0, 0, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixels);
    glBindFramebuffer(GL_FRAMEBUFFER, 0);
    glDeleteFramebuffers(1, &fbo);

    return pixels;
}

以上是需要使用模型截屏的功能,目前官方不支持。上述是我们定制的功能,麻烦官方同学一起帮看下 @panda

更新

安卓端获取到的 RT 信息

1赞

倾向于认为上面这段代码应该没有问题,可能是传入的 texture 指针不符合预期

引擎源码中发现这么一段,可能和这里的 FIXME 有关系吗? @panda

比如,实际获取到的 texture 和相机捕获到的 render texture 不一致呢?

帮你顶 你天天顶吧 免费的东西就是这样

1赞

已解决。安卓端,我关闭了多线程渲染,跟官方了解到,最近有新增这项优化,我们临时先保证功能正常

论时刻更新简历的重要性。。。