Iphone 使用GLKit按需加载纹理

Iphone 使用GLKit按需加载纹理,iphone,objective-c,opengl-es,opengl-es-2.0,glkit,Iphone,Objective C,Opengl Es,Opengl Es 2.0,Glkit,我有一个应用程序,其中我需要使用OpenGL纹理在屏幕上绘制文本。在渲染循环中,我从TextureControl请求纹理,它具有以下功能 - (GLuint)textureForImageNamed:(NSString*)fileName; { // we're checking a hash.. possibly slow NSNumber* textureHandle = [textures objectForKey:fileName]; if(!textureH

我有一个应用程序,其中我需要使用OpenGL纹理在屏幕上绘制文本。在渲染循环中,我从TextureControl请求纹理,它具有以下功能

- (GLuint)textureForImageNamed:(NSString*)fileName;
{
    // we're checking a hash.. possibly slow
    NSNumber* textureHandle = [textures objectForKey:fileName]; 

    if(!textureHandle)
        textureHandle = [self loadTexture:fileName];

    GLuint handle = (GLuint)[textureHandle unsignedIntValue];

    return handle;
}
其中loadTexture将纹理加载到内存中,如下所示

- (NSNumber*)loadTexture:(NSString*)fileName
{
    GLuint texID = [GLKTextureLoader textureWithCGImage:
                    [[UIImage imageNamed:@"star.png"] CGImage] 
                                                options:nil 
                                                  error:nil].name;
    NSNumber* num = [NSNumber numberWithUnsignedInt:texID];
    [textures setObject:num forKey:fileName];

    return num;
}
和类似的文本功能:

- (GLuint)textureForTextWithString:(NSString*)text;
- (NSNumber*)loadTextureForString:(NSString*)text;
当我在渲染循环之前请求过一次图像时,这一切都很好,但关键是需要绘制的文本和图像事先不知道。因此,我希望能够调用textureForTextWithString:@fooBar,如果以前加载过纹理,则将其提供给我,或者将其加载到-将其添加到字典中,然后将其提供给我。但是,对于所有未预加载的纹理,我都会得到一个黑色纹理,即在开始渲染循环之前没有调用textureForTextWithString:@fooBar的纹理

渲染循环中的相关代码:

GLuint secondTex = [textures textureForTextWithString:@"NO"];    
glBindTexture(GL_TEXTURE_2D, secondTex);
glBindBuffer(GL_ARRAY_BUFFER, some_vertex_buffer);
glDrawArrays(GL_POINTS, 0, num);
我正在寻找一个解决方案,或者更好的——关于如何更好地处理这个特殊问题的建议

编辑:此处可以找到两个有问题的文件:

-主要的openglvc -纹理控制器