OpenGL像素缓冲区直接在Linux和Mac OSX屏幕上显示

我正在寻找一种方法来将像素缓冲区直接渲染到屏幕上。 我需要在OSX和Linux上都做到这一点,尽pipe我知道我可能需要通过不同的方法为每个操作系统做这件事(尽pipe跨平台库会很好。)你从哪里开始?

你总是可以使用四边形的正投影到你的后缓冲器/表面。

或者只需发送NDC空间中的四元组(-1到+1)而不需要任何矩阵乘法。

更新,因为这显然不够清楚:

对于“全屏四元”的方法,发送两个三或四个像这样:

在这里输入图像描述

垂直的配置/顺序取决于您的绕线顺序和原始模式。 Z值应该在-11之间。 你可以选择-1 。 投影和ModelView矩阵应该是一个单位矩阵(即全部为零,然后在主对角线上为1)

在这里输入图像描述

换句话说,你不需要做任何矩阵乘法,所以你实际上不需要在着色器中使用任何矩阵操作,因为坐标已经在标准化设备坐标(NDC)中。

即它在目标设备区间内被读取 在这里输入图像描述

这里是一些代码:

 glMatrixMode (GL_MODELVIEW); glPushMatrix (); glLoadIdentity (); glMatrixMode (GL_PROJECTION); glPushMatrix (); glLoadIdentity (); glBegin (GL_QUADS); glVertex3i (-1, -1, -1); glVertex3i (1, -1, -1); glVertex3i (1, 1, -1); glVertex3i (-1, 1, -1); glEnd (); glPopMatrix (); glMatrixMode (GL_MODELVIEW); glPopMatrix (); 

顶点着色器然后是像素/片段着色器的直接透视。 显然你可以将相关的像素/纹理缓冲区设置为着色器资源/变量,并在像素/片段着色器中对其进行采样。 并且不要忘记将顶点的texcoord UV设置为相应的纹理值( 0-1 )。

或者,您也可以使用相应的窗口系统将纹理直接涂抹到窗口表面。 这很大程度上取决于您正在使用的窗口管理(例如SDL),也可能需要某种纹理格式/布局才能工作(或转换)。