我是新来的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