你如何防止Nvidia的3D Vision被踢入? (如何从.NET调用NVAPI)

时间:2012-08-14 15:58:04

标签: vb.net 3d directx nvidia

我通常会在nvidia的开发者论坛上发布这个帖子,但是他们在上个月的黑客攻击中仍处于脱机状态。如果有人知道这些类型的问题的另一个好社区我很想知道他们。

我正在开发一些旨在测试人类视觉的软件。现在我有两个测试,一个使用nvidia的3D视觉v.2眼镜呈现立体图像,另一个测试在屏幕上显示字母,类似于你在眼科医生检查室看到的图表。我的问题是在“图表测试”期间3D视觉被触发并导致屏幕看起来暗淡。我可以在运行不同的测试之间通过nvidia控制面板启用和禁用3D视觉,但这是一个不那么优雅的解决方案。我正在使用DX9和Visual Basic来开发我的代码。为了在立体测试中触发3D,我使用的是描述为here的NV_STEREO_IMAGE_SIGNATURE方法。基本上,该方法包括制作一个两倍于屏幕宽度的后备缓冲加上一个额外的像素数据列,在中间插入一个特殊的签名,告诉视频卡它是一个立体声图像,后半部分的后备缓冲应该是显示在左眼,右半部分显示在右眼。我没有在我的代码中为“图表测试”做任何操作但是3D Vision仍然被触发,我无法弄清楚原因。有没有办法让视频卡暂时禁用代码中的3d Vision功能?

由于

1 个答案:

答案 0 :(得分:1)

我想我可能已经找到了解决自己问题的方法。 Nvidia提供了一个名为NVAPI的库,可以静态加载,并包含NVAPI_STEREO_ENABLE和NVAPI_STEREO_DISABLE等调用。可以在here找到NVAPI的下载和信息。当我完成解决方案时,我将使用实际代码的示例编辑此帖子。

编辑: 因为C#/ Visual Basic不允许静态加载.lib文件,所以我必须创建一个Visual C ++来包装NVAPI.lib文件。在引用lib文件并将include头文件添加到我的包装器项目后,我编写了以下代码。

#include "stdafx.h"
#include "nvapi.h"

public ref class NvApiWrapper
{   
public: 
    static bool NvApiWrapper_Initialize(){
    if (NvAPI_Initialize() == 0){
        return true;
    } else {
        return false;
    }
    }

    static bool NvApiWrapper_Stereo_Enable(){
    if (NvAPI_Stereo_Enable() == 0){
        return true;
    } else {
        return false;
    }
    }

    static bool NvApiWrapper_Stereo_Disable(){
    if (NvAPI_Stereo_Disable() == 0){
        return true;
    } else {
        return false;
    }
    }
};

我只对这两种立体声方法感兴趣,所以我没有添加任何其他内容,但有很多有趣的方法可以调用。您必须在任何其他调用之前调用NvAPI_Initialize()。