【发布时间】:2014-05-15 08:13:05
【问题描述】:
我已经搜索了一个多星期,寻找这个问题的答案,没有结果。
有没有办法在cocos2d的后台线程上制作一个核心图形纹理,然后返回一个纹理(CCTexture2D)。
我试图在后台线程上渲染它,但我只得到一个黑色纹理(CCTexture2D)作为返回。
这是渲染关卡创建的代码
1.我新建一个NSThread
-(void)loadLevelByString:(NSString*)level objects:(NSArray*)o{
[NSThread detachNewThreadSelector:@selector(loadingLevelThread:) toTarget:self withObject:[NSArray arrayWithObjects:level,o, nil]];
}
2.线程调用loadingLevelThread方法加载关卡数据。
-(void)loadingLevelThread:(NSArray*)objects{
//This line allocs the level class
id object = [[[NSClassFromString(@"LevelLoader") alloc] initWithLevel:[objects objectAtIndex:0] objects:[objects objectAtIndex:1]] autorelease];
if([object respondsToSelector:@selector(loadLevel)]){
id loadedLevel = [object performSelector:@selector(loadLevel)];
[self performSelectorOnMainThread:@selector(replaceSceneWithNew:) withObject:loadedLevel waitUntilDone:YES];
}
}
我在loadedLevel 调用中创建了纹理(上图)。 我创建这样的纹理
1.首先我用核心图形制作了一个CGContext,并绘制了我喜欢的纹理。 这行得通。
2.然后我用上面创建的上下文图像初始化 CCTexture2D 类
CCTexture2D *texture = [[CCTexture2D alloc] initWithCGImage:contextImage.CGImage resolutionType:kCCTexture2DPixelFormat_RGBA8888];
3.比我将 CCTexture 也保存为全局共享处理程序
[[runing_session_data sharedSession] setText:texture];
4. 创建纹理时,我会创建用于绘制纹理的 CCSprite(shape)。 创建此 CCSprite(shape) 后,我将其添加到舞台并用我刚刚加载的场景替换 cocos2d 场景。
5.在主线程上,我使用 CCSprite(shape) -(void)draw 方法来渲染打开的 GL 内容。 在这里,我还从全局共享处理程序中获取纹理并绑定到打开的 GL 上下文。
这就是draw方法代码的样子。
CC_NODE_DRAW_SETUP();
//Here I get the texture that I created on the background thread and binds it to the GL_TEXTURE_2D
ccGLBindTexture2D( [[runing_session_data sharedSession] getTexture].name);
ccGLEnableVertexAttribs( kCCVertexAttribFlag_Position | kCCVertexAttribFlag_TexCoords | kCCVertexAttribFlag_Color);
glVertexAttribPointer(kCCVertexAttrib_Position, 2, GL_FLOAT, GL_FALSE, 0 , bC);
glVertexAttribPointer(kCCVertexAttrib_TexCoords, 2, GL_FLOAT, GL_FALSE, 0, bCC);
glDrawArrays(GL_TRIANGLES, beginReadVertsAt, endReadVertsAt);
当输出出现时,draw 方法可以正常工作。但这一切都是黑色的。质地已经 以某种方式删除。
如果有人可以回答,那会很有帮助,
谢谢。
【问题讨论】:
-
您确实需要提供更多信息,例如您的实际代码,但请确保将其减少到绝对必要。
标签: ios multithreading opengl cocos2d-iphone