2011-02-15 60 views
4

我在想,如果有一個簡單的方法來查詢(編程)對下列功能的GPU OpenGL的限制:
- 最大的2D紋理大小
- 最大3D紋理大小
- 的最大數量頂點着色器屬性
- 不同彩車的最大數量
- 紋理圖像單位數(頂點着色器,並在片段着色器)
- 繪圖緩衝的最大數量檢查GPU的OpenGL限制

我之前需要預先知道這些數字writi我的GPU研究項目。

回答

11

glGet()是你的朋友,有:

  • GL_MAX_3D_TEXTURE_SIZE
  • GL_MAX_TEXTURE_SIZE
  • GL_MAX_VERTEX_ATTRIBS
  • GL_MAX_VARYING_FLOATS
  • GL_MAX_TEXTURE_UNITS
  • GL_MAX_DRAW_BUFFERS

例如爲:

GLint result; 
glGetIntegerv(GL_MAX_VARYING_FLOATS, &result); 

不太清楚你的項目正着手來實現的,但如果它的通用計算和你不是已經意識到這一點,你可能會感興趣的OpenCL。尤其是Cl/GL interop如果還有圖形元素,並且您的硬件支持它。

正如Damon在實際評論中指出的那樣,紋理尺寸可能比這更復雜。出現這些問題是因爲對於某些尺寸的紋理,渲染可能會從硬件回退到軟件,還會因爲紋理的大小根據所使用的像素格式而變化。要解決此問題,可以使用GL_PROXY_TEXTURE_* with glTexImage*

+0

謝謝awoodland!我相信我還需要學習OpenCL。之前沒有使用過,但那會很方便學習。 – 2011-02-15 16:33:10

1

爲補充什麼被「awoodland」說,如果你還是不知道......我想你應該看看GLEW ...

GLEW提供了確定有效的運行時間機制目標平臺支持哪些OpenGL擴展。

http://glew.sourceforge.net/