没有当前背景的opengl es api

我已经查看了解决方案并且没有真正找到解决方案。 我收到此错误,因为它似乎执行发生在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(); } 

方形从形状延伸

如果那个new Square(5,5); 不是任何opengl回调的一部分(我假设你使用glSurfaceView),然后我不认为它在OpenGL线程上运行。 它将在你的glSurfaceView创建时执行,我相信它是在主要的android线程上。

尝试移动new Square(5,5);onSurfaceCreated内部。