mirror of
https://github.com/Dark98/SliceBeam.git
synced 2026-07-03 00:38:53 +00:00
95 lines
3.0 KiB
Java
95 lines
3.0 KiB
Java
package ru.ytkab0bp.slicebeam.slic3r;
|
|
|
|
import android.opengl.GLES30;
|
|
|
|
import androidx.annotation.Keep;
|
|
import androidx.annotation.Nullable;
|
|
import androidx.annotation.StringDef;
|
|
|
|
import java.lang.annotation.Retention;
|
|
import java.lang.annotation.RetentionPolicy;
|
|
import java.util.HashMap;
|
|
import java.util.Map;
|
|
|
|
public class GLShadersManager {
|
|
public final static String
|
|
SHADER_BACKGROUND = "background",
|
|
SHADER_DASHED_LINES = "dashed_lines",
|
|
SHADER_FLAT = "flat",
|
|
SHADER_FLAT_CLIP = "flat_clip",
|
|
SHADER_FLAT_TEXTURE = "flat_texture",
|
|
SHADER_GOURAUD = "gouraud",
|
|
SHADER_GOURAUD_LIGHT = "gouraud_light",
|
|
SHADER_GOURAUD_LIGHT_INSTANCED = "gouraud_light_instanced",
|
|
SHADER_IMGUI = "imgui",
|
|
SHADER_MM_CONTOUR = "mm_contour",
|
|
SHADER_MM_GOURAUD = "mm_gouraud",
|
|
SHADER_PRINTBED = "printbed",
|
|
SHADER_TOOLPATHS_COG = "toolpaths_cog",
|
|
SHADER_VARIABLE_LAYER_HEIGHT = "variable_layer_height",
|
|
SHADER_WIREFRAME = "wireframe",
|
|
SHADER_BEAM_INTRO = "beam_intro";
|
|
|
|
@StringDef(value = {
|
|
SHADER_BACKGROUND,
|
|
SHADER_DASHED_LINES,
|
|
SHADER_FLAT,
|
|
SHADER_FLAT_CLIP,
|
|
SHADER_FLAT_TEXTURE,
|
|
SHADER_GOURAUD,
|
|
SHADER_GOURAUD_LIGHT,
|
|
SHADER_GOURAUD_LIGHT_INSTANCED,
|
|
SHADER_IMGUI,
|
|
SHADER_MM_CONTOUR,
|
|
SHADER_MM_GOURAUD,
|
|
SHADER_GOURAUD,
|
|
SHADER_PRINTBED,
|
|
SHADER_TOOLPATHS_COG,
|
|
SHADER_VARIABLE_LAYER_HEIGHT,
|
|
SHADER_WIREFRAME,
|
|
SHADER_BEAM_INTRO
|
|
})
|
|
@Retention(RetentionPolicy.SOURCE)
|
|
public @interface ShaderType {}
|
|
|
|
private final static Map<String, GLShaderProgram> shaders = new HashMap<String, GLShaderProgram>() {
|
|
@Override
|
|
public GLShaderProgram get(@Nullable Object key) {
|
|
GLShaderProgram shader = super.get(key);
|
|
if (shader == null) put((String) key, shader = new GLShaderProgram((String) key));
|
|
return shader;
|
|
}
|
|
};
|
|
|
|
public static void clearShaders() {
|
|
for (GLShaderProgram program : shaders.values()) {
|
|
program.release();
|
|
}
|
|
shaders.clear();
|
|
}
|
|
|
|
public static GLShaderProgram get(@ShaderType String key) {
|
|
return shaders.get(key);
|
|
}
|
|
|
|
@Keep
|
|
private static long getCurrentShaderPointer() {
|
|
GLShaderProgram prog = getCurrentShader();
|
|
return prog != null ? prog.pointer : 0;
|
|
}
|
|
|
|
public static GLShaderProgram getCurrentShader() {
|
|
int[] idRef = {0};
|
|
GLES30.glGetIntegerv(GLES30.GL_CURRENT_PROGRAM, idRef, 0);
|
|
int id = idRef[0];
|
|
if (id != 0) {
|
|
for (GLShaderProgram program : shaders.values()) {
|
|
if (program.getId() == id) {
|
|
return program;
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
}
|