【发布时间】:2014-09-28 01:17:45
【问题描述】:
在 libgdx 中,我加载了一个着色器,我想让我的舞台对象使用该着色器进行绘制。我尝试将 SpriteBatch 的着色器设置为我的着色器,然后将舞台的精灵批次设置为那个,但它显示为黑屏。为什么这不起作用:
ShaderProgram shader = new ShaderProgram(Gdx.files.internal("shader.vert"), Gdx.files.internal("shader.frag"));
SpriteBatch batch = new SpriteBatch();
batch.setShader(shader);
Stage stage = new Stage(new StretchViewport(768, 576), batch);
...
stage.act();
shader.begin();
stage.draw();
shader.end();
我的着色器看起来像:
shader.vert
attribute vec4 a_position;
attribute vec4 a_color;
attribute vec2 a_texCoord;
uniform mat4 u_projTrans;
varying vec4 v_color;
varying vec2 v_texCoords;
void main()
{
v_color = a_color;
v_color.a = v_color.a * (256.0/255.0);
v_texCoords = a_texCoord + 0;
gl_Position = u_projTrans * a_position;
}
shader.frag
#ifdef GL_ES
#define LOWP lowp
precision mediump float;
#else
#define LOWP
#endif
varying LOWP vec4 v_color;
varying vec2 v_texCoords;
uniform sampler2D u_texture;
void main()
{
gl_FragColor = v_color * texture2D(u_texture, v_texCoords);
}
它似乎只适用于一种纹理。其他所有纹理都不会渲染。而且,将纹理的幂设为 2 并没有什么不同。
【问题讨论】: