我正在研究一些Android代码,用于在丢失和重新创建EGL上下文之间缓存和重绘帧缓冲区对象的颜色缓冲区。开发主要发生在运行Honeycomb的Xoom平板电脑上。无论如何,我想要做的是将直接ByteBuffer中的FBO调用glReadPixels()的结果存储起来,然后将该缓冲区与glTexImage2D()一起使用并将其拖回(现在已清除)帧缓冲区。所有这些似乎工作正常 - 根据Java无法理解无符号字节,ByteBuffer包含正确的值(像素为[-1,0,0,-1]等),没有出现GlErrors,并且四元组被绘制到屏幕的右侧(为了测试目的,当前是帧缓冲器的左上角)。
然而,不管我尝试什么,glTexImage2D()总是输出一个普通的黑色纹理。我之前遇到过一些问题 - 显示位图时,我最终放弃尝试使用带有缓冲区的基本GLES20.glTexImage2D(),并跳过使用GLUtils.glTexImage2D()来处理位图。不幸的是,这里没有什么选择(我实际上已经尝试将ByteBuffer转换为位图,所以我可以使用GLUtils,但没有太多成功),所以我真的用完了想法。
任何人都可以想到任何可能导致glTexImage2D()不能正确处理完美的ByteBuffer的东西吗?任何和所有的建议将受到欢迎。
ByteBuffer pixelBuffer;
void storePixels() {
try {
GLES20.glBindFramebuffer(GLES20.GL_FRAMEBUFFER, fbuf);
pixelBuffer = ByteBuffer.allocateDirect(width * height * 4).order(ByteOrder.nativeOrder());</