對於OpenGL學習,我指的是openglbook。目前在chapter 2,我試圖運行其代碼pasted here作爲參考。OpenGL(在Ubuntu中):glGetError()返回GL_INVALID_OPERATION
我現在面臨的問題是下面的功能:
void CreateShaders(void)
{
GLenum ErrorCheckValue = glGetError();
VertexShaderId = glCreateShader(GL_VERTEX_SHADER);
glShaderSource(VertexShaderId, 1, &VertexShader, NULL);
glCompileShader(VertexShaderId);
FragmentShaderId = glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(FragmentShaderId, 1, &FragmentShader, NULL);
glCompileShader(FragmentShaderId);
ProgramId = glCreateProgram();
glAttachShader(ProgramId, VertexShaderId);
glAttachShader(ProgramId, FragmentShaderId);
glLinkProgram(ProgramId);
glUseProgram(ProgramId);
ErrorCheckValue = glGetError(); // =====> returns GL_INVALID_OPERATION
if (ErrorCheckValue != GL_NO_ERROR)
{
fprintf(
stderr,
"ERROR: Could not create the shaders: %s \n",
gluErrorString(ErrorCheckValue)
);
exit(-1);
}
}
如上功能(glew.h
),爲什麼它返回"GL_INVALID_OPERATION"
顯示?
如果我評論這些行,那麼它的作品,但只是打印一個空白窗口。
這是我的glxinfo。由於我的版本是2.2,這代碼是爲3.3+,我在下面的代碼刪除,以避免故障:
glutInitContextVersion(4, 0);
glutInitContextFlags(GLUT_FORWARD_COMPATIBLE);
glutInitContextProfile(GLUT_CORE_PROFILE);
更新:從@添的回答下面的建議後,我能夠成功運行該程序;似乎這些系是創建問題:
「的#Version 400 \ n」 個(用 「的#Version 130」 代替)
和
佈局(位置= 0) (已刪除)。 佈局(位置= 1)(刪除)。
但是由於這個原因,預期的三角形不會完全相同。這個教程可能會教導最新的opengl版本,我沒有這個版本,這就造成了這個問題。
是否有任何方法可以將代碼從最新的OpenGL(4.0+)兼容的代碼修改爲較小的版本(例如< 3.0)而不改變輸出?我將無法升級圖形硬件。
沒有足夠的時間來獲得完整的答案,但[glBindAttribLocation](http://www.opengl.org/sdk/docs/man/xhtml/glBindAttribLocation.xml)是一個函數,可以取代特殊'layout'關鍵字。 – Tim