glsl プログラムを、以前に正常にコンパイルされた 2 つのシェーダとリンクしようとしていますが、プログラムがリンクしません。glRemedy のデバッガーによると、エラー メッセージはERROR: Definition for "void main()" not found
. いくつかのデバッグの後、glRemedy によると、GPU がシェーダーを受け取っていないことがわかりました。私のコードは正しく見え、クライアント側から期待どおりに動作すると思います。
頂点シェーダー:
layout(location = 0) in vec3 vertexPosicao;
void main() {
gl_Position.xyz = vertexPosicao;
gl_Position.w = 1.0;
}
フラグメント シェーダー:
out vec3 cor;
void main() {
cor = vec3(1, 0, 0);
}
コードを読み込んでいます:
bool Shader::fromCode(std::string strCode) {
GLint result;
GLchar *code = new GLchar[strCode.size() + 1];
strcpy(code, strCode.c_str());
glShaderSource(m_id, 1, const_cast<const GLchar **>(&code), NULL);
glCompileShader(m_id);
glGetShaderiv(m_id, GL_COMPILE_STATUS, &result);
return (bool)result;
}
編集:
使用glShaderSource
したシェーダー ID で使用した後、ソースを取り戻しました。それのすべて。しかし、\n が欠けているようです。それは問題になるでしょうか?
編集2:
Infolog はすべて問題ないと言っています。C++ コードからは、プログラムの情報ログも問題ないと言っていますが、glRemedy からは上記のエラーがあります。また、glRemedy のシェーダーのソースが表示されず、サイズが 0kb です。いいえ、私が設定したテストは、何かが機能していないことを示しています。
編集3:
メリークリスマス!=D