經過挖掘,原來glCreateProgram()
一直返回0。一旦我弄清楚了,我會發布修補程序。如果你們知道什麼可能導致它,請發表評論^^
context
正確創建。
context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
謝謝。
該文件被正確加載。它保存爲cl.vsh
它加載正常,但在編譯階段失敗。
這是cl.vsh
attribute vec4 position;
attribute vec3 normal;
uniform mat4 modelViewProjectionMatrix;
uniform mat4 modelViewMatrix;
uniform mat3 normalMatrix;
uniform float time;
varying vec3 eyespaceNormal;
varying vec4 eyespacePosition;
varying vec3 noiseVector;
void main()
{
int i = 0;
// vec3 translation = vec3(1.0, 1.0, 1.0) * time/20.0;
// noiseVector = position.xyz + translation;
//
// eyespaceNormal = normalMatrix * normal;
// eyespacePosition = modelViewMatrix * position;
// gl_Position = modelViewProjectionMatrix * position;
}
代碼這是編譯的一部分。 shaderString
是cl.vsh
GLint status;
const GLchar *source;
source =
(GLchar *)[shaderString UTF8String];
if (!source)
{
NSLog(@"Failed to load vertex shader");
return NO;
}
*shader = glCreateShader(type);
glShaderSource(*shader, 1, &source, NULL);
glCompileShader(*shader);
glGetShaderiv(*shader, GL_COMPILE_STATUS, &status);
if (status != GL_TRUE)
{
GLint logLength;
glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &logLength);
if (logLength > 0)
{
GLchar *log = (GLchar *)malloc(logLength);
glGetShaderInfoLog(*shader, logLength, &logLength, log);
NSLog(@"Shader compile log:\n%s", log);
free(log);
}
}
的確切的代碼打印出日誌 _
(lldb) p log
(GLchar *) $0 = 0x17420000
(lldb) po log
[no Objective-C description available]
(lldb) p *log
(GLchar) $2 = '\0'
我看到你叫做'glGetShaderInfoLog(...)',你介意在你的問題中分享輸出嗎? –
完成。其空.....請檢查更新 – Legolas
究竟是什麼時候失敗? (你在什麼時候在調試器中檢查'log')?當我嘗試時,我沒有看到它編譯失敗,如果你有編譯問題,你應該從「Shader compile log」NSLog'語句中看到一些東西。 – rickster