以固定的时间间隔为单个图像加载两个纹理 – GLkit openglES

我使用下面的代码来加载对象的纹理。

- (void)ldText:(UIImage *)Image { glGenTextures(1, &texture); glBindTexture(GL_TEXTURE_2D, texture); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); CGImageRef cgImage = Image.CGImage; float Width = CGImageGetWidth(cgImage); float Height = CGImageGetHeight(cgImage); CFDataRef data = CGDataProviderCopyData(CGImageGetDataProvider(cgImage)); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, Width, Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, CFDataGetBytePtr(data)); } 

纹理得到正确映射。

我现在需要加载两个纹理。 纹理应该定期更换。 可能吗? 有人可以指导我如何从这里出发?

* 更新:我用Image2加载了另一个纹理,函数ldText2。 并在每个“更新视图”中进行更新。 现在我在同一个对象上得到两个纹理,每当调用“update”函数的时候就会发生变化。 每次调用“更新”function时,我都会交换纹理1和纹理2。 但问题是时间间隔! 我希望它发生缓慢。 如何为此设置一个时间间隔? *

默认情况下,GLKViewController提供了一个animation循环,它根据preferredFramesPerSecond属性调用更新。 (实际使用的速率在framesPerSecond属性中)。

您可以通过设置首选频率来获得一些控制权,但是如果您希望显示器保持静止超过几分之一秒,则更可能要closuresanimation循环。 为此,将paused属性设置为YES ,并覆盖resumeOnDidBecomeActive返回NO 。 然后,您需要确保在适当的时候在视图上调用display ,或者通过明确地执行,或者确保enableSetNeedsDisplay上的enableSetNeedsDisplay属性设置为YES ,并使视图无效。

如果由于其他原因想要保持animation循环活跃,那么Matic Oblak提出的使用延迟select器执行的build议可以应用于更改纹理,或设置标志以触发更新方法来更改纹理。