Эти два вершинных шейдера должны быть скомпилированы в одну и ту же сборку GPU, но результаты отображаются только в одном.
Первый вершинный шейдер показывает все как положено:
#version 120
attribute vec3 aPos;
uniform float i;
void main() {
gl_FrontColor=gl_Color;
gl_Position = mat4x4(cos(radians(i)),0.,0.,0., 0.,1.+i*0.,0.,0., 0.,0.,1.,0., 0.,0.,0.,1.)*vec4(aPos.x,aPos.y,aPos.z,1.);
}
Вторая вершинашейдер ничего не отображает:
#version 120
attribute vec3 aPos;
uniform float i;
void main() {
gl_FrontColor=gl_Color;
gl_Position = mat4x4(cos(radians(i)),0.,0.,0., 0.,1.,0.,0., 0.,0.,1.,0., 0.,0.,0.,1.)*vec4(aPos.x,aPos.y,aPos.z,1.);
}
Информация журнала для состояний обоих шейдеров
Vertex shader was successfully compiled to run on hardware.
Vertex shader(s) linked, no fragment shader(s) defined.
Единственное различие между двумя шейдерами состоит в том, что первый шейдер имеет 1.+i*0.
, а второй шейдер имеетболее простой 1.
.
Так зачем добавлять i*0.
, чтобы исправить шейдер и заставить его работать должным образом?
Это поведение определяется спецификацией GLSL?
Примечание : Надеюсь, это не актуально.Я использую Cygwin, поэтому связанная DLL - это cygGL-1.dll
, а связывание с этой DLL недостаточно для запуска программы, и мне пришлось прибегнуть к использованию SDL_GL_GetProcAddress()
, чтобы заставить функции работать должным образом, так что это может бытьдальнейшая проблема с Cygwin DLL, если на самом деле имеет место эта тенденция, возможно, несовместимого поведения.