У меня есть следующий вершинный шейдер:
uniform mat4 uMVP;
attribute vec4 aPosition;
attribute vec4 aNormal;
attribute vec2 aTexCoord;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_Position = uMVP * aPosition;
vPrimaryColor = vec4(1.0, 1.0, 1.0, 1.0);
vTexCoord = aTexCoord;
}
И следующий фрагментный шейдер:
uniform sampler2D sTex;
varying vec2 vTexCoord;
varying vec4 vPrimaryColor;
void main() {
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
}
Обратите внимание, что хотя у меня есть vTexCoord и vPrimaryColor, ни один из которых не используется вфрагментный шейдер.(Причина, по которой они есть, заключается в том, что они в конечном итоге будут).
Теперь я также установил uMVP в качестве матрицы тождеств на данный момент и рисую, используя следующий код:
// Load the matrix
glUniformMatrix4fv(gvMVPHandle, 1, false, &mvPMatrix.matrix[0][0]);
// Draw the square to be textured
glVertexAttribPointer(gvPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glEnableVertexAttribArray(gvPositionHandle);
glVertexAttribPointer(gvTexCoordHandle, 2, GL_FLOAT, GL_FALSE, 0, gFullScreenQuad);
glDrawArrays(GL_QUADS, 0, 4);
где квадрат:
const GLfloat PlotWidget::gFullScreenQuad[] = { -1.0f, -1.0f, -1.0f, 1.0f, 1.0f, 1.0f, 1.0f, -1.0f};
Итак, когда я запускаю эту программу, я получаю черный экран.Что не похоже на то, что вы ожидаете.Однако, когда я меняю линию в тени:
vTexCoord = aTexCoord;
На
vTexCoord = vec2(1.0, 1.0);
Это работает отлично.Так что я бы предположил, что проблема с кодом связана с этой строкой кода, но я не могу придумать ничего, что могло бы вызвать это в opengl.Также я использую Qt для этого проекта, что означает, что этот класс использует QGLWidget.У меня никогда не было этой проблемы с OpenGL ES 2.0.
Есть предложения?
Извините за смутное название, но я даже не знаю, к какому классу это может быть..