glTexSubImage2D和Java';IntBuffer

glTexSubImage2D和Java';IntBuffer,java,android,opengl-es,Java,Android,Opengl Es,我有一个Android应用程序,它使用glTexImage2D创建了纹理,因此我可以稍后使用glTexSubImage2D进行编辑: private void buildTexture() { if(canvasTexture[0] != -1) { GLES20.glDeleteTextures(1, canvasTexture, 0); canvasTexture[0] = -1; } GLES20.glGenTextures

我有一个Android应用程序,它使用glTexImage2D创建了纹理,因此我可以稍后使用glTexSubImage2D进行编辑:

private void buildTexture() 
{
    if(canvasTexture[0] != -1)
    {
        GLES20.glDeleteTextures(1, canvasTexture, 0);
        canvasTexture[0] = -1;
    }
    GLES20.glGenTextures(1, canvasTexture, 0);
    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, canvasTexture[0]);
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_NEAREST); 
    GLES20.glTexParameteri(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_NEAREST);
    GLES20.glTexImage2D(GLES20.GL_TEXTURE_2D, 0, GLES20.GL_RGBA, canvasDims.x(), canvasDims.y(), 0, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, canvasBuffer);
}
尺寸为128x64,canvasBuffer初始化如下:

canvasBuffer = IntBuffer.allocate(canvasDims.x()*canvasDims.y());
基本上,我希望在本机内存中保留一个IntBuffer来保存整个图像,并在需要时和需要的地方对其进行更新

问题就从这里开始。我正在尝试更新纹理的一部分,并在缓冲区中为其提供匹配部分:

    GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, canvasTexture[0]);
    canvasBuffer.position(1); //anything but 0 makes it crash
    GLES20.glTexSubImage2D(GLES20.GL_TEXTURE_2D, 0, 0, 0, 1, 1, GLES20.GL_RGBA, GLES20.GL_UNSIGNED_BYTE, canvasBuffer);
    canvasBuffer.position(0);
如果且仅当位置在prev中设置为除0以外的任何值时,对glTexSubImage2D的调用才会导致崩溃(SIGSEGV-无效的mem访问)。线路


我的错在哪里

什么是画布?您是否检查过函数x()和y()是否返回正确的值?是的,它们分别返回128和64。问题是,当位置设置为0时,我可以写入缓冲区中的整个8192个整数。当位置不是0时,比如说1,glTexSubImage2D崩溃,无论参数如何。您找到解决方案了吗?我也遇到同样的问题