Ich versuche zu verstehen, Shadern mit libgdx, kommt aus einem XNA/HLSL-Hintergrund. Ich versuche, ein vert/frag Shader-Paar zu erhalten, um die Ausgabe ohne Shader zu reproduzieren, aber es zeigt nichts an.libgdx Shaders - grundlegende Shader, aber der Bildschirm ist leer
Shader Kreation:
void SetupShader()
{
ShaderProgram.pedantic = false;
shader = new ShaderProgram(
Gdx.files.internal("assets/default.vert").readString(),
Gdx.files.internal("assets/default.frag").readString());
if(!shader.isCompiled()) {
Gdx.app.log("Problem loading shader:", shader.getLog());
}
batch.setShader(shader);
}
default.vert:
attribute vec4 a_Position;
attribute vec4 a_Normal;
attribute vec2 a_TexCoord;
attribute vec4 a_Color;
uniform mat4 u_projTrans;
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
v_color = a_Color;
v_texCoords = a_TexCoord;
gl_Position = u_projTrans * a_Position;
}
default.frag:
#ifdef GL_ES
precision mediump float;
#endif
varying vec2 v_texCoords;
varying vec4 v_color;
void main() {
gl_FragColor = v_color;
}
Rendering:
batch.begin();
for (GameObject gObj : gameObjects)
gObj.Draw(batch);
batch.end();
Alle hier Anregungen? Ich bin auch neu bei OpenGL-ES, daher kann mir etwas offensichtlich fehlen. Ich sah mich um ein wenig vor der Veröffentlichung, und die doc für SpriteBatch.setShader(ShaderProgram)
war wie folgt:
die Shader-Sets in einer GLES 2.0-Umgebung verwendet werden. Scheitelpunktposition Attribut heißt "a_position", das Texturkoordinatenattribut ist , genannt "a_texCoords0", das Farbattribut heißt "a_color". Siehe ShaderProgram.POSITION_ATTRIBUTE, ShaderProgram.COLOR_ATTRIBUTE und ShaderProgram.TEXCOORD_ATTRIBUTE, das "0" erhält, das an angefügt wird, zeigen die Verwendung der ersten Textureinheit an. Die Projektionsmatrix ist hochgeladen über eine Matte4 Uniform namens "u_proj", die Transformationsmatrix ist hochgeladen über eine Uniform namens "U_trans", die kombinierte Transformation und Projektion matrx ist über eine Matte4 Uniform namens "u_projTrans" hochgeladen. Der Textur-Sampler wird über eine Uniform namens "u_texture" übergeben. Rufen Sie diese Methode mit einem Null-Argument auf, um den Standard-Shader zu verwenden.
Hmm, enthält die GLSL-Spezifikation: 'Im Allgemeinen ist die Verwendung der Sprache der Dieser Zeichensatz ist case sensitive.'. Bedeutet das, dass Identifikatoren die Groß-/Kleinschreibung beachten? Der Abschnitt Identifiers enthält kein Wort darüber. (Der Vertex-Shader enthält 'a_Position', den Kommentar' a_position') –
Ja, es sieht so aus als hättest du recht gehabt. Ich habe überprüft, wie 'SpriteBatch' seinen Shader erstellt, und es war hauptsächlich ein Cap-Problem. Ich habe auch herausgefunden, was die Standard-Shader sind - ich werde diese unten posten. – NumberOverZero