2

我正在处理的场景实际上如下:我需要获取 OpenGL 生成的屏幕并通过 HDMI 将其发送到 FPGA 组件,同时保持 alpha 通道。但是现在通过 HDMI 发送的数据只有 RGB(没有 alpha 通道的 24 位)所以我需要一种方法来强制通过这个端口发送 Alpha 位。

见图片:http: //i.imgur.com/hhlcbb9.jpg

我能想到的一种解决方案是将屏幕缓冲区从 RGBA 模式转换为 RGB,同时在 RGB 缓冲区中混合 Alpha 通道。

例如:

The original buffer: [R G B A][R G B A][R G B A]
The output i want: [R G B][A R G][B A R][G B A] 

重点是不必遍历每一个像素。但我不确定是否可以使用 OpenGL 或任何技术(VideoCore 内核?)

4

2 回答 2

1

opengl 帧缓冲区

您实际上是指framebuffer还是某种纹理?因为帧缓冲区无法调整大小,因此生成的图像的大小将比像素数大 25%。你实际上不能那样做。

你可以用纹理来做,但只能通过调整它的大小。您必须将 texel 数据glGetTexImage带入某个缓冲区,然后将 texel 数据上传到另一个带有glTexImage2D. 您只需适当地更改像素传输格式和纹理宽度。读取将使用GL_RGBA,写入将使用GL_RGB,内部格式为GL_RGB8.

这样的表现几乎肯定不会很好。但它应该工作

但是不,没有简单的调用可以导致这种情况发生。

于 2013-04-22T12:07:06.553 回答
1

您可以通过视频卡上的不同 rgb 或 hdmi 视频输出在 opengl 中单独发送 alpha 通道。因此,您的电脑现在通过一根电缆输出 RGB,然后通过另一根电缆输出 Alpha。您的 alpha 可能需要转换为灰度,以便它仍然是 24 位。然后您选择哪个信号是您的 fpga 中的关键。我假设您的 fpga 支持色度键。

我之前做过类似的事情,但使用了一个名为 Brainstorm 的程序,它使用支持 SDI 输出的特定视频卡,并将 RGB 和 Alpha 拆分为单独的视频通道(电缆),然后视觉混合器进行键控。

然而,今天,我创建了一个新的解决方案,它首先在 pc 上混合多个视频通道,然后将最终混合的视频直接输出到 RTMP 流服务器或 DVI 到 SDI 扫描转换器。

于 2015-11-19T11:43:59.923 回答