簡體   English   中英

OpenGL / GLSL精度錯誤

[英]OpenGL/GLSL precision error

我有一個簡單的頂點着色器:

precision mediump float;

attribute vec4 position;

attribute vec4 color;
varying vec4 f_color;

uniform mat4 projection;
uniform mat4 modelView;

void main(void) {
    gl_Position = projection * modelView * position;
    f_color = color;
    f_texCoord = texCoord;
}

這無法編譯,說明(使用getShaderInfoLog()):

ERROR: 0:1: 'precision' : syntax error syntax error

如果我用精度說明符刪除行,它編譯很好。

系統:

OS: Mac OX 10.9.2 
GPU: NVIDIA GeForce 320M 256 MB
GLSL Ver.: 1.20

有人幫助我。

您已經找到了解決問題的方法:只需使用precision限定符刪除該行。

更大的問題是你還沒有確定你正在使用的OpenGL版本。 您提供的GLSL示例似乎是針對與OpenGL ES相關聯的舊版本的GLSL,它是專為移動設備設計的。 由於您實際上是在台式機/筆記本電腦上運行,因此您需要“正常”的OpenGL。 您觀察到的錯誤是兩者之間差異的結果。

通常,您希望使用受目標系統支持的最新版OpenGL。 現在可能是OpenGL 3.3(以及GLSL 3.3)。

precision關鍵字是OpenGL / ES擴展。 由於您的頂點着色器中沒有#version ,因此您將獲得GLSL v1.1(向后兼容OpenGL2.0),它不支持此類GL / ES擴展。

刪除precision線(無論如何都可能在桌面GL上無效),或者為某些支持precision的GLSL版本添加#version

OpenGL 3.3中的精度限定符是多余的。 從OpenGL 3.3規范,“精確限定符是為了代碼可移植性而添加的OpenGL ES, 而不是功能 。它們具有與OpenGL ES中相同的語法,如下所述,但它們沒有語義含義 ,這對精度沒有影響用於存儲或操作變量“。

#version 330 core用於嚴格3.3,沒有向后兼容性。 如果您不需要ES兼容性,則會丟失精度限定符。

暫無
暫無

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

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