2012-11-02 44 views
8

我需要找出如果用戶使用Chrome瀏覽網站上的WebGL的黑名單顯卡的GPU:檢測與瀏覽器和JavaScript

http://support.google.com/chrome/bin/answer.py?hl=en-GB&answer=1220892

具體來說,我需要知道如果他們正在使用ATI卡。我使用THREE.js進行的項目在ATI卡上的Chrome瀏覽器中查看時會產生非常難看的渲染(線條不會反鋸齒),我想提供替代方案。

我知道有一個後期效果會模糊線條,但藝術指導的效果更差。

+1

AFAIK不可能只使用JS,但糾正我,如果我錯了。您需要使用一些瀏覽器實現來檢測(如果可能) – alexandernst

+0

渲染一個簡單場景(一行)並將單個像素與參考進行比較怎麼辦? – noiv

+1

@noiv我認爲我們要實現它的方式是渲染一個簡單的場景,而不是與參考進行比較只是尋找特定的顏色。如果抗鋸齒功能關閉,則黑色背景上的白線不應產生灰色。 – Evanbbb

回答

3

試試這個:

function aa_test() { 
renderer.setSize(4, 4); 

var ortho_camera = new THREE.OrthographicCamera(0, 4, 0, 4, 0, 1); 
var output = new Uint8Array(4); 

    var material = new THREE.LineBasicMaterial({ 
     color: 0xffffff 
    }); 

var geometry = new THREE.Geometry(); 
geometry.vertices.push(new THREE.Vector3(0, 0, 0)); 
geometry.vertices.push(new THREE.Vector3(4, 4, 0)); 

    var line = new THREE.Line(geometry, material); 

    renderer.clearTarget(aa_target.renderTarget, true, true, true); 
    renderer.context.lineWidth(4); 

aa_target.add(line); 
renderer.render(aa_target, ortho_camera, aa_target.renderTarget); 

renderer.context.readPixels(0, 2, 1, 1, renderer.context.RGBA, renderer.context.UNSIGNED_BYTE, output); 

if (output[0] == 0) 
    aa_available = false; 

} 

所以,你所擁有的,是AA是否可用的測試。此方法在Three.js中可用。我已經嘗試過查看Chrome及其特殊頁面(Chrome:// gpu等),但將數據導入任意js腳本是不可能的。

使用FXAA並不是很糟糕,因爲線寬約爲1.6。否則,你沒有足夠的線來混合。 FXAA非常適合有很多場景的場景,但如果場景大部分是線條,那麼它往往會使線條背景過分褪色。

對於這一點,最好的回答將是FXAA這裏使用方法:

https://github.com/OpenGLInsights/OpenGLInsightsCode/tree/master/Chapter%2011%20Antialiased%20Volumetric%20Lines%20Using%20Shader-Based%20Extrusion

這款採用幾何着色器是的,但早些時候,它提到使用頂點着色器來獲得相同的結果。這很可能會提供更好的線條。

希望有幫助! :D

1

因爲瀏覽器會損壞字符串值,所以通常可用於查找信息的OpenGL調用在WebGL中用於此目的是沒用的:http://jsbin.com/ovekor/3/但是,可以使用擴展名WEBGL_debug_renderer_info,但可以使用該擴展名,但當前的瀏覽器支持是未知的,並且由於它已被標記爲安全風險,所以它不會順利使用(可能需要某種調試標誌或用戶提示)。

簡單地測試一下也是有點邪惡的。對於「ATI卡」,因爲驅動程序可能會改進,或者某些卡片上不存在問題。 (這類似於臭名昭着的瀏覽器嗅探與特徵檢測。)

因此,您最好的選擇是按照評論中的建議做一點測試渲染。

我知道有一個帖子效果模糊線條,但藝術指導的結果更糟。

如果你的意思Horizo​​ntalBlurShader和VerticalBlurShader,那麼我建議你嘗試FXAAShader,這是一個實際的屏幕空間抗混疊濾波器,而不是隻模糊整個圖像。