gratis game creator cocos2d cocos xcode cocos2d-iphone

game - Coco2d 2.1 y Xcode 7 iOS 9 crack ccShader



cocos game creator (4)

Usando la respuesta aceptada arriba, pero para las versiones más nuevas de cocos2d:

En CCShader.m, reemplace las líneas

static GLint CompileShaderSources(GLenum type, NSArray *sources) {

con

#define EXTENSION_STRING "#extension GL_OES_standard_derivatives : enable" static NSString * g_extensionStr = @EXTENSION_STRING; static NSArray * PrependExtensionIfNeeded(NSArray *sources) { NSMutableArray *mutableSources = [NSMutableArray array]; BOOL hasExtension = NO; for (NSString *source in sources) { NSString *newSource = [source copy]; if([source rangeOfString:g_extensionStr].location != NSNotFound) { hasExtension = YES; NSArray *strs = [source componentsSeparatedByString:g_extensionStr]; newSource = [strs componentsJoinedByString:@"/n"]; } [mutableSources addObject:newSource]; } if (hasExtension) { NSMutableString *firstSource = [NSMutableString stringWithString:[mutableSources firstObject]]; [firstSource insertString:[NSString stringWithFormat:@"%@/n", g_extensionStr] atIndex:0]; [mutableSources replaceObjectAtIndex:0 withObject:firstSource]; } return mutableSources; } static GLint CompileShaderSources(GLenum type, NSArray *sources) { sources = PrependExtensionIfNeeded(sources);

Probé Xcode 7 pero mi cocos2d 2.1 se colgó en simulador o en dispositivos:

ccShader_PositionColorLenghtTexture_frag.h

2015-06-15 22:36:13.319 NanoWar[18789:456971] cocos2d: ERROR: 0:12: '''' : syntax error: #extension must always be before any non-preprocessor tokens

y

cocos2d: ERROR: 0:26: Invalid call of undeclared identifier ''fwidth''

Esta clase bloquea el juego

#extension GL_OES_standard_derivatives : enable #ifdef GL_ES varying mediump vec4 v_color; varying mediump vec2 v_texcoord; #else varying vec4 v_color; varying vec2 v_texcoord; #endif void main() { #ifdef GL_OES_standard_derivatives #if defined GL_OES_standard_derivatives gl_FragColor = v_color*smoothstep(0.0, length(fwidth(v_texcoord)), 1.0 - length(v_texcoord)); #else gl_FragColor = v_color*step(0.0, 1.0 - length(v_texcoord)); #endif #endif }


La respuesta aceptada no funcionó para mí, pero esto fue así.

Vaya al archivo llamado CCGLProgram.m

Reemplace el método completo denominado - (BOOL)compileShader:(CLuint *)shader type(GLenum)typebyteArray:(const GLchar *)source

con este método

#define _IPHONE9_0 [[[UIDevice currentDevice] systemVersion] floatValue] == 9.000 #define EXTENSION_STRING "#extension GL_OES_standard_derivatives : enable" static NSString * g_extensionStr = @EXTENSION_STRING; - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type byteArray:(const GLchar *)source { GLint status; if (!source) return NO; #ifdef _IPHONE9_0 NSLog(@"USING IOS9 shaders"); // BEGIN workaround for Xcode 7 ios9---- BOOL hasExtension = NO; NSString *sourceStr = [NSString stringWithUTF8String:source]; if([sourceStr containsString:g_extensionStr]) { hasExtension = YES; NSArray *strs = [sourceStr componentsSeparatedByString:g_extensionStr]; assert(strs.count == 2); sourceStr = [strs componentsJoinedByString:@"/n"]; source = (GLchar *)[sourceStr UTF8String]; } const GLchar *sources[] = { (hasExtension ? EXTENSION_STRING "/n" : ""), #ifdef __CC_PLATFORM_IOS (type == GL_VERTEX_SHADER ? "precision highp float;/n" : "precision mediump float;/n"), #endif "uniform mat4 CC_PMatrix;/n" "uniform mat4 CC_MVMatrix;/n" "uniform mat4 CC_MVPMatrix;/n" "uniform vec4 CC_Time;/n" "uniform vec4 CC_SinTime;/n" "uniform vec4 CC_CosTime;/n" "uniform vec4 CC_Random01;/n" "//CC INCLUDES END/n/n", source, }; #else NSLog(@"USING IOS8 shaders"); const GLchar *sources[] = { #ifdef __CC_PLATFORM_IOS (type == GL_VERTEX_SHADER ? "precision highp float;/n" : "precision mediump float;/n"), #endif "uniform mat4 CC_PMatrix;/n" "uniform mat4 CC_MVMatrix;/n" "uniform mat4 CC_MVPMatrix;/n" "uniform vec4 CC_Time;/n" "uniform vec4 CC_SinTime;/n" "uniform vec4 CC_CosTime;/n" "uniform vec4 CC_Random01;/n" "//CC INCLUDES END/n/n", source, }; #endif *shader = glCreateShader(type); glShaderSource(*shader, sizeof(sources)/sizeof(*sources), sources, NULL); glCompileShader(*shader); glGetShaderiv(*shader, GL_COMPILE_STATUS, &status); if( ! status ) { GLsizei length; glGetShaderiv(*shader, GL_SHADER_SOURCE_LENGTH, &length); GLchar src[length]; glGetShaderSource(*shader, length, NULL, src); CCLOG(@"cocos2d: ERROR: Failed to compile shader:/n%s", src); if( type == GL_VERTEX_SHADER ) CCLOG(@"cocos2d: %@", [self vertexShaderLog] ); else CCLOG(@"cocos2d: %@", [self fragmentShaderLog] ); abort(); } return ( status == GL_TRUE ); }


Estoy "rae" en forum.cocos2d-objc.org y también podría poner mi respuesta aquí, ya que todos los caminos conducen a . :-)

Si está utilizando una versión anterior de Cocos 2D, esto puede ayudar. Edité CCGLProgram.m para cambiar el comienzo del método - (BOOL) compileShader: así:

#define EXTENSION_STRING "#extension GL_OES_standard_derivatives : enable" static NSString * g_extensionStr = @EXTENSION_STRING; - (BOOL)compileShader:(GLuint *)shader type:(GLenum)type byteArray:(const GLchar *)source { GLint status; if (!source) return NO; // BEGIN workaround for Xcode 7 bug BOOL hasExtension = NO; NSString *sourceStr = [NSString stringWithUTF8String:source]; if([sourceStr rangeOfString:g_extensionStr].location != NSNotFound) { hasExtension = YES; NSArray *strs = [sourceStr componentsSeparatedByString:g_extensionStr]; assert(strs.count == 2); sourceStr = [strs componentsJoinedByString:@"/n"]; source = (GLchar *)[sourceStr UTF8String]; } const GLchar *sources[] = { (hasExtension ? EXTENSION_STRING "/n" : ""), #ifdef __CC_PLATFORM_IOS (type == GL_VERTEX_SHADER ? "precision highp float;/n" : "precision mediump float;/n"), #endif "uniform mat4 CC_PMatrix;/n" "uniform mat4 CC_MVMatrix;/n" "uniform mat4 CC_MVPMatrix;/n" "uniform vec4 CC_Time;/n" "uniform vec4 CC_SinTime;/n" "uniform vec4 CC_CosTime;/n" "uniform vec4 CC_Random01;/n" "//CC INCLUDES END/n/n", source, }; // END workaround for Xcode 7 bug

Es un truco, pero funciona hasta Xcode 7 beta 2. Espero que esto sea útil para alguien que busca en Google.

Reid


NOTA: Quería escribir esto como un comentario pero no tiene la reputación suficiente para escribir un comentario, por lo tanto escribir esto como una respuesta:

La solución descrita por Reid soluciona el problema. Sin embargo, se bloquea en dispositivos iOS 7, ya que utiliza el método containsString , que solo está disponible en iOS 8 y versiones posteriores.

Un simple cambio en la siguiente línea corrige el problema:

if([sourceStr containsString:g_extensionStr]) {

necesita ser cambiado a:

NSRange range = [sourceStr rangeOfString:g_extensionStr]; if(range.length > 0) {