2014-01-13 33 views
4

類似的問題: No uniform with name in shaderFragment shader: No uniform with name in shader與名稱沒有統一的着色器專門對樹莓派

LibGDX:libgdx.badlogicgames.com

LibOnPi:www.habitualcoder.com/?page_id=257

我正嘗試在運行Raspberry Pi的LibGDX上運行一點運氣。經過一些試驗和錯誤,我終於開始拋出錯誤「在着色器中沒有名稱'mvp'的統一名稱」。問題與類似的問題非常相似,但是在我看來,着色器實際上正在使用「mvp」來設置位置。

真奇怪的部分是它運行在PC上(Eclipse ADT中的Windows 7 x64)很好,但不在Pi上。 pi是否以不同的方式處理着色器,如果不是,是什麼導致這個錯誤被拋出pi?

Vertex_Shader = 
    "attribute vec3 a_position; \n" 
    + "attribute vec4 a_color; \n" 
    + "attribute vec2 a_texCoords; \n" 
    + "uniform mat4 mvp; \n" 
    + "varying vec4 v_color; \n" + "varying vec2 tCoord; \n" 
    + "void main() { \n" 
    + " v_color = a_color; \n" 
    + " tCoord = a_texCoords; \n" 
    + " gl_Position = mvp * vec4(a_position, 1f); \n" 
    + "}"; 

Fragment_Shader = 
    "precision mediump float; \n" 
    + "uniform sampler2D u_texture; \n" 
    + "uniform int texture_Enabled; \n" 
    + "varying vec4 v_color; \n" 
    + "varying vec2 tCoord; \n" 
    + "void main() { \n" 
    + " vec4 texColor = texture2D(u_texture, tCoord); \n" 
    + " gl_FragColor = ((texture_Enabled == 1)?texColor:v_color); \n" 
    + "}"; 
... 
shader = new ShaderProgram(Vertex_Shader, Fragment_Shader); 
... 
shader.setUniformMatrix("mvp", camera.combined); 

我也注意到了這個問題: c++ OpenGL glGetUniformLocation for Sampler2D returns -1 on Raspberry PI but works on Windows 這是相當類似,但實現把「的#Version 150」在着色器的頂部提出的解決方案只是打破了它在PC上了。 (指出,有名爲 'MVP' 沒有統一的)

編輯:

1 - 增加片段着色器以keaukraine

2請求 - 修復由Keaukraine和ArttuPeltonen找到。 Raspberry Pi需要着色器中的版本號。的OpenGL-ES 2.0使用版本100

+0

您能否提供片段着色器代碼? – keaukraine

+0

@keaukraine - 當然!,更新OP。 – Shimizoki

+1

'#version 100'是OpenGL ES 2.0的正確聲明,而不是150.你可以試試。 –

回答

2

回答由keaukraine和ArttuPeltonen提供

樹莓裨需要在着色一個版本號。 OpenGl-ES 2.0使用版本100.當我最初嘗試它時由於忘記添加空格而無法工作。 「的#Version 100attribute ......」 是不一樣的 「的#Version 100 \ nattribute」

例最終着色器:

Vertex_Shader = 
    "#version 100\n" 
    + "attribute vec3 a_position; \n" 
    + "attribute vec4 a_color; \n" 
    + "attribute vec2 a_texCoords; \n" 
    + "uniform mat4 mvp; \n" 
    + "varying vec4 v_color; \n" + "varying vec2 tCoord; \n" 
    + "void main() { \n" 
    + " v_color = a_color; \n" 
    + " tCoord = a_texCoords; \n" 
    + " gl_Position = mvp * vec4(a_position, 1f); \n" 
    + "}"; 

謝謝兩位。

+0

很高興聽到它現在起作用。 –

+0

最難找到錯誤的原因可能比這更微不足道。很高興看到你找到並修復了錯誤。 – keaukraine