我正在处理的场景实际上如下:我需要获取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内核?)
答案 0 :(得分:1)
opengl帧缓冲区
你真的是指 framebuffer ,还是某种纹理?因为无法调整帧缓冲区的大小,并且此结果图像的大小将更大,像素数减少25%。你实际上不能这样做。
你可以用纹理来做,但只能通过调整大小来实现。您必须将glGetTexImage
的texel数据放入某个缓冲区,然后将纹素数据上传到另一个glTexImage2D
的纹理。您只需适当更改pixel transfer format和纹理宽度即可。阅读将使用GL_RGBA
,写入将使用GL_RGB
,内部格式为GL_RGB8
。
性能几乎肯定不会很好。但它应该工作。
但不,没有简单的电话可以让你发生这种情况。
答案 1 :(得分:1)
您可以通过视频卡上不同的rgb或hdmi视频输出在opengl中单独发送Alpha通道。 所以你的电脑现在输出RGB一根电缆,然后Alpha输出另一根电缆。你的alpha可能需要转换为灰度,这样它仍然是24位。 然后选择哪个信号是fpga中的键。 我假设你的fpga支持色度键。
之前我做过类似的事情但是使用了一个名为Brainstorm的程序,该程序使用支持SDI的特定视频卡,它将RGB和Alpha分成单独的视频通道(电缆),然后视觉混合器进行键控
然而,今天,我创建了一个新的解决方案,首先在PC上混合多个视频通道,然后将最终的混合视频直接输出到RTMP流媒体服务器或DVI到SDI扫描转换器。