3

私は解決策を調べましたが、実際には見つかりませんでした。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();
}

四角形は形から伸びる

4

1 に答える 1

11

それnew Square(5,5);がopenglコールバックの一部でない場合(glSurfaceViewを使用していると思います)、OpenGLスレッドで実行されるとは思いません。glSurfaceView が作成されたときに実行されます。これはメインの Android スレッドにあると思います。

new Square(5,5);の中を移動してみてくださいonSurfaceCreated

于 2012-07-02T01:03:58.810 に答える