Я хотел бы приложить геометрический шейдер к существующим (и рабочим) вершинам и фрагментам шейдеров. Фрагмент кода отвечает за создание программы:Использование GLES31ext на Android для компиляции геометрического шейдера?
int geometryShader = GLES31.glCreateShader(GLES31Ext.GL_GEOMETRY_SHADER_EXT);
glShaderSource(geometryShader, geometryShaderSource);
glCompileShader(geometryShader);
// Error checking:
glGetShaderiv(geometryShader, GL_COMPILE_STATUS, success, 0);
if(success[0] == 0)
Log.v(Debug.shaderHelper, "Geometry Shader Compile Failed: " + glGetShaderInfoLog(geometryShader));
int program = glCreateProgram();
glAttachShader(program, vertexShader);
glAttachShader(program, geometryShader);
glAttachShader(program, fragmentShader);
glLinkProgram(program);
А вот геометрия шейдеров:
#version 310 es
layout (triangles) in;
layout (triangle_strip) out;
layout (max_vertices = 3) out;
void main(void){
int i
for (i = 0; i < gl_in.length(); i++){
//gl_Position = gl_in[i].gl_Position;
gl_Position = vec4(0.0);
//EmitVertex();
}
//EndPrimitive();
}
Этот шейдер должен быть просто сквозная шейдер (только для тестирования на данный момент). Проблема в том, что код шейдера геометрии не влияет на окончательную обработку вершин. Несмотря на то, что я прокомментировал важные части кода, он все еще работает. (Не говоря уже о недостающей точке с запятой.)
Ошибок не зарегистрировано, хотя я проверяю их.
Так что мои вопросы:
Как я могу скомпилировать геометрии шейдер на андроид?
Почему нет ошибок?
Могу ли я просто прикрепить геометрический шейдер к программе точно так же, как вершинный и фрагментарный шейдер?
'glGetShaderiv' принимает только 3 параметра. (https://www.khronos.org/opengles/sdk/docs/man/xhtml/glGetShaderiv.xml), но вы вызываете его с 4. Вы уверены, что правильно проверяете ошибку? – MuertoExcobito
@MuertoExcobito: Мне жаль, что я не упоминал об этом, но это код javascript для Android, а не C++. [link] (http://developer.android.com/reference/android/opengl/GLES20.html#glGetShaderiv (int, int, int [], int)) – andras