Appuim环境搭建 Morecoin NTFS权限 pmp培训视频 db2从入门到精通 xcode打包 mac上传文件到linux pcie高速固态硬盘 python开发安卓应用 matlab区分大小写吗 bootstrap居中对齐 python中pop函数 python中不等于 python函数返回 java的输入 java实现队列 java定义字符串 java文件输入输出 俄罗斯方块c语言代码 java电子书 网络工程师教程 快打旋风3出招表 js关闭当前页面 小米手环充电多久 流程图工具 wmiprvse是什么进程 jsp源码 sqlprompt dota2控制台 ssh框架原理及流程 vue动态路由 ps尺子的快捷键 ps错误16 cad圆形变成多边形 标记宏 送货单软件 ps怎么取色 cad遮罩 ps怎么设计艺术字 粗圆字体下载
当前位置: 首页 > 学习教程  > 编程语言

c# – 强制硬件加速渲染

2020/8/31 13:16:23 文章标签:

c# – 强制硬件加速渲染

发布时间:2019-05-30 发布网站:编程之家

编程之家收集整理的这篇文章主要介绍了c# – 强制硬件加速渲染,编程之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我有一个用C编写的OpenGL库,它使用C#应用程序使用C/C++LI适配器.我的问题是,如果将应用程序用于使用Nvidia Optimus技术的笔记本电脑,该应用程序将不会使用硬件加速并失败.

我试图使用在Nvidias文档http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf中找到的信息
关于将libs链接到我的C -dll,并从我的OpenGL库导出NvOptimusEnablement但是失败.
我想我不得不与.exe连接到.exe的.exe文件

对于我们来说,使用配置文件不是一个好选择,因为我们需要确保使用nvidia硬件.

有没有一些C#应用程序可以强制Optimus使用Nvidia芯片组而不是集成的英特尔芯片组?

解决方法

如果您的软件在Intel上失败,那么您将无法在50%的笔记本电脑上运行它.所以我建议修改这个.

不如说,您可以通过代码完美地创建配置文件.只需使用NvAPI.
这个代码完全是这样的,但要小心,你可能不应该混淆全局配置文件并创建自己的代码:


 
  1. NvAPI_Status status;
  2. // (0) Initialize NVAPI. This must be done first of all
  3. status = NvAPI_Initialize();
  4. if (status != NVAPI_OK)
  5. PrintError(status,__LINE__);
  6. // (1) Create the session handle to access driver settings
  7. NvDRSSessionHandle hSession = 0;
  8. status = NvAPI_DRS_CreateSession(&hSession);
  9. if (status != NVAPI_OK)
  10. PrintError(status,__LINE__);
  11. // (2) load all the system settings into the session
  12. status = NvAPI_DRS_LoadSettings(hSession);
  13. if (status != NVAPI_OK)
  14. PrintError(status,__LINE__);
  15. // (3) Obtain the Base profile. Any setting needs to be inside
  16. // a profile,putting a setting on the Base Profile enforces it
  17. // for all the processes on the system
  18. NvDRSProfileHandle hProfile = 0;
  19. status = NvAPI_DRS_GetBaseProfile(hSession,&hProfile);
  20. if (status != NVAPI_OK)
  21. PrintError(status,__LINE__);
  22.  
  23.  
  24. NVDRS_SETTING drsSetting1 = {0};
  25. drsSetting1.version = NVDRS_SETTING_VER;
  26. drsSetting1.settingId = SHIM_MCCOMPAT_ID;
  27. drsSetting1.settingType = NVDRS_DWORD_TYPE;
  28.  
  29. NVDRS_SETTING drsSetting2 = {0};
  30. drsSetting2.version = NVDRS_SETTING_VER;
  31. drsSetting2.settingId = SHIM_RENDERING_MODE_ID;
  32. drsSetting2.settingType = NVDRS_DWORD_TYPE;
  33.  
  34. NVDRS_SETTING drsSetting3 = {0};
  35. drsSetting3.version = NVDRS_SETTING_VER;
  36. drsSetting3.settingId = SHIM_RENDERING_OPTIONS_ID;
  37. drsSetting3.settingType = NVDRS_DWORD_TYPE;
  38.  
  39. if( ForceIntegrated ){
  40. drsSetting1.u32CurrentValue = SHIM_MCCOMPAT_INTEGRATED;
  41. drsSetting2.u32CurrentValue = SHIM_RENDERING_MODE_INTEGRATED;
  42. drsSetting3.u32CurrentValue = SHIM_RENDERING_OPTIONS_DEFAULT_RENDERING_MODE | SHIM_RENDERING_OPTIONS_IGPU_TRANSCODING;
  43. }else{
  44. drsSetting1.u32CurrentValue = SHIM_MCCOMPAT_ENABLE;
  45. drsSetting2.u32CurrentValue = SHIM_RENDERING_MODE_ENABLE;
  46. drsSetting3.u32CurrentValue = SHIM_RENDERING_OPTIONS_DEFAULT_RENDERING_MODE;
  47. }
  48.  
  49.  
  50.  
  51. status = NvAPI_DRS_SetSetting(hSession,hProfile,&drsSetting1);
  52. if (status != NVAPI_OK)
  53. PrintError(status,__LINE__);
  54.  
  55. status = NvAPI_DRS_SetSetting(hSession,&drsSetting2);
  56. if (status != NVAPI_OK)
  57. PrintError(status,&drsSetting3);
  58. if (status != NVAPI_OK)
  59. PrintError(status,__LINE__);
  60.  
  61. // (5) Now we apply (or save) our changes to the system
  62. status = NvAPI_DRS_SaveSettings(hSession);
  63. if (status != NVAPI_OK)
  64. PrintError(status,__LINE__);
  65. // (6) We clean up. This is analogous to doing a free()
  66. NvAPI_DRS_DestroySession(hSession);
  67. hSession = 0;

在启动时,测试您的个人资料是否存在.如果没有,创建它(你可能也必须重新启动自己).
NvAPI是一个静态库,并且将在非NVIDIA硬件上正常返回错误代码,因此您可以安全地发货.

编辑:看起来有一个更简单的方法.来自GLFW 3源代码:


 
  1. // Applications exporting this symbol with this value will be automatically
  2. // directed to the high-performance GPU on nVidia Optimus systems
  3. //
  4. GLFWAPI DWORD NvOptimusEnablement = 0x00000001;

总结

以上是编程之家为你收集整理的c# – 强制硬件加速渲染全部内容,希望文章能够帮你解决c# – 强制硬件加速渲染所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您喜欢交流学习经验,点击链接加入编程之家官方QQ群:1065694478

本文链接: http://www.dtmao.cc/news_show_150065.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?