...
This commit is contained in:
@@ -131,49 +131,8 @@ main :: () {
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
glDepthFunc(GL_LESS);
|
||||
|
||||
// Shaders
|
||||
vert_src : [:0]u8 = #string glsl
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 1) in vec3 aNormal;
|
||||
uniform mat4 uMVP;
|
||||
out vec3 vNormal;
|
||||
out vec3 vPos;
|
||||
|
||||
void main() {
|
||||
gl_Position = uMVP * vec4(aPos, 1.0);
|
||||
vNormal = aNormal;
|
||||
vPos = aPos;
|
||||
}
|
||||
glsl;
|
||||
|
||||
frag_src : [:0]u8 = #string GLSL
|
||||
#version 330 core
|
||||
in vec3 vNormal;
|
||||
in vec3 vPos;
|
||||
out vec4 FragColor;
|
||||
uniform vec3 uLightDir;
|
||||
uniform float uWire;
|
||||
void main() {
|
||||
if (uWire > 0.5) {
|
||||
FragColor = vec4(0.05, 0.05, 0.05, 1.0);
|
||||
return;
|
||||
}
|
||||
vec3 n = normalize(vNormal);
|
||||
vec3 l = normalize(uLightDir);
|
||||
float diff = max(dot(n, l), 0.15);
|
||||
float cx = floor(vPos.x * 2.0 + 0.001);
|
||||
float cy = floor(vPos.y * 2.0 + 0.001);
|
||||
float cz = floor(vPos.z * 2.0 + 0.001);
|
||||
float check = mod(cx + cy + cz, 2.0);
|
||||
vec3 col1 = vec3(0.9, 0.5, 0.2);
|
||||
vec3 col2 = vec3(0.2, 0.6, 0.9);
|
||||
vec3 base = mix(col1, col2, check);
|
||||
FragColor = vec4(base * diff, 1.0);
|
||||
}
|
||||
GLSL;
|
||||
|
||||
program := create_program(vert_src, frag_src);
|
||||
print("create program: {}\n{}\n", VERT_SHADER_SRC, FRAG_SHADER_SRC);
|
||||
program := create_program(VERT_SHADER_SRC, FRAG_SHADER_SRC);
|
||||
glUseProgram(program);
|
||||
|
||||
mvp_loc : s32 = glGetUniformLocation(program, "uMVP");
|
||||
@@ -317,3 +276,44 @@ GLSL;
|
||||
SDL_DestroyWindow(window);
|
||||
SDL_Quit();
|
||||
}
|
||||
|
||||
VERT_SHADER_SRC : string = #string GLSL
|
||||
#version 330 core
|
||||
layout (location = 0) in vec3 aPos;
|
||||
layout (location = 1) in vec3 aNormal;
|
||||
uniform mat4 uMVP;
|
||||
out vec3 vNormal;
|
||||
out vec3 vPos;
|
||||
|
||||
void main() {
|
||||
gl_Position = uMVP * vec4(aPos, 1.0);
|
||||
vNormal = aNormal;
|
||||
vPos = aPos;
|
||||
}
|
||||
GLSL;
|
||||
|
||||
FRAG_SHADER_SRC : string = #string GLSL
|
||||
#version 330 core
|
||||
in vec3 vNormal;
|
||||
in vec3 vPos;
|
||||
out vec4 FragColor;
|
||||
uniform vec3 uLightDir;
|
||||
uniform float uWire;
|
||||
void main() {
|
||||
if (uWire > 0.5) {
|
||||
FragColor = vec4(0.05, 0.05, 0.05, 1.0);
|
||||
return;
|
||||
}
|
||||
vec3 n = normalize(vNormal);
|
||||
vec3 l = normalize(uLightDir);
|
||||
float diff = max(dot(n, l), 0.15);
|
||||
float cx = floor(vPos.x * 2.0 + 0.001);
|
||||
float cy = floor(vPos.y * 2.0 + 0.001);
|
||||
float cz = floor(vPos.z * 2.0 + 0.001);
|
||||
float check = mod(cx + cy + cz, 2.0);
|
||||
vec3 col1 = vec3(0.9, 0.5, 0.2);
|
||||
vec3 col2 = vec3(0.2, 0.6, 0.9);
|
||||
vec3 base = mix(col1, col2, check);
|
||||
FragColor = vec4(base * diff, 1.0);
|
||||
}
|
||||
GLSL;
|
||||
Reference in New Issue
Block a user