ios – 如何使用2D纹理将RGB位图呈现到GLKView中?

我有一个内存“位图”,它只是一个包含像素数据的简单RGB格式的字节*数组(因此字节数组的大小是3 *像素数).

我的应用程序只是一个具有GLKView实例的视图控制器.我已经执行了这样的代表:

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
    glClearColor(1.0f,0.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT);
}

并且如预期的那样设置GLKView的背景颜色.

我现在想做的是为glkView的这个实现添加代码:drawInRect:使我的“位图”被渲染到这个GLKView中.但我似乎找不到任何方式做这个简单的事情;我对OpenGL可以做的所有不同的事情感到不安,所有这些都比我在这里做的更复杂.

glreadPixels似乎是我在这里之后,因为它似乎提供了一个指向缓冲区数据的指针.

编辑:显然这只能通过使用纹理来实现.我试图用这个示例代码实现这一点(请注意,我的“位图”这里是每个样本4个字节,与格式参数匹配):

- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {

    glClearColor(1.0f,1.0f);
    glClear(GL_COLOR_BUFFER_BIT);

    // raw data
    int width = 30;
    int height = 30;
    int pixelCount = width * height;
    int byteSize = pixelCount * 4;
    glubyte *textureData = (glubyte *)malloc(byteSize);

    for (int i = 0; i < byteSize; i++) {
        textureData[i] = 255; // white
    }

    glEnable(GL_TEXTURE_2D);

    gluint textureID;
    glPixelStorei(GL_UNPACK_ALIGNMENT,1);
    glGenTextures(1,&textureID);
    glBindTexture(GL_TEXTURE_2D,textureID);

    glTexImage2D(GL_TEXTURE_2D,GL_RGBA,width,height,GL_UNSIGNED_BYTE,textureData);

    free(textureData);

}

…但它不工作glClear()调用按预期工作,并将整个背景设置为红色;但是如果我正确地了解纹理样本,下面的代码应该在角落里画一个30×30的白色方块,但是我得到的就是坚实的红色背景.

有人会发现我在这里做错了吗?

解决方法

对不起,推入OpenGL

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...