我想在 iOS 设备上渲染 yuv 图像。我认为它可以使用openGL来实现。(其实我得连续渲染多个这样的图像)
我的理解是 GLKit 是 iOS 创建的一个抽象,其中有一个GLKView
将拥有并处理渲染缓冲区。我目前正在尝试使用 aGLKViewController
并且帧更新正在以所需的 fps 成功完成。我通过使用glClear
函数调用来遵守这一点。
现在的任务是在视图上渲染图像。
有一个类GLKBaseEffect
将具有基本着色器。我不知道要设置哪些属性,所以我只是创建它并prepareToDraw
在每次渲染之前调用。
有一个用于处理纹理的类GLKTextureLoader
,但在我看来它只适用于 Quartz 图像,即无法使用此类将 yuv420 平面加载到纹理中。
// create the texture
GLuint texture;
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_2D, texture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, [imageNSData bytes]);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0);
我使用此代码生成纹理并绑定它,但我真的不知道我在这里要做什么。不管它是什么,它都不会在屏幕上显示任何图像,我不知道下一步该做什么。
我没有创建任何着色器,假设 baseEffect 会有一些东西。
而这个https://developer.apple.com/library/ios/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/WorkingwithEAGLContexts/WorkingwithEAGLContexts.html#//apple_ref/doc/uid/TP40008793-CH103-SW8告诉我我会有使用 EAGLayer 在屏幕上渲染图像。
我可以使用 GLKit 来渲染图像吗?如果是,我们是否有任何不使用GLKTextureLoader
类的示例代码或教程(我找不到)?如果否,是否有类似的渲染使用教程EAGLLayer
(我到目前为止还没有探索过)?