2012-07-02 2 views
2

Я просмотрел решения и на самом деле их не нашел. Я получаю эту ошибку, потому что кажется, что выполнение происходит за пределами потока gl. Однако я не уверен, как это исправить. Код выглядит следующим образом:opengl es api без текущего контекста

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(); 
} 

площадь простирается от формы

ответ

8

Если new Square(5,5); не является частью какого-либо из OPENGL обратных вызовов (я предполагаю, что вы» re используя glSurfaceView), то я не думаю, что он работает в потоке OpenGL. Он будет выполнен, когда будет создан ваш glSurfaceView, который, как мне кажется, находится в главном потоке андроида.

Попробуйте переместить new Square(5,5); внутри onSurfaceCreated.

+0

Это, кажется, решить эту проблему, однако теперь я получаю «называется„нереализованный OpenGL ES API“, даже если у меня есть <использует-SDk андроида: minSdkVersion =» 10" /> <использует-функцию андроид: required = "true" android: glEsVersion = "0x00020000" /> в манифесте –

+0

Какая строка вашего кода дает это сообщение? @ user1260028 – Tim

Смежные вопросы