2013-04-11 24 views
2

我對OpenGL很新,所以這可能很明顯,但是可以確定給定視頻卡是否支持特定功能?這是因爲我使用的是帶有ATI Radeon 9550顯卡的舊電腦,運行Lubuntu 12.10並發現它不支持使用dFdx和dFfy。我能夠解決這個問題,但現在我很好奇,如果我能夠找出由於這樣的問題是否發生故障,並基於此採取行動,可能使用替代方法等。以編程方式確定OpenGL功能是否受硬件支持

回答

3

您可以使用glGetString(GL_VERSION)glGetInteverv(GL_MAJOR_VERSION, …); glGetInteverv(GL_MINOR_VERSION, …);來檢查支持的OpenGL版本。隨着OpenGL-3及之後的版本,OpenGL主要版本直接對應於硬件功能。

在舊版本中,事情並不嚴格,而且由於OpenGL的抽象設備模型,您無法真正「查詢」硬件功能。您可以檢查支持哪些擴展,這是支持的功能的一個很好的指示器,因爲很多ARB擴展將其擴展爲核心功能。如果當前OpenGL版本的某個功能所基於的擴展名不支持,那麼核心功能可能會被仿真。

我知道它非常模糊不清,但事實就是如此。唯一的另一種選擇是保持GL_RENDERER字符串的數據庫並與之匹配。

3

一般來說,你不能。不是你談論的那種事情。

dFdxdFdy自1.10版(核心OpenGL 2.0中的第一個版本)以來一直是GLSL的一部分。支持他們是不是可選

你的問題是,ATI/AMD希望宣稱他們較早的卡支持2.x,但他們的硬件實際上不能完成2.x所需的所有事情。所以他們說謊關於它,聲稱支持,同時默默做這些空操作。

OpenGL沒有辦法檢測到perfidy。你唯一能做的就是圍繞一張卡片列表,並使用GL_VENDORGL_RENDERER字符串進行測試。

+0

感謝您的信息。這是他們的邪惡。幸運的是,這張卡是免費的,到目前爲止,它已經在很大程度上工作到現在爲止,除了這一點,我能夠解決它。現在我不得不將這一點留在我的腦海中。所以我猜想使用替代方法的唯一方法是檢查這些字符串,如果它們匹配某些卡片,則使用替代方法。這太糟糕了,你不能檢查,看看他們是否失敗了,然後嘗試別的。 – Travis

相關問題