- (BOOL)loadShaders 方法对我不起作用
Posted
技术标签:
【中文标题】- (BOOL)loadShaders 方法对我不起作用【英文标题】:- (BOOL)loadShaders method is not working for me 【发布时间】:2011-02-01 09:08:02 【问题描述】:我正在尝试从基于视图的应用程序中使用 opengl es 2.0 制作图表,但是 - (BOOL)loadShaders 总是返回 NO,因此控制在 renderer1 中进行。知道发生了什么吗?
- (BOOL)loadShaders
//return YES;
GLuint vertShader, fragShader;
NSString *vertShaderPathname, *fragShaderPathname;
// create shader program
program = glCreateProgram();
// create and compile vertex shader
vertShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"vsh"]; // this is returning nil always.
if (!compileShader(&vertShader, GL_VERTEX_SHADER, 1, vertShaderPathname))
destroyShaders(vertShader, fragShader, program);
return NO;
// create and compile fragment shader
fragShaderPathname = [[NSBundle mainBundle] pathForResource:@"Shader" ofType:@"fsh"];
if (!compileShader(&fragShader, GL_FRAGMENT_SHADER, 1, fragShaderPathname))
destroyShaders(vertShader, fragShader, program);
return NO;
// attach vertex shader to program
glAttachShader(program, vertShader);
// attach fragment shader to program
glAttachShader(program, fragShader);
// bind attribute locations
// this needs to be done prior to linking
glBindAttribLocation(program, ATTRIB_VERTEX, "position");
glBindAttribLocation(program, ATTRIB_COLOR, "color");
// link program
if (!linkProgram(program))
destroyShaders(vertShader, fragShader, program);
return NO;
// get uniform locations
uniforms[UNIFORM_MODELVIEW_PROJECTION_MATRIX] = glGetUniformLocation(program, "modelViewProjectionMatrix");
// release vertex and fragment shaders
if (vertShader)
glDeleteShader(vertShader);
vertShader = 0;
if (fragShader)
glDeleteShader(fragShader);
fragShader = 0;
return YES;
【问题讨论】:
YES
和 NO
到底是什么?你自己的布尔版本? WTF。
@shoosh 这些是objective-c中内置的布尔值
【参考方案1】:
如果vertShaderPathname
为空,则表示找不到顶点着色器源。在这种情况下,请确保着色器存在于您的项目中,并且作为资源捆绑在一起。
要在 xcode 中执行此操作,请转到左侧的树,导航到“Targets->(projname)->Copy Bundle Resources”并确保您有一个“Shader.vsh”。如果它出现在“Compile Sources”中,则需要将其拖到“Copy Bundle Resources”中
【讨论】:
以上是关于- (BOOL)loadShaders 方法对我不起作用的主要内容,如果未能解决你的问题,请参考以下文章