此代碼對於3.30 OpenGL和GLSL版本有什麼問題?GLSL多於一個字符指針(glShaderSource)時編譯錯誤
const char *vertSrcs[2] = { "#define A_MACRO\n", vShaderSrc };
const char *fragSrcs[2] = { "#define A_MACRO\n", fShaderSrc };
glShaderSource(vId, 2, vertSrcs, NULL);
glShaderSource(fId, 2, fragSrcs, NULL);
我收集與GL_COMPILE_STATUS着色器狀態下,它的編譯後,出現此錯誤:
Vertex shader failed to compile with the following errors:
該宏的目的是改變顏色我從頂點傳遞給類型限定符片段,也許有另一種方法來使用制服和佈局來做到這一點,但問題是爲什麼着色器會失敗?我想知道是否有另一個必須指定2個字符指針的OpenGL命令。 順便說一句,這個工程:
...
glShaderSource(vId, 1, &vertSrcs[1], NULL);
...
編輯:因爲我不能回答我自己的問題,找到解決方案
很奇怪的問題,該字符串裝載機恰好是問題。不使用ifstream連同std :: ios :: in | std :: ios :: binary標誌,該字符串被加載了一些垃圾信息,甚至以空終止,因此連接字符串將產生錯誤。 出於某種原因,GL編譯器沒有與單串版本之前抱怨,除了要求
inStream.flags(std::ios::in | std::ios::binary)
是不夠的,它需要被指定時開放,沒有發現這方面的任何文檔。
那麼......下列哪些錯誤? – genpfault
不幸的是** glGetShaderInfoLog(...); **不會記錄任何東西,我會讓你知道,如果我找到原因,至少運行使用gDEBugger不會顯示任何相關的錯誤並運行良好... – notNullGothik
你可以回答自己並接受它。並且爲了避免像你所擁有的那樣的問題,因爲這是glShaderSource的最後一個參數,它告訴OpenGL每個源字符串的長度,從而避免它讀入垃圾。 – datenwolf