我正在使用一個來自互聯網的例子,作者說它的工作原理,它看起來合法。使用SDL2和xcode 4.6。我設法創建了一個OpenGL 3.2核心上下文。但不能使用glsl 1.50
因此,我下載了SDL2並在調試中構建了框架。我創建了一個常規的Opengl 2.1應用程序來檢查SDL是否已正確構建,並且可以調試它。
然後我創建一個OpenGL 3.2核心上下文我檢查了主要版本是3和次要2(調用GlGetIntegerv)。
我也用這條線:
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
,我仔細檢查固定管道調用都無用。到現在爲止還挺好。
問題是,當我嘗試使用着色器glsl 1.50。它編譯失敗,並給出一些類似的錯誤(我道歉,我沒有現在前面的錯誤):ERROR 0:2語法錯誤語法錯誤
着色器加載代碼如下所示:
char* filetobuf(char *file)
{
FILE *fptr;
long length;
char *buf;
fptr = fopen(file, "rb"); /* Open file for reading */
if (!fptr) /* Return NULL on failure */
return NULL;
fseek(fptr, 0, SEEK_END); /* Seek to the end of the file */
length = ftell(fptr); /* Find out how many bytes into the file we are */
buf = (char*)malloc(length+1); /* Allocate a buffer for the entire length of the file and a null terminator */
fseek(fptr, 0, SEEK_SET); /* Go back to the beginning of the file */
fread(buf, length, 1, fptr); /* Read the contents of the file in to the buffer */
fclose(fptr); /* Close the file */
buf[length] = 0; /* Null terminator */
return buf; /* Return the buffer */
}
和着色器:
vertex shader
#version 150 core
uniform mat4 viewMatrix, projMatrix;
in vec4 position;
in vec3 color;
out vec3 Color;
void main()
{
Color = color;
gl_Position = projMatrix * viewMatrix * position ;
}
fragment shader:
#version 150 core
in vec3 Color;
out vec4 outputF;
void main()
{
outputF = vec4(Color,1.0);
}
如果我不使用3.2核心方面,我得到 「版本不支持」。但現在不是,所以錯誤一定是別的。
任何線索?
UPDATE 事實上,一些事情是錯上的讀數着色器文件,因爲我剛剛創建了一個const char *與在它寫的全着色器,並通過引用glShaderSource()和現在的工作。有趣的是,我仍然不明白filetobuf()有什麼問題(我應用了Armin修復)。
你可以更具體地瞭解錯誤,錯誤發生在哪一行,如果你刪除代碼的某些部分,它會消失嗎? – 2013-07-04 11:21:23
只要我回家,我會盡快更新信息,並可以嘗試您提出的修正。謝謝 – Ozender
你是否檢查了非法(非ascii)字符的着色器?如果您從網頁複製着色器,則可能是一些unicode字符(使用printf或NSLog檢查它)。如果您使用的是OsX系統,請嘗試導入Foundations框架並使用NSString stringWithContentsOfFile:encoding:NSASCIIStringEncoding –