Libgdx着色器设置NullPointerException

use*_*516 3 java shader nullpointerexception libgdx

我尝试像这样设置我的着色器:

fog = new ShaderProgram(Gdx.files.local("shader/shad.vert"), Gdx.files.local("shader/shad.frag"));
Run Code Online (Sandbox Code Playgroud)

但它给了我这个例外:

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)
Run Code Online (Sandbox Code Playgroud)

我的着色器是这些:

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;
}
Run Code Online (Sandbox Code Playgroud)

#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);
}
Run Code Online (Sandbox Code Playgroud)

我不知道错误在哪里:(我无法解决它.我希望你能帮助我.谢谢!

P.T*_*.T. 8

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

构造函数读取文件的内容,因此,由于您已经超过该部分,文件可能没问题.

我怀疑它的这一行:

GL20 gl = Gdx.graphics.getGL20();
Run Code Online (Sandbox Code Playgroud)

(您可以直接在代码中自行尝试,看看它是否会爆炸).

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