2012-07-02 111 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的回調的部分(我想你」重新使用glSurfaceView),那麼我不認爲它運行在OpenGL的線程上。創建你的glSurfaceView時,它會被執行,我相信這是主要的Android的線程上。

嘗試移動new Square(5,5);onSurfaceCreated內。

+0

這似乎解決這個問題,但是現在我越來越 「所謂的 」未實現的OpenGL ES API「 即使我有 <使用-SDK安卓的minSdkVersion =」 10" /> <使用,功能的Android:需要=「真正的」機器人:glEsVersion =「0x00020000」 /> 在清單 –

+0

哪一行代碼的是給該消息@ user1260028 – Tim

相關問題