1

我正在更新基于旧固定管道 OpenGL 的 Mac OS 现有应用程序。(我猜是 OpenGL 2。)它使用 NSOpenGLView 和正射投影来创建动画万花筒,带有静止图像或来自连接的摄像机的输入。

它是在高清摄像机可用之前编写的(或者至少很容易)。它是为了期待来自 Quicktime (k422YpCbCr8CodecType) 的 YCBCR_422 视频帧而编写的,并将这些帧作为 GL_YCBCR_422_APPLE 传递给 OpenGL,以将它们映射到纹理。

我的公司决定是时候更新应用程序以支持新的高清摄像机了,我不知道如何继续。

我有相当多的 OpenGL 经验,但我的知识参差不齐,而且存在差距。

我正在使用委托方法 captureOutput:didOutputVideoFrame:withSampleBuffer:fromConnection 通过 QTCaptureDecompressedVideoOutput 从相机接收帧

我有一个用于测试的 Logitech c615,我得到的缓冲区被报告为 32 位 RGBA (GL_RGBA8) 格式。我相信它实际上是 ARGB 格式。

但是,根据 glTexImage2D 上的文档,唯一支持的输入像素格式是 GL_COLOR_INDEX、GL_RED、GL_GREEN、G​​L_BLUE、GL_ALPHA、GL_RGB、GL_BGR GL_RGBA、GL_BGRA、GL_LUMINANCE 或 GL_LUMINANCE_ALPHA。

我想添加一个片段着色器,当我将纹理映射到输出网格时,它会将纹理数据转换为 RGBA 格式。

自从编写这个应用程序以来,我已经从为 OpenGL ES 2 编写 iOS 应用程序中学习了着色器的基础知识,它根本不支持固定管道 OpenGL。

如果可以的话,我真的不想将应用程序重写为完全基于着色器。我想实现一个可选的片段着色器,当我需要它时,我可以用它来调整我的视频源的像素数据,但继续使用固定管道来管理我的投影矩阵和模型视图矩阵。

您如何将着色器添加到(否则固定的)渲染管道?

4

1 回答 1

0

我不想问这个,但你现在到底是什么问题?将着色器附加到固定功能管道并不难;您所需要的只是重新实现顶点和片段着色器正在取代的那一点点功能。您可以使用内置的 GLSL 变量(如 gl_ModelViewMatrix 等)来使用由旧版 OpenGL 代码设置的值;你可以在这里找到其中的一些:http ://www.hamed3d.org/Res/GLSL_Reference/0321552628_AppI.pdf

于 2013-10-21T17:45:55.750 回答