2014-10-28 29 views
0

小小的背景故事 - 我正在使用OpenGL ES2.0開發Android應用程序,前一段時間我遇到了線寬問題,最後發現glLineWidth()實現是供應商特定的,並且不保證可能值的範圍。例如對於Adreno200,它是1-18,仿真器是1-100。是否有可能獲得供應商特定的OpenGL ES 2.0方法列表?

我想知道是否有可能獲得這種方法的列表。

回答

1

運行程序時,您可以從glGet中獲取所有這些數據。

例如,請求glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE,lineWidthRange);將返回線寬範圍。

OpenGL ES 2.0 specification在其第6.2節列出了所有最低要求。從那裏我們可以看到線寬範圍保證爲[1,1],其他一切都是特定於實現的。

我不知道會根據屬性值比較「所有」實現的列表。

1

具有供應商特定值的限制列表位於spec文檔中。要發現:

  1. 轉到https://www.khronos.org/(Khronos是負責OpenGL ES標準的財團)。
  2. 在頁面頂部窗格上方的選項卡中單擊「OpenGL ES」。
  3. 單擊窗格底部的「規格&標題」。這會帶你到https://www.khronos.org/registry/gles/
  4. 查找「OpenGL ES 2.0規範和文檔」一節,然後單擊「完整規範」。或者更好的是,下載PDF文件以備將來使用。

在此PDF文件中,查找從第134頁開始的「6.2狀態表」一節。然後,您要查找的信息在「表6.18實現相關值」中。

下表列出了每個值的名稱以及用於查詢特定實現的值的函數。它也非常有用,它列出了保證所有實現都支持的最小值。

爲了您的具體的例子,你會發現一個值ALIASED_LINE_WIDTH_RANGE,這是在表中所支持的最低值第6項,與GetFloatv函數名,1,1,這對於說明:

範圍(從低到高)鋸齒線的寬度

在此基礎上,你知道的實現可以有低至1的最大線寬度的限制(即它們不支持寬行的話),你可以查詢你正在使用w的實現的限制ith:

GLfloat widthRange[2]; 
glGetFloatv(GL_ALIASED_LINE_WIDTH_RANGE, widthRange);