- 435
- 1
Привет всем! У меня есть код для использования шейдеров. И есть вопрос как его применить к Techne модели и определенной текстуре в рендере этой модели?
Код:
import static org.lwjgl.opengl.GL11.*;
import static org.lwjgl.opengl.GL20.*;
int shaderProgram = glCreateProgram();
int vertexShader = glCreateShader(GL_VERTEX_SHADER);
int fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
StringBuilder vertexShaderSource = new StringBuilder();
StringBuilder fragmentShaderSource = new StringBuilder();
BufferedReader reader = null;
try {
reader = new BufferedReader(new FileReader("/src/minecraft/assets/militarycraft/shaders/metal.vs"));
String line;
while ((line = reader.readLine()) != null) {
vertexShaderSource.append(line).append('\n');
}
} catch (IOException e) {
System.err.println("Vertex shader wasn't loaded properly.");
e.printStackTrace();
Display.destroy();
System.exit(1);
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
BufferedReader reader2 = null;
try {
reader2 = new BufferedReader(new FileReader("/src/minecraft/assets/militarycraft/shaders/metal.fs"));
String line;
while ((line = reader2.readLine()) != null) {
fragmentShaderSource.append(line).append('\n');
}
} catch (IOException e) {
System.err.println("Fragment shader wasn't loaded properly.");
Display.destroy();
System.exit(1);
} finally {
if (reader2 != null) {
try {
reader2.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
glShaderSource(vertexShader, vertexShaderSource);
glCompileShader(vertexShader);
if (glGetShaderi(vertexShader, GL_COMPILE_STATUS) == GL_FALSE) {
System.err.println("Vertex shader wasn't able to be compiled correctly.");
}
glShaderSource(fragmentShader, fragmentShaderSource);
glCompileShader(fragmentShader);
if (glGetShaderi(fragmentShader, GL_COMPILE_STATUS) == GL_FALSE) {
System.err.println("Fragment shader wasn't able to be compiled correctly.");
}
glAttachShader(shaderProgram, vertexShader);
glAttachShader(shaderProgram, fragmentShader);
glLinkProgram(shaderProgram);
glValidateProgram(shaderProgram);
glUseProgram(shaderProgram);
glDeleteProgram(shaderProgram);
glDeleteShader(vertexShader);
glDeleteShader(fragmentShader);