目錄
10.25 動態索引
某些實現不直接支持數組,向量和矩陣的動態索引。
程序轉換時是可以的,但性能會降低。
是否應該從規範中刪除數組的動態索引?
A:保持統一變量的動態索引(用於蒙皮)。 刪除臨時(在限制部分)。
是否應從規範中刪除向量和矩陣的動態索引?
A:保留在主要規範中。 支持不是強制性的。
10.26 紋理單元的最大數量
片段着色器中必須支持的最小紋理單元數目爲2,由gl_MaxTextureImageUnits = 2定義。這對於ES 2.0來說太低了嗎?
選項1:是的,紋理單元的數量是片段着色器的限制因素。 從ES 1.0到ES 1.1,紋理單元的數量從1增加到2,因此ES 2.0應該加倍(即4)。
選項2:增加到8。
A:增加到8。
10.27 目標錯誤報告
是否應該要求編譯器在編譯時報告任何錯誤,或者可以將錯誤推遲到鏈接時間?
A:如果無法編譯程序,則只需要向目標編譯器報告發生了錯誤。可能在編譯時或鏈接時或兩者都報告此錯誤。開發系統必須在編譯時生成語法錯誤。
10.28 整數出發的舍入
是否應爲整數除法指定舍入模式?
除法的舍入模式與餘數運算符的定義有關。大多數語言中的重要關係(但在此版本的GLSL ES中無關)是:
(a / b)* b + a%b = a(a和b是整數)
通常,餘數運算符被定義爲具有與被除數相同的符號,這意味着除數必須向零舍入。(注意,mod函數與餘數函數不同。mod被定義爲與除數具有相同的符號)。
由於餘數運算符不是GLSL ES 1.00的一部分,因此不必指定舍入模式。
A:對於此版本的規範,未定義舍入模式。
10.29 未定義的返回值
如果使用非void返回類型聲明函數,則定義中的任何return語句都必須指定返回表達式,其類型與返回類型匹配。但是,如果函數返回而未執行return語句,則行爲爲未定義的。編譯器是否應該嘗試檢查這些情況並將其報告爲錯誤?
例如:
int f()
{
// no return statement
}
...
int a = f();
選項1:將未定義的值返回給調用者。 沒有生成錯誤。 這是大多數c ++編譯器在實踐中所做的事情(儘管c ++標準實際上指定了“未定義的行爲”)。
選項2:在返回值的所有函數定義的末尾必須有一個return語句。
不,這需要添加可能無法執行的語句。
選項3:只有在執行到達函數末尾時才需要函數定義末尾的return語句:
例如:
int f(bool b)
{
if (b)
return 1;
else
return 0;
// 沒錯。 執行永遠不會到達函數的末尾,因此永遠不會執行隱式return語句。
}
在存在循環的情況下,這變得不可能確定。
選項4:通過函數定義的所有有限靜態路徑必須以return語句結束。如果可以獨立控制代碼中的每個分支,則靜態路徑是可能採用的路徑。
A:選項1:該函數返回一個未定義的值(不會報錯)。
版權:https://blog.csdn.net/flycatdeng/article/details/88771466