java - Libgdx 着色器设置 NullPointerException

标签 java nullpointerexception shader libgdx

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

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

但它给了我这个异常(exception):

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);
}

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

最佳答案

这是 ShaderProgramloadShader 的源代码: https://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 支持。 OpenGL ES 的 1.x 版本不支持着色器,因此您必须通过在应用程序配置中设置 useGL20 标志来配置您的应用程序。参见 https://code.google.com/p/libgdx/wiki/ApplicationConfiguration

关于java - Libgdx 着色器设置 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17364186/

相关文章:

java - Android Java 空指针异常

unity3d - 在单个网格上渲染多种 Material

three.js - THREE.js 中的定向位移图?

java - jpanel 水平最小化后按钮和数据隐藏。有什么解决办法吗?

java - 在eclipse中调试jar文件

java - 使用 AssertJ 或 JUnit 断言身份

python - PyOpenGL,无法使用两个不同的VBO进行绘制

java - 在 doInBackground 方法中从另一个异步任务调用 AsyncTask?

android - 从 MediaStore.Images.Media.DATA 获取图像的方向

java - HashMap 获取一个元素并设置为自定义值类型