【问题标题】:How to get OpenGL version using Javascript?如何使用 Javascript 获取 OpenGL 版本?
【发布时间】:2014-05-20 20:55:43
【问题描述】:

有没有办法让浏览器返回opengl版本字符串?

我知道opengl不是由浏览器执行的,这就是为什么在代码中,着色器被写成字符串以不产生javascript语法错误,

那么,如果浏览器可以与 GPU 交互,那么一定有一些代码将字符串返回到控制台而不是着色器?

【问题讨论】:

    标签: javascript html opengl-es webgl


    【解决方案1】:

    简短的回答是,你不能。您可以要求标准 GL 版本。

    const gl = document.createElement("canvas").getContext("webgl");
    console.log(gl.getParameter(gl.VERSION));
    console.log(gl.getParameter(gl.SHADING_LANGUAGE_VERSION));
    console.log(gl.getParameter(gl.VENDOR));

    但目前他们需要在所有 WebGL 实现上返回相似的值。例如在我的机器上他们返回

    WebGL 1.0 (OpenGL ES 2.0 Chromium) 
    WebGL GLSL ES 1.0 (OpenGL ES GLSL ES 1.0 Chromium) 
    WebKit 
    

    分别。

    他们应该返回这些特定值的原因是出于隐私原因。如果您可以找到某人 GPU 的供应商,那么您可以将其用作更多信息来识别他们。 (有关使用浏览器信息唯一标识特定机器的示例,请参阅https://panopticlick.eff.org/。)

    Apple 甚至指出,如果您知道 GPU 的供应商和型号,那么您可以例如知道是否有人最近购买了 MacPro,因为 MacPro 的 GPU 没有其他地方可用。因此,例如,您可以针对他们投放广告。 “嘿,我知道根据你的 GPU,你有一台 7000 美元的电脑。你觉得这个昂贵的假期套餐怎么样?”

    另一方面,Google 已决定他们不认为这是一个问题,因此他们决定打开一个 WebGL 扩展,该扩展原本应该是特权(意味着只有对诸如测试之类的东西的特殊启用)。该扩展名是 WEBGL_debug_renderer_info 扩展名 (http://www.khronos.org/registry/webgl/extensions/WEBGL_debug_renderer_info/)

    要首先使用它,您必须检查它是否可用,如果可用,您可以获取实际的供应商和渲染器。

    // try to get the extensions
    const ext = gl.getExtension("WEBGL_debug_renderer_info");
    
    // if the extension exists, find out the info.
    if (ext) {
      console.log(gl.getParameter(ext.UNMASKED_VENDOR_WEBGL));
      console.log(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL));
    }
    

    当我在我的机器上运行它时,我得到了

    NVIDIA Corporation
    NVIDIA GeForce GT 650M OpenGL Engine 
    

    const gl = document.createElement("canvas").getContext("webgl");
    // try to get the extensions
    const ext = gl.getExtension("WEBGL_debug_renderer_info");
    
    // if the extension exists, find out the info.
    if (ext) {
      console.log(gl.getParameter(ext.UNMASKED_VENDOR_WEBGL));
      console.log(gl.getParameter(ext.UNMASKED_RENDERER_WEBGL));
    }

    注意:最近检查 2017 年 8 月 1 日这在 Firefox 54、Safari 10.1.2、Chrome 59 中可用,所以我猜其他浏览器已经决定公开这一点很重要

    【讨论】:

    • 哦!非常感谢!这是我能得到的关于这个问题的最佳答案!谢谢你 100000 次!
    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 2021-04-14
    • 1970-01-01
    • 1970-01-01
    • 2016-12-23
    • 2021-03-06
    • 2018-06-26
    • 2017-07-20
    相关资源
    最近更新 更多