私はシェーダーと OpenGL 全般に不慣れです。いくつかのチュートリアルを読んだ後、最初のシェーダーを (LibGDX を使用して) 作成することにしました。
問題は、画面が完全に黒いことです...
私のJavaコード:
public class Application extends
ApplicationAdapter {
private ShaderProgram mShaderProgram;
private Mesh mMesh;
@Override
public void create() {
this.createMesh();
if (Gdx.graphics.isGL20Available()) {
this.createShaderProgram();
}
this.log("" + this.mShaderProgram.isCompiled()); // outputs "true"
}
private void createMesh() {
this.mMesh = new Mesh(true, 3, 4, VertexAttribute.Position());
this.mMesh.setIndices(new short[] { 0, 1, 2 });
this.mMesh.setVertices(new float[] {
-0.5f, -0.5f, 0,
0f, 0.5f, 0,
0.5f, -0.5f, 0
});
}
private void createShaderProgram() {
final FileHandle fragmentShader = Gdx.files.internal("fragment.txt");
final FileHandle vertexShader = Gdx.files.internal("vertex.txt");
this.mShaderProgram = new ShaderProgram(vertexShader, fragmentShader);
}
@Override
public void dispose() {
this.mMesh.dispose();
if (this.mShaderProgram != null) {
this.mShaderProgram.dispose();
}
}
private void log(final String message) {
Gdx.app.log("", message);
}
@Override
public void render() {
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
if (Gdx.graphics.isGL20Available()) {
this.mShaderProgram.begin();
this.mMesh.render(this.mShaderProgram, GL10.GL_TRIANGLES);
this.mShaderProgram.end();
}
else {
this.mMesh.render(GL10.GL_TRIANGLES);
}
}
}
私のフラグメントシェーダー:
void main() {
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}
私の頂点シェーダー:
void main() {
gl_Position = ftransform();
}
gl_Vertex
代わりに使用しftransform()
ても何も変わりませんでした。