问题标签 [optimus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
11444 浏览

opengl - 如何检查带有 optirun 的 linux 系统上支持哪个版本的 OpenGL?

我在设置笔记本电脑以进行 OpenGL 编程/运行 OpenGL 程序时遇到了很多问题/困惑。

我的笔记本电脑有一个非常聪明(对我来说太聪明)的设计,其中英特尔 CPU 有一个芯片上的图形处理器,还有一个专用的显卡。具体来说,CPU 是 3630QM,带有“HD Graphics 4000”(我敢肯定,这是一个非常令人兴奋的名字),而“合适的”图形处理器是 Nvidia GTX 670MX。

从理论上讲,根据Wikipedia,如果安装了正确的驱动程序,Linux 下的 HD Graphics Chip (Intel) 支持 OpenGL 3.1。(他们可能不是。)

根据NVIDIA的说法,670MX 可以支持 OpenGL 4.1,所以理想情况下我想在这个 GPU 上开发和执行。

我是否安装了驱动程序以使我能够在 NVIDIA GPU 上执行 OpenGL 4.1 代码?答:可能没有,目前我使用这个“optirun”东西在专用 GPU 上执行 OpenGL 程序。请参阅此链接以查看我设置计算机所遵循的过程。

我的问题是,我知道如何在 670MX 上运行已编译的程序;那将是'optirun ./programname',但我如何才能找出我系统上安装的图形驱动程序将支持的OpenGL版本?运行'glxinfo | 终端中的 grep -i opengl' 告诉我英特尔芯片支持 OpenGl 3.0 版。请参阅以下信息:

我如何做相同或类似的事情来找出“optirun”下可用的支持,以及支持的 OpenGL 版本?

更新

有人建议我使用 glGetString() 来查找此信息:我现在完全糊涂了!没有 optirun,支持的 OpenGL 版本是 '3.0 MESA 9.1.3',所以版本 3,这是我的预期。但是,在optirun下,支持的OpenGL版本是'4.3.0 NVIDIA 313.30',所以版本是4.3?!如果 NVIDIA 的硬件规范声明仅支持 4.1 版,它怎么可能是 4.3 版?

0 投票
1 回答
909 浏览

opengl - OpenGL 3.3 两个 GPU 上的两个不同结果 nVidia Optimus 与阴影映射

因此,我正在使用 C++ 开发一个项目(在未来学习和创建游戏),而对于渲染,我选择了 OpenGL 3.3。我一直在研究我的处理器中内置的 Intel HD 4000,因为它会打开默认的新应用程序,一切都很顺利。但后来我尝试在我的第二个 GPU - nVidia GTX660m 上打开它,它要快得多,而且我预计它会有更多的 FPS。但是不,不仅我有几十个错误(例如 - 如果我在片段着色器中将 vec3 作为颜色输出,英特尔就可以了,但如果我没有输出 vec4,nVidia 就会完全疯狂的风格......)。当然编译时没有任何错误,所以它很难修复......

但是现在,当我解决了大部分问题时,我正在努力解决一个我无法按照我的意愿解决的问题(可能有一些肮脏的方法,但是......这不是重点)。

简而言之:我在两个 GPU 上生成有效深度图,但在 nVidia GPU 上它不是灰度的,bur red-to-black scale这非常奇怪,因为同一台机器上的相同代码(几乎)应该运行相同(也相同的 API!)。由于这个事实,我的片段着色器可能没有赶上它,并且在 nVidia 上没有检测到被照亮的区域并且它完全黑暗(至少在聚光灯下,定向光不起作用)。

图片: 使用 Intel HD4000 时的图像(来自我的 i5 ivy-bridge cpu) 从 RMB 菜单运行应用程序时使用 nVidia GTX660m 时的图像。 没有柔和的阴影

重要 - 请注意 GTX660m 上的深度图是 redToBlack 比例,而不是像 Intel GPU 上的灰度。顶部的一个来自定向光,底部的一个当然来自点光源。

我的 FragmentShader:#version 330 核心

第一部分用于定向光 - 我在 5 个点中预采样深度图,如果所有点都相同,我不会进行更多采样(早期保释 - 很多性能优化!),或者如果有些不同,我会全部采样并计算当前片段上的阴影强度.

第二部分是简单地从点光深度图采样,然后我检查到光线中心的距离以模拟手电筒效果(中心更强)。

我认为不需要更多,但如果需要,请写,我会发布所需的代码。

还 - 阴影贴图只有 16 位精度(GL_DEPTH_COMPONENT16)英特尔 HD4000 比我的 GTX660m 更快(它更强大) - 这很奇怪。虽然我认为这是因为我不画任何高多边形,只是很多非常低的多边形。我对么?

0 投票
1 回答
89 浏览

android - 纵向模式下的 LG Optimus 3D 效果

我正在开发 LG Optimus 3D 移动平台,在我看来,我可以在横向模式下体验三维的深度,但在手机处于纵向时效果完全消失。有没有人有任何建议如何在肖像模式下也能做到这一点?

0 投票
1 回答
3909 浏览

opengl - NVIDIA Optimus 卡在 OpenGL 下不切换

当我使用 "glGetString(GL_VERSION)" 和 "glGetString(GL_SHADING_LANGUAGE_VERSION)" 在我的计算机上检查 OpenGL 版本时,我得到了以下信息:

3.1.0 - 为 GL_VERSION 构建 8.15.10.2538

1.40 - Intel Build 8.15.10.2538 for GL_SHADING_LANGUAGE_VERSION

当我运行“Geeks3D GPU Caps Viewer”时,它显示我的显卡(NVS 4200M)的 OpenGL 版本是

GL_VERSION:4.3.0

GLSL 版本:4.30 NVIDIA 通过 Cg 编译器

这是否意味着我的显卡只支持部分 OpenGL 4.3.0 功能,无法创建 4.3 上下文?

0 投票
1 回答
793 浏览

c - OpenGL 2 和 Primusrun 在单个缓冲区上无显示(透明窗口)

我正在尝试制作一个极简的 OpenGL 程序,以便通过 Bumblebee(擎天柱)在我的英特尔芯片组(Mesa)和 NVIDIA 卡上运行。

我的源代码(使用 FreeGLUT):

./a.out当我在英特尔芯片组上直接启动程序 ( ) 时,一切正常。我没有机会primusrun ./a.out显示透明窗口:

它不是真正透明的,即使我移动窗口,后面的图像也会保留。

有趣的是,当我更改为双色缓冲区(使用GLUT_DOUBLE而不是GLUT_SINGLE,而glutSwapBuffers()不是glFush())时,这在 Intel 和primusrun.

这是我的:http glxinfo: //pastebin.com/9DADif6X
和我的:http primusrun glxinfo: //pastebin.com/YCHJuWAA

我做错了还是与 Bumblebee 相关的错误?

0 投票
0 回答
1632 浏览

linux - 无法为 Optimus/Bumblebee 配置安装 NVIDIA 显卡驱动程序

我已按照以下步骤在我全新的笔记本电脑(基于 msi 准系统 MS-16GC)上的 Fedora 20(全新基本安装)上运行 Optimus/Bumblebee 配置。

我列出了所有步骤,与此链接非常相​​似

最终结果是 x 无法启动,我可以启动到终端。我觉得我被困在最后一步,请帮助:

这些是我采取的步骤

1) 我的 BIOS 不支持打开/关闭 nvidia 卡 2) Fedora 20 是从 live cd 安装的 - 内核/软件更新 - 安装了 kernel-devel 和 kernel-headers,以及 gcc-c++ 和 lshw。NVIDIA 显示驱动程序版本 331.20 已下载,但尚未安装。3) 后续当前内核:3.11.10-301.fc20.x86_64 4) lspci 给出两个感兴趣的设备

00:02.0 VGA 兼容控制器:英特尔公司第 4 代核心处理器集成图形控制器(rev 06) 01:00.0 3D 控制器:NVIDIA Corporation GK106M [GeForce GTX 765M](rev a1)

lshw 显示 NVIDIA 卡使用 nouveau

准备驱动 NVIDIA 驱动安装

5) blacklist nouveau,通过在 /etc/modprobe.d/ 中使用 blacklist nouveau 行创建文件 blacklist.conf

重启

mv /boot/initramfs-$(uname -r).img /boot/initramfs-$(uname -r)-nouveau.img dracut /boot/initramfs-$(uname -r).img $(uname -r)

重启

在 /etc/default/grub 我将 rdblacklist=nouveau 添加到 GRUB_CMDLINE_LINUX 然后是 grub2-mkconfig > /boot/grub2/grub.cfg 命令

重新启动计算机(只是为了确定)

lshw 现在输出以下内容 - 没有禁用 nouveau 的迹象 - 设备未声明。

6)接下来,我在我的主目录中创建一个名为 .xinitrc 的文件,其中包含以下几行

7) 然后我在 /etc/X11 中创建一个名为 xorg.conf2 的文件,其中包含以下数据

8) 是时候安装驱动了

/* 我卡在这里 */

输入 chmod +x NVIDIA* 然后 ./NVIDIA*

接下来我将 xorg.conf2 移动到 xorg.conf

这安装得很好,但是当我从命令行键入 startx 时,我得到的只是黑屏。

0 投票
0 回答
417 浏览

glsl - OpenGL shadow mapping weirdness with uniform array

I was trying to run a little game/demo written by a friend of mine for mostly educational purposes, Land of Dreams. I noticed some extremely strange behaviour on my computer, even though the application was reportedly run successfully on several nVidia and ATI GPUs with relatively recent drivers.

The fragment shader is similar to the following:

Of course, the real fragment shader is more complicated, but Visibility() is where the problems lie.

In particular, the following artefacts occur when multiple objects cast shadows to the same fragment.

discolored shadows

In this case, the if (visibility <= 0.0) early return is in effect, which is a bit unconventional, but I believe it is valid GLSL.

While experimenting a bit, we managed to remove the artefacts by removing the early return and replacing the last line of Visibility() with

Now, an even stranger thing happened: one less shadows were cast then before. In fact, we managed to bring back the shadow by replacing the outer loop with

Of course, this does no make any sense at all! The uniform array of matrices was filled with data with the exactly same code as before, so there should not be any difference. Indexing a uniform array with negative indices is just plain invalid, anyway.

By adding the following statements to where the early return was, the indices came back to normal:

Of course, the branch above is effectively a no-op, since visibility starts from 1.0 and is always decreased in the loop. The fragment shader behaves the same way with #pragma optimize(off), i.e. the bogus branch is needed for proper operation.

The artefacts are only produced on my machine, with the following GPU and driver (relevant lines taken from glxinfo):

The server glx is VirtualGL, because I am using Bumblebee/Primus to render with my Optimus graphics card. I run Arch Linux with the 3.11.6 kernel.

Could someone shed some light on what is going one? I tried different nVidia driver versions with the same results, so I think it is improbable that we are facing with a driver bug. What is wrong with the fragment shader above?

UPDATE: I realized the versions of the fragment shader with branches in the inner loop are examples of non-uniform control flow:

If the accessed texture uses mipmapping or anisotropic filtering of any kind, then any texture function that is not "Lod" or "Grad" will retrieve undefined results.

Because our shadow maps use no mip-mapping or texture filtering, I don't think this would apply. What fixes the broken indices is putting back the branch, so maybe we are triggering some driver behaviour connected to non-uniform control flow here?

0 投票
1 回答
771 浏览

opengl - OpenGL glfwOpenWindow Doesn't work on Optimus video card

I have a Geforce GT 540M, my laptop uses Optimus so it will 'switch' between the Intel GPU and the Geforce GPU depending on the applications/settings etc.

As far as I can tell on the line to open a window, it returns false:

The system command was just to confirm the error message I received.

Is there a way to force the compiler to recognize my graphics card? My assumption is that it can only spot my Intel gpu.

0 投票
1 回答
693 浏览

java - 在 Java/OpenGL 下激活 nVIDIA Optimus?

我知道它已经被问了好几次没有明确的答案,我已经向 nVIDIA 提交了一个错误。但是,我仍在寻找比在 Prism-D3D 引擎中启动 JavaFX 更好的解决方法(它立即允许通过 nVIDIA 创建后续的 OpenGL 上下文)。

环境:

  • nVIDIA 860m,驱动337.88、340.43、340.66(四驱驱动)
  • Java 8u11(也测试了 x86/x64 和 Java 7)

测试失败:

  • 英伟达简介
  • NvOptimusEnablement(用 C 编写的自定义启动器)
  • 首先调用 OpenCL(用 C 编写的自定义启动器)
  • 首先调用 Cuda(JCuda,它实际上显示 nVIDIA 名称但 OpenGL 不受影响)

失败的 API:

解决方法:

  • JavaFX8 D3D 管道。D3D 初始化工作后创建的所有 GLContext。

我将问题归结为一个非常简单的示例,调用realtech-vr OpenGL 扩展查看器(用 .NET 编写)。里面有一个原生的“infogl.dll”,它读取 GL 信息,显然在 oevClientInitialize 之后立即激活 Optimus。

奇怪的是,调用 infogl.dll 的最简单的控制台程序可以工作:

但是 JNA 编写的 Java 代码却没有

它与可执行文件名“java”无关——我试过了。

JavaFX D3D 解决方案不合适,因为它在 AMD Radeon 芯片上将 OpenGL FPS 降低了一半——我认为在 nVIDIA 芯片上一定也一样糟糕,这就是为什么我试图让它与 ES2 管道一起工作。

0 投票
1 回答
920 浏览

styles - 发布 Umbraco 站点,捆绑包不起作用

我有一个用 Umbraco 制作的网站,连接到 Visual Studio 2012。当我启动项目 (F5) 时,它看起来应该使用 CSS 和 jQuery。在这个项目中,我们使用捆绑包。

当我发布我的网站时,找不到捆绑包。
加载资源失败:服务器响应状态为 404(未找到) http://mywebsite.local/bundles/styles ” 当我查看控制台(在我的浏览器上)时,我可以找到文件夹包,并且文件样式。但它是空的。
但是在本地站点上,样式文件中有 CSS。

我究竟做错了什么?我的意思是,它是相同的代码?这就像我一半的代码消失的路上的某个地方。我也使用 Optimus 作为 Umbraco 的一个包,但它似乎没有任何区别。

这是我的BundleConfig:

我的 Global.Asax (我没有写这个,绝对不确定这是否正确)

更新: 检查正确的标记答案,我按照该教程解决了它并使用了答案中发布的代码。我还注意到我的 bundle.config 中有一个小错误(我之前检查过,所以这不是主要问题)。在我的 "bundles.Add(new StyleBundle("~/bundles/custom/css")" 我有错误的路径,对我来说它应该是 "~/bundles/styles"。所有这一切的结合,使它工作!