我是新來的OpenGLES,我已經得到了與着色器程序的問題 我的情況是:的Android/OpenGLES2 - 在不同的線程創建「着色器」程序
Thread A(works as loop) manages everything but it does not draw on screen
Thread B only draws on screen
Thread A decides if Thread B will draw in current cycle
我的問題是,當線程A線程B創建着色器程序,B不能訪問attribs,統一地點
這是一個如何創建着色器程序:
int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
int pixelShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
mProgram = GLES20.glCreateProgram();
GLES20.glAttachShader(mProgram, vertexShader);
GLES20.glAttachShader(mProgram, pixelShader);
GLES20.glLinkProgram(mProgram);
這是線程B如何使用程序:
GLES20.glUseProgram(mProgram);
int positionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
GLES20.glEnableVertexAttribArray(positionHandle);
GLES20.glVertexAttribPointer(positionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT, false, vertexStride, vertexBuffer);
glGetAttribLocation返回-1,如果mProgram被線程A glGetAttribLocation返回時mProgram被線程B創建有效的位置創建
如果創建mProgram和positionHandle線程A是硬編碼到有效位置着色器程序不工作eather。
我的問題:是否可以在線程A中創建線程B可用的着色器程序?
一次只能有一個呈現上下文處於活動狀態,並且不能從其他線程使用。您應該閱讀以下內容:http://www.equalizergraphics.com/documentation/parallelOpenGLFAQ.html#.UBWq0bQlVTI 但是,我無法找到GLES20的makecurrent替代方案。很可能它不存在。我會建議在主線程中調用OpenGL命令。 – 2012-07-29 21:33:47