OpenGL ES纹理问题,4个重复列和水平线(Android)

我有一个RGB(或RGBA)纹理图像的缓冲区,我想用我的Android设备上显示它与下面的代码。我使用NDK的OpenGL。
glTexImage2D(GL_TEXTURE_2D,
             0,
             GL_RGBA,
             256,
             256,
             0,
             GL_RGBA,
             GL_UNSIGNED_BYTE,
             this->pBuffer);
我还从Java端设置了PixelFormat:
this.getHolder().setFormat(PixelFormat.RGBA_8888);
this.setEGLConfigChooser(8, 8, 8, 8, 0, 0);
setRenderer(new MyRenderer());
显示图像但有四列(相同且包含原始图像的可识别部分),并且图像上有水平线。 可能是什么问题? 原始图片: 我的代码看起来如何:     
已邀请:
这看起来像图像大小不是256乘256,但可能大约150像素宽。你的纹理必须是2大的力量,但如果你需要上传一个较小的纹理,你可以使用glTexSubImage2D:
glTexSubImage2D(GL_TEXTURE_2D,  /* target */
            0,      /* level */
            0,      /* xoffset */
            0,      /* yoffset */
            150,        /* width */
            256,        /* height */
            GL_RGBA,    /* format */
            GL_UNSIGNED_BYTE,   /* type */
            this->pBuffer); /* data */
在最初的glTexImage2D调用中,只需传递NULL而不是像素缓冲区。尝试这样的事情,看看它是否有所作为。 如果您使用glDrawTexiOES绘制纹理,则使用GL_TEXTURE_CROP_RECT_OES裁剪较小的纹理:
int rect[4] = {0, imageHeight, imageWidth, -imageHeight};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(0, 0, 0, windowWidth, windowHeight);
    

要回复问题请先登录注册