Ho visto la domanda this e ha davvero fatto luce. Nonostante questo, non riesco a capire come sto "impropriamente" caricare la mia dello shader, perché questo ha eseguita prima senza alcuna recenti modifiche al codice dello shader di carico, in modo da assumere questi errori devono essere provenienti dal mio sorteggio chiamate.
Nonostante ciò, inserirò ancora i file dello shader per brevità, la funzione di disegno utilizzata per disegnare il cerchio che sto cercando di rendere e il codice che carica nel file shader come una stringa.
Fondamentalmente quello che dovete sapere è perché sto ottenendo questi errori e cosa diavolo è sbagliato con loro?
(Da output di debug)
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>"
};
Codice Draw
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;
}
Aggiornamento
Dal momento che il mio legame Shader/codice di compilazione è stato richiesto, ho pensato che può anche semplicemente pubblicare la mia intero gestore dello shader, così come la classe del motore.
- Engine - ShaderHandler.
Aggiornamento
Qui ci sono le corde degli shader analizzati (Info
è un output di debug):
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);
}
};
È possibile visualizzare anche la compilazione shader/codice vincolante VA? –
Aggiornato, ho deciso di incollare l'intero file sorgente. – zeboidlund
Grazie, darò un'occhiata. –