原生截图问题

版本是2.4.13
按照官方的原生截图示例 example-projects/assets/cases/07_capture_texture at v2.4.3 · cocos/example-projects android上的截图是黑色的图片…

提示
glTexParameteri(0x0DE1, 0x2801, glFilter(_minFilter, mipFilter)); GL error 0x501: GL_INVALID_VALUE:setTexInfo
大佬们来看下

@dumganhar

完蛋哟 使用示例打包2.4.13的apk 还是黑色的~~~~

我是2.4.11这么写的,可以实现这个功能

不需要保存,就直接渲染截取的这张图 就是黑的

那就不知道了,你等引擎回复你把。
不可以用引擎摄像机截图吗?

我在检查检查

还是报 (282): glTexParameteri(0x0DE1, 0x2801, glFilter(_minFilter, mipFilter)); GL error 0x501: GL_INVALID_VALUE:setTexInfo 这个错误

AI回答的

这个错误 GL_INVALID_VALUE 说明在设置纹理参数时,传递了无效的值。你的错误出现在 glTexParameteri 调用中,具体的错误是与过滤模式( _minFilter , mipFilter )相关。

glTexParameteri 用来设置纹理的参数,而 0x2801 对应的是 GL_TEXTURE_MIN_FILTER ,而 glFilter(_minFilter, mipFilter) 可能返回了一个无效的值,导致了 GL_INVALID_VALUE 错误。

解决步骤:

  1. 检查 glFilter(_minFilter, mipFilter) 返回值: 确保 glFilter 返回的是有效的纹理过滤模式。常见的有效值包括:
  • GL_NEAREST
  • GL_LINEAR
  • GL_NEAREST_MIPMAP_NEAREST
  • GL_LINEAR_MIPMAP_NEAREST
  • GL_NEAREST_MIPMAP_LINEAR
  • GL_LINEAR_MIPMAP_LINEAR
  1. 检查 _minFiltermipFilter 的值: 确保这两个变量是合法的,并且能够组合成一个有效的过滤模式。
  2. 调试输出: 使用 glGetError() 检查是否有其他 OpenGL 错误,并在设置纹理参数之前检查这些值是否有效。
  3. 改用预定义的常量: 如果 glFilter 是你自己写的函数,尝试直接传递 OpenGL 预定义的常量,例如:

cpp

复制编辑

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

确保你使用的是正确的目标纹理类型(比如 GL_TEXTURE_2D )以及正确的过滤方式。如果问题依然存在,提供更多上下文代码或详细信息,方便进一步分析。

我也用AI看过,现在想到另外种方式 ,先去试试

好了 小改了下 不能使用readPixels这种方法

let texture = new cc.RenderTexture()
.....
const spriteFrame = new cc.SpriteFrame(texture)
直接使用spriteFrame来渲染就不得黑了