방금 Qt와 함께 OpenGL을 시작했습니다. 지오메트리 셰이더를 사용하여 선의 너비를 변경하려고했지만 간단한 패스 스루 지오메트리 셰이더도 빈 화면을 만듭니다.통과 스 타일 셰이더
line_shader.addShaderFromSourceFile(QGLShader::Vertex, ":/shaders/lines.v.glsl");
line_shader.addShaderFromSourceFile(QGLShader::Fragment, ":/shaders/lines.f.glsl");
line_shader.addShaderFromSourceFile(QGLShader::Geometry, ":/shaders/lines.g.glsl");
line_shader.setGeometryInputType(GL_LINES);
line_shader.setGeometryOutputType(GL_LINES);
line_shader.setGeometryOutputVertexCount(100);
line_shader.link();
line_shader.bind();
const float data[] = {
0, 0, 0, 3, 0.8, 0, 0, 0.5, 1, 0, 0, 3, 0.8, 0, 0, 0.5,
0, 0, 0, 3, 0, 0.8, 0, 0.5, 0, 1, 0, 3, 0, 0.8, 0, 0.5,
0, 0, 0, 3, 0, 0, 0.8, 0.5, 0, 0, 1, 3, 0, 0, 0.8, 0.5,
};
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(line_shader.programId());
glBindBuffer(GL_ARRAY_BUFFER, vbo);
GLint a_vertex = line_shader.attributeLocation("a_vertex");
GLint a_color = line_shader.attributeLocation("a_color");
line_shader.enableAttributeArray(a_vertex);
line_shader.enableAttributeArray(a_color);
glVertexAttribPointer(a_vertex, 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), 0);
glVertexAttribPointer(a_color, 4, GL_FLOAT, GL_FALSE, 8 * sizeof(GLfloat), (GLvoid*)(4 * sizeof(GLfloat)));
glDrawArrays(GL_LINES, 0, 6);
버텍스 쉐이더 :
attribute vec4 a_vertex;
attribute vec4 a_color;
uniform mat4 u_pmv_matrix;
void main(void) {
gl_Position = u_pmv_matrix * vec4(a_vertex.x, a_vertex.y, a_vertex.z, 1);
}
지오메트리 쉐이더 :
void main() {
for (int i=0; i<gl_VerticesIn; ++i) {
gl_Position = gl_PositionIn[i];
EmitVertex();
}
EndPrimitive();
}
조각 쉐이더 :
varying vec4 v_color;
void main(void) {
gl_FragColor = vec4(1, 0, 0, 1);
}
다음
은 (발췌) 내 코드입니다3210
코드에서 line_shader.addShaderFromSourceFile(QGLShader::Geometry, ":/shaders/lines.g.glsl");
을 제거하면 모든 것이 예상대로 작동합니다.
내가 뭘 잘못하고 있니?
편집 : OS X 10.9, Qt 5.2.1을 사용합니다.
방출 된 정점의 색상을 전달하지 마십시오 –
고마워요,하지만 압니다. 나는 그것을 의도적으로 비활성화하고 프래그먼트 셰이더에서 수동으로 색상을 설정했습니다. – user2970139
'# version' 지시어는 어디에 있습니까? – genpfault