android opengl es 2d,Android OpenGL ES 2.0 - glReadPixels()和glTexImage2D()绘制黑色纹理?

在Android开发中,使用OpenGL ES 2.0时遇到一个问题,即从帧缓冲区读取像素数据并存储在ByteBuffer中,然后使用glTexImage2D()将缓冲区内容作为纹理绘制到帧缓冲区时,始终显示为黑色纹理。代码逻辑检查无误,包括像素读取、纹理参数设置和绘制函数。开发者寻求解决导致glTexImage2D()处理不正确的原因和建议。
摘要由CSDN通过智能技术生成

我正在研究一些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());</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值