I’m trying to use c# with NVAPI to activate/deactivate stereo 3D but am unable to successfully create a device. Is the delegate not properly defined or am I missing something else? I’ve posted a portion of the source code below:
public delegate NvAPI_Status NvAPI_D3D11_CreateDeviceDelegate(ref IDXGIAdapter pAdapter,
D3D_DRIVER_TYPE DriverType,
HModule Software,
uint Flags,
ref D3D_FEATURE_LEVEL[] pFeatureLevels,
uint FeatureLevels,
uint SDKVersion,
ref IntPtr ppDevice,
ref IntPtr pFeatureLevel,
ref IntPtr ppImmediateContext,
ref IntPtr pSupportedLevel);
public static readonly NvAPI_D3D11_CreateDeviceDelegate NvAPI_D3D11_CreateDevice;
static Nvapi()
{
IntPtr lib = LoadLibrary(GetDllName());
if (lib != IntPtr.Zero)
{
nvapi_QueryInterface = GetDelegateOfFunction<nvapi_QueryInterfaceDelegate>(lib, "nvapi_QueryInterface");
if (nvapi_QueryInterface != null)
{
GetDelegate(0x0150E828, out NvAPI_Initialize);
if (NvAPI_Initialize() == NvAPI_Status.NVAPI_OK)
{
GetDelegate(0xF6A1AD68, out NvAPI_Stereo_Activate);
GetDelegate(0x1FB0BC30, out NvAPI_Stereo_IsActivated);
GetDelegate(0x2D68DE96, out NvAPI_Stereo_Deactivate);
GetDelegate(0x6A16D3A0, out NvAPI_D3D11_CreateDevice);
GetDelegate(0xBB939EE5, out NvAPI_D3D11_CreateDeviceAndSwapChain);
GetDelegate(0xAC7E37F4, out NvAPI_Stereo_CreateHandleFromIUnknown);
}
}
}
}
static IntPtr GetD3D11Device()
{
IDXGIAdapter pAdapter = new IDXGIAdapter();
HModule hModule = new HModule();
IntPtr ppDevice = new IntPtr();
D3D_FEATURE_LEVEL[] FeatureLevelsRequested = new[] {
D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_10_0,
D3D_FEATURE_LEVEL.D3D_FEATURE_LEVEL_9_1 };
IntPtr pFeatureLevel = new IntPtr();
IntPtr ppImmediateContext = new IntPtr();
IntPtr pSupportedLevel = new IntPtr();
NvAPI_Status status = NvAPI_D3D11_CreateDevice(ref pAdapter,
D3D_DRIVER_TYPE.D3D_DRIVER_TYPE_UNKNOWN,
hModule,
0,
ref FeatureLevelsRequested,
0,
1,
ref ppDevice,
ref pFeatureLevel,
ref ppImmediateContext,
ref pSupportedLevel);
Debug.Print("GetD3D11Device: " + status);
return ppDevice;
}
static StereoHandle GetStereoHandle()
{
StereoHandle stereoHandle = new StereoHandle();
IntPtr pDevice = GetD3D11Device();
NvAPI_Status status = NvAPI_Stereo_CreateHandleFromIUnknown(ref pDevice, out stereoHandle);
Debug.Print("GetStereoHandle: " + status);
return stereoHandle;
}