没有当前上下文的OpenGL ES API

4

我浏览了解决方案,但并没有找到合适的。我之所以会出现这个错误是因为执行似乎发生在 GL 线程之外。但我不确定该如何解决。以下是代码:

public shape()
{
    super();        



    vertexShader = Shader.loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode); //<============
    fragmentShader = Shader.loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);      

    ByteBuffer buffer = ByteBuffer.allocateDirect(getCoordinates().length * 4);
    buffer.order(ByteOrder.nativeOrder());
    vertexBuffer = buffer.asFloatBuffer();

    vertexBuffer.put(getCoordinates());
    vertexBuffer.position(0);

    ByteBuffer drawListBuffer = ByteBuffer.allocateDirect(getOrderOfDraw().length * 2);

    drawListBuffer.order(ByteOrder.nativeOrder());

    listBuffer = drawListBuffer.asShortBuffer();
    listBuffer.put(getOrderOfDraw());

    listBuffer.position(0);


     mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
     GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
     GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
     GLES20.glLinkProgram(mProgram); 

}

并且调用渲染器是

    Square square = new Square(5, 5);

public void onDrawFrame(GL10 unused) 
{

    unused.glLoadIdentity();
    unused.glClear(GLES20.GL_COLOR_BUFFER_BIT);
    square.Draw();
}

正方形是一种形状。

1个回答

11

如果new Square(5,5);不是OpenGL回调的一部分(我假设您正在使用glSurfaceView),那么我认为它不会在OpenGL线程上运行。它将在创建您的glSurfaceView时执行,我认为这是在主Android线程上执行的。

尝试将new Square(5,5);移到onSurfaceCreated中。


那似乎解决了问题,但现在我收到了“调用未实现的OpenGL ES API”的错误,尽管我在清单中有以下代码: - Serguei Fedorov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接