90 lines
2.1 KiB
Java
90 lines
2.1 KiB
Java
package mindustry.graphics;
|
|
|
|
import arc.*;
|
|
import arc.graphics.*;
|
|
import arc.graphics.Texture.*;
|
|
import arc.graphics.VertexAttributes.*;
|
|
import arc.graphics.gl.*;
|
|
import arc.math.geom.*;
|
|
import arc.util.*;
|
|
|
|
public class CubemapMesh implements Disposable{
|
|
private static final float[] vertices = {
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, 1.0f,
|
|
-1.0f, -1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, 1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, -1.0f, 1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
|
|
-1.0f, 1.0f, -1.0f,
|
|
1.0f, 1.0f, -1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
1.0f, 1.0f, 1.0f,
|
|
-1.0f, 1.0f, 1.0f,
|
|
-1.0f, 1.0f, -1.0f,
|
|
|
|
-1.0f, -1.0f, -1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
1.0f, -1.0f, -1.0f,
|
|
-1.0f, -1.0f, 1.0f,
|
|
1.0f, -1.0f, 1.0f
|
|
};
|
|
|
|
private final Mesh mesh;
|
|
private final Shader shader;
|
|
private Cubemap map;
|
|
|
|
public CubemapMesh(Cubemap map){
|
|
this.map = map;
|
|
this.map.setFilter(TextureFilter.linear);
|
|
this.mesh = new Mesh(true, vertices.length, 0,
|
|
new VertexAttribute(Usage.position, 3, "a_position")
|
|
);
|
|
mesh.getVerticesBuffer().limit(vertices.length);
|
|
mesh.getVerticesBuffer().put(vertices, 0, vertices.length);
|
|
|
|
shader = new Shader(Core.files.internal("shaders/cubemap.vert"), Core.files.internal("shaders/cubemap.frag"));
|
|
}
|
|
|
|
public void setCubemap(Cubemap map){
|
|
this.map = map;
|
|
}
|
|
|
|
public void render(Mat3D projection){
|
|
map.bind();
|
|
shader.bind();
|
|
shader.setUniformi("u_cubemap", 0);
|
|
shader.setUniformMatrix4("u_proj", projection.val);
|
|
mesh.render(shader, Gl.triangles);
|
|
}
|
|
|
|
@Override
|
|
public void dispose(){
|
|
mesh.dispose();
|
|
map.dispose();
|
|
}
|
|
}
|