簡體   English   中英

一個人可以從頂點着色器發送到幾何/碎片着色器多少數據? (帶塊)

[英]How much data can one send from vertexshader to geometry/fragmentshader? (With blocks)

我對着色器以及在着色器之間可以發送多少數據以及如何計算着色器中的gpu(或如何找出這些數據)的問題有個瑣碎的問題。

我有一個包含此代碼片段的頂點着色器程序。

out VertexData {
    mat4 Object_To_World;
    mat4 World_To_View;
    mat4 View_To_Clip;
}VertexOut;

只是一個注釋,我在fragmenthader中有一個等價的“ in”部分。

使用此代碼段,我的着色器將不會鏈接並運行。

ps我知道這可能不是傳輸此類數據的方式,我只是想查看我是否可以這樣做,以及限制是多少,但我不知道如何計算/查找以字節為單位的限制/位。

使用glGet*()查詢這些限制(假設OpenGL 4)

一些感興趣的枚舉數:

  • GL_MAX_VERTEX_OUTPUT_COMPONENTS (至少64)

  • GL_MAX_GEOMETRY_INPUT_COMPONENTS (至少64個)

  • GL_MAX_GEOMETRY_OUTPUT_COMPONENTS (至少128)

  • GL_MAX_FRAGMENT_INPUT_COMPONENTS (至少128)

  • GL_MAX_VARYING_*

這些限制通常適用於着色器階段的任何組合,至少最小值是這樣。 根據GL版本,可能會依賴這些最小值。

您在那里有3x4x4 = 48個浮點組件。 即使這些和其他中間內置值都滿足限制,請考慮對不變數據使用統一或緩沖區支持(統一緩沖區,紋理緩沖區)存儲。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM