私はこの質問を見ました、そしてそれは本当にいくらかの光を当てました。それにもかかわらず、シェーダーの読み込みコードを最近変更せずに以前に実行されたため、シェーダーを「不適切に」読み込みているように見えません。したがって、これらのエラーは描画呼び出しから発生していると思います。
それでも、簡潔にするために、シェーダーファイル、レンダリングしようとしている円を描画するために使用される描画関数、およびシェーダーファイルに文字列としてロードされるコードを投稿します。
基本的に私が知る必要があるのは、なぜこれらのエラーが発生するのか、そして何が問題なのかということです。
(デバッグ出力から)
ERROR {
OpenGL Says:
Vertex info
-----------
0(1) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
Fragment info
-------------
0(1) : error C0000: syntax error, unexpected $undefined at token "<undefined>"
};
コードを描く
void Circle::draw( GLuint program )
{
const size_t centerMag = mCenter.length();
glUseProgram( program );
for( float t = 0; t < mCircumference; t += 0.1 )
{
float x = centerMag + glm::cos( 2 * M_PI * t );
float y = centerMag + glm::sin( 2 * M_PI * t );
mVertices->push_back( glm::vec4( x, y, 0, 1 ) );
}
QListIterator< glm::vec4 > iVertices( *mVertices );
const size_t size = mVertices->size();
float** verts = new float*[ size ];
size_t i = 0;
glEnableClientState( GL_VERTEX_ARRAY );
while( iVertices.hasNext() )
{
verts[ i ] = new float[ size ];
verts[ i ] = const_cast< float* >( glm::value_ptr( iVertices.next() ) );
glVertexPointer( 4, GL_FLOAT, 0, verts[ i ] );
glDrawArrays( GL_LINES, 0, 4 );
++i;
}
glDisableClientState( GL_VERTEX_ARRAY );
for( unsigned iMem = 0; iMem < size; ++iMem )
{
delete[] verts[ iMem ];
verts[ iMem ] = NULL;
}
delete[] verts;
verts = NULL;
}
FileUtility
QString FileUtility::readShader( QString filepath )
{
std::ifstream in( filepath.toStdString().c_str() );
std::stringstream shaderDat;
shaderDat << in.rdbuf();
QString shaderFile;
shaderFile += shaderDat.str().c_str();
in.close();
return shaderFile;
}
GenericColor.frag
#version 330
out vec4 outputColor;
void main()
{
outputColor = vec4(1.0f, 0, 0, 1.0f);
}
Position.vert
#version 330
layout(location = 0) in vec4 position;
void main()
{
gl_Position = position;
}
アップデート
シェーダーバインディング/コンパイルコードが要求されたので、シェーダーハンドラー全体とエンジンクラスを投稿するだけでもよいと思いました。
アップデート
解析されたシェーダー文字列は次のInfo
とおりです(デバッグ出力です)。
Info {
Shader Source #version 330
in uniform mvp;
layout(location = 0) in vec4 position;
void main()
{
gl_ModelViewProjectionMatrix = mvp;
gl_Position = position;
}
};
Info {
Shader Source #version 330
out vec4 outputColor;
void main()
{
outputColor = vec4(1.0f, 0, 0, 1.0f);
}
};