Vertex Shader не удается скомпилировать. Невозможно найти ошибку

РЕДАКТИРОВАТЬ:

Кажется, ошибка заключалась в том, что мне не разрешено компилировать шейдер в отдельном потоке? Поскольку я сейчас просто загружаю объект-загрузку в поточную среду, появилось сообщение об ошибке. Просто не думал, что это может быть причиной этого.


По какой-то причине мой текущий шейдер вершин не компилируется. Сообщение об ошибке, которое я получаю, не существует, и я не могу найти ошибку.

uniform mat4 u_MVPMatrix; uniform mat4 u_MVMatrix; uniform vec3 u_CameraPos; attribute vec4 a_Position; attribute vec4 a_Color; attribute vec3 a_Normal; varying vec3 v_Position; varying vec4 v_Color; varying vec3 v_Normal; varying vec3 v_CameraPosition; varying vec4 v_Ambient; void main() { v_Position = vec3(u_MVMatrix * a_Position); v_Color = a_Color; v_Normal = vec3(u_MVMatrix * vec4(a_Normal, 0.0)); //v_CameraPosition = vec3(u_MVMatrix * vec4(u_CameraPos, 0.0)); // taken out to debug v_CameraPosition = u_CameraPos; gl_Position = u_MVPMatrix * a_Position; } 

Фрагментный шейдер для этого:

 precision mediump float; uniform vec3 u_LightPos; uniform vec4 u_Light; uniform vec4 u_Ambient; uniform vec3 u_LightDirection; uniform vec3 u_CameraPos; varying vec4 v_Ambient; varying vec3 v_Position; varying vec4 v_Color; varying vec3 v_Normal; varying vec3 v_CameraPosition; // The entry point for our fragment shader. void main() { float distance = length(u_LightPos - v_Position); vec3 lightVector = normalize(u_LightPos - v_Position); float diffuse = max(dot(v_Normal, lightVector), 0.1); diffuse = diffuse * (1.0 / (1.0 + (0.25 * distance * distance))); // specular lighting removed due to debugging gl_FragColor = v_Color * (u_Ambient + (diffuse * u_Light)); } 

«Попытка» получить сообщение об ошибке:

 Log.d(TAG, "Compilation -> " + GLES20.glGetShaderInfoLog(iShader)); 

Возвращает пустую строку из метода, а также

 Log.e(TAG, "Vertex Shader Failed -> " + GLES20.glGetError()); 

Возвращается просто 0.

Я разрабатываю OpenGL ES 2.0 для Android, если есть какие-то ограничения для Android, о которых я не знаю?

Спасибо за любую помощь!

Контексты OpenGL работают только в потоке, поэтому вы правы. Если вы хотите создать поток загрузки фона, вам нужно не только создать новый контекст в этом потоке, но и убедиться, что он использует ресурсы (третий параметр в eglCreateContext ). Помните, что совместное использование ресурсов контекста может не работать на некоторых (более старых) устройствах.