C++ OpenGL硬件覆盖

C++ OpenGL硬件覆盖,c++,qt,opengl,overlay,hardware,C++,Qt,Opengl,Overlay,Hardware,如何在Qt5.1中创建硬件覆盖 这就是我到目前为止所做的: QGLFormat fmt; fmt.setSamples(16); fmt.setOverlay(true); MainWidget w(fmt); w.show(); //////////////////////////////////////////////////////////////////////////////// MainWidget::MainWidget(const QGLFormat &format

如何在Qt5.1中创建硬件覆盖

这就是我到目前为止所做的:

QGLFormat fmt;
fmt.setSamples(16);
fmt.setOverlay(true);

MainWidget w(fmt);
w.show();

////////////////////////////////////////////////////////////////////////////////

MainWidget::MainWidget(const QGLFormat &format, QWidget *parent)
: QGLWidget(format, parent)
{
    qDebug() << format().hasOverlay() ?
            "Hardware overlay is supported" : "No hardware overlay support";
    qDebug() << "OpenGL " +
        QString::number(this->format().majorVersion()) + "." +
        QString::number(this->format().minorVersion());
}
qglfmt格式;
模板设置样本(16);
fmt.setOverlay(真);
mainw(fmt);
w、 show();
////////////////////////////////////////////////////////////////////////////////
MainWidget::MainWidget(常量QGLFormat&format,QWidget*父项)
:QGLWidget(格式,父级)
{
qDebug()格式().minorVersion());
}
但它总是返回false:(
OpenGL版本是4.3

视频卡是GeForce GT 650M

硬件覆盖不是标准功能。没有消费级GPU支持它们(他们的硬件可以,但驱动程序不支持)。您需要Quadro或FireGL GPU才能提供硬件覆盖。

有没有办法修补我的显卡驱动程序以使覆盖平面正常工作?@Sh1ne:理论上是的。事实上,很久以前,您就可以在GeForce2.BT;DT上修补驱动程序以提供Quadro2功能。但是,对于今天的GPU,我不知道有什么修补程序可以做到这一点。但是你需要硬件覆盖到底是为了什么?难道你不能简单地渲染到两个FBO,然后在交换缓冲之前彼此合成吗?我需要硬件覆盖以防止任何其他程序能够拍摄我的屏幕截图/视频program@Sh1ne:试图阻止其他程序截取您的程序内容的屏幕截图是徒劳的;t这里总是有一种方法。OpenGL硬件覆盖不会让屏幕截图工具“消失”:在现代操作系统中,用户可见的图形是合成的,这意味着,程序渲染的所有内容都合并到一个帧缓冲区中(包括硬件覆盖)并由操作系统与所有其他窗口在一张图片中合成。现代屏幕截图工具利用该合成过程。@Sh1ne:FRAPS等屏幕截图工具使用DLL注入连接到每个程序的渲染过程中,并从源位置提取图像。远程可视化服务器软件利用GPU的屏幕缓冲区。最后但并非只有DVI/HDMI捕获设备可以简单地捕获从电线到屏幕的信号。就我个人而言,我正在使用这种设备制作屏幕广播和教程,因为它是入侵性最小的设备,并且不消耗系统资源。