【问题标题】:OpenGL getting background pixels infoOpenGL获取背景像素信息
【发布时间】:2014-03-19 14:53:05
【问题描述】:

我有一个带有完全透明窗口的 OpenGL 应用程序,我需要根据背景在其中绘制像素透明度的图片。有什么方法可以获取位于我的透明窗口(如墙纸、桌面、另一个窗口等)下方的背景像素数据,以便我可以动态更改着色器中的像素?

现在我有这样的代码

 glEnable(GL_BLEND);
 glBlendFunc(GL_SRC_COLOR, GL_DST_COLOR);
 glClearColor(1.0, 0, 0, 1.0);
 glClear(GL_COLOR_BUFFER_BIT);
 [self.shader useShader];
 [self drawTriangle];

useShader 只是调用 glUseProgram 过程,而 drawTriangle 只是绘制一个测试三角形。

着色器是:

#version 120

void main()
{
    gl_FragColor = gl_SecondaryColor + vec4(0.0, 1.0, 0.0, 0.0);
}

所以如果我用 (1.0, 0, 0, 1.0) 清除窗口,我会得到预期的黄色三角形,但是当我切换到 (0, 0, 0, 0) 时,它会变成绿色。有没有办法获取底色数据?

【问题讨论】:

  • 这里有同样的问题。完全透明的背景就像黑色一样。

标签: windows macos cocoa opengl


【解决方案1】:

有什么方法可以获取透明窗口下方的背景像素数据

只有 OpenGL?不。事实上,您甚至无法在着色器中读回目标帧缓冲区像素。

您必须使用特定的操作函数来检索窗口下方的屏幕内容作为图像,将其加载到纹理中并将其传递给渲染。

【讨论】:

  • 这正是我的想法。感谢您的回复。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多