2013-06-28 49 views
3

我尝试建立我的着色器是这样的:Libgdx着色器设置NullPointerException异常

fog = new ShaderProgram(Gdx.files.local("shader/shad.vert"), Gdx.files.local("shader/shad.frag")); 

但它给了我这样的例外:

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: java.lang.NullPointerException 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:113) 
Caused by: java.lang.NullPointerException 
    at com.badlogic.gdx.graphics.glutils.ShaderProgram.loadShader(ShaderProgram.java:194) 
    at com.badlogic.gdx.graphics.glutils.ShaderProgram.compileShaders(ShaderProgram.java:173) 
    at com.badlogic.gdx.graphics.glutils.ShaderProgram.<init>(ShaderProgram.java:156) 
    at com.badlogic.gdx.graphics.glutils.ShaderProgram.<init>(ShaderProgram.java:165) 
    at Comet.Avoider.CometAvoider.create(CometAvoider.java:73) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:127) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:110) 

我的着色器是这些:

attribute vec4 a_position; 
attribute vec4 a_color; 
attribute vec2 a_texCoord0; 
uniform mat4 u_projTrans; 
varying vec4 v_color; 
varying vec2 v_texCoords; 
void main() { 
    v_color = a_color; 
    v_texCoords = a_texCoord0; 
    gl_Position = u_projTrans * a_position; 
} 

#ifdef GL_ES 
precision mediump float; 
#endif 
varying vec4 v_color; 
varying vec2 v_texCoords; 
uniform sampler2D u_texture; 
void main() { 
    gl_FragColor = v_color * texture2D(u_texture, v_texCoords); 
} 

我不知道错误在哪里:(我无法修复它。我希望你能帮助我。 谢谢!

+0

您可以发布代码片段,在哪里使用此着色器 –

+1

请提及着色器初始化之上的代码片段。问题可能是由于您没有使用openGl 2.0。对于着色器编程,你需要使用使用opengl 2.0。 –

回答

8

这里的源ShaderProgramloadShaderhttps://github.com/libgdx/libgdx/blob/master/gdx/src/com/badlogic/gdx/graphics/glutils/ShaderProgram.java#L196

构造函数读取文件的内容,这样以来你有过去的那一部分的文件可能是好的。

我怀疑它的这一行:

GL20 gl = Gdx.graphics.getGL20(); 

(你可以自己直接在你的代码试试这个,看看它是否炸毁)。

该文档说getGL20()will return null如果您的应用程序未配置为OpenGL ES 2.0。默认情况下,您获得1.x支持。 1.x版本的OpenGL ES不支持着色器,因此您必须通过在应用程序配置中设置useGL20标志来配置您的应用程序。请参阅https://code.google.com/p/libgdx/wiki/ApplicationConfiguration

0

Debug:

Gdx.files or Gdx are null?这应该是你的问题。

+2

如果这些为空,则callstack将无法触及'ShaderProgram' –