Skip to content

Commit eb8d717

Browse files
committed
CCShader.m returns nil on error instead of asserting.
1 parent a8ffb76 commit eb8d717

File tree

1 file changed

+14
-6
lines changed

1 file changed

+14
-6
lines changed

cocos2d/CCShader.m

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@
139139
typedef void (* GetShaderivFunc) (GLuint shader, GLenum pname, GLint* param);
140140
typedef void (* GetShaderInfoLogFunc) (GLuint shader, GLsizei bufSize, GLsizei* length, GLchar* infoLog);
141141

142+
// Returns NO if there is an error
142143
static BOOL
143144
CCCheckShaderError(GLint obj, GLenum status, GetShaderivFunc getiv, GetShaderInfoLogFunc getInfoLog)
144145
{
@@ -183,9 +184,12 @@
183184
glShaderSource(shader, 3, sources, NULL);
184185
glCompileShader(shader);
185186

186-
NSCAssert(CCCheckShaderError(shader, GL_COMPILE_STATUS, glGetShaderiv, glGetShaderInfoLog), @"Error compiling shader");
187-
188-
return shader;
187+
if(CCCheckShaderError(shader, GL_COMPILE_STATUS, glGetShaderiv, glGetShaderInfoLog)){
188+
return shader;
189+
} else {
190+
glDeleteShader(shader);
191+
return 0;
192+
}
189193
}
190194

191195

@@ -564,7 +568,7 @@ -(instancetype)initWithGLProgram:(GLuint)program uniformSetters:(NSDictionary *)
564568
-(instancetype)initWithMetalVertexFunction:(id<MTLFunction>)vertexFunction fragmentFunction:(id<MTLFunction>)fragmentFunction
565569
{
566570
if((self = [super init])){
567-
NSAssert(vertexFunction && fragmentFunction, @"Must create have both a vertex and fragment function to make a CCShader.");
571+
NSAssert(vertexFunction && fragmentFunction, @"Must have both a vertex and fragment function to make a CCShader.");
568572

569573
_vertexFunction = vertexFunction;
570574
_fragmentFunction = fragmentFunction;
@@ -630,14 +634,18 @@ -(instancetype)initWithGLVertexShaderSource:(NSString *)vertexSource fragmentSha
630634
glAttachShader(program, fshader);
631635

632636
glLinkProgram(program);
633-
NSCAssert(CCCheckShaderError(program, GL_LINK_STATUS, glGetProgramiv, glGetProgramInfoLog), @"Error linking shader program");
634637

635638
glDeleteShader(vshader);
636639
glDeleteShader(fshader);
637640

638641
CCGL_DEBUG_POP_GROUP_MARKER();
639642

640-
blockself = [blockself initWithGLProgram:program uniformSetters:GLUniformSettersForProgram(program) ownsProgram:YES];
643+
if(CCCheckShaderError(program, GL_LINK_STATUS, glGetProgramiv, glGetProgramInfoLog)){
644+
blockself = [blockself initWithGLProgram:program uniformSetters:GLUniformSettersForProgram(program) ownsProgram:YES];
645+
} else {
646+
glDeleteProgram(program);
647+
blockself = nil;
648+
}
641649
});
642650

643651
return blockself;

0 commit comments

Comments
 (0)