forked from itycodes/MineClone
parent
6f04e54627
commit
3da43d5a69
@ -1 +1,2 @@
|
||||
/target
|
||||
/shaders/*.spv
|
||||
|
Binary file not shown.
@ -0,0 +1,10 @@
|
||||
#version 450
|
||||
// vim: ft=c
|
||||
|
||||
layout(binding = 1) uniform samplerCube combined_image;
|
||||
|
||||
layout(location = 0) out vec4 outColor;
|
||||
|
||||
layout(location = 0) in vec4 pos_pre;
|
||||
|
||||
void main() { outColor = texture(combined_image, vec3(pos_pre)); }
|
@ -0,0 +1,157 @@
|
||||
#version 450
|
||||
// vim: ft=c
|
||||
// clang-format off
|
||||
|
||||
const vec4 positions[36] = vec4[36](
|
||||
// BOTTOM
|
||||
vec4(-0.5, 0.5, -0.5, 1.0),
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(-0.5, 0.5, 0.5, 1.0),
|
||||
vec4(0.5, 0.5, -0.5, 1.0),
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(-0.5, 0.5, -0.5, 1.0),
|
||||
|
||||
// TOP
|
||||
vec4(0.5, -0.5, 0.5, 1.0),
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
vec4(-0.5, -0.5, 0.5, 1.0),
|
||||
vec4(0.5, -0.5, 0.5, 1.0),
|
||||
vec4(0.5, -0.5, -0.5, 1.0),
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
|
||||
// FRONT
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
vec4(0.5, 0.5, -0.5, 1.0),
|
||||
vec4(-0.5, 0.5, -0.5, 1.0),
|
||||
vec4(0.5, -0.5, -0.5, 1.0),
|
||||
vec4(0.5, 0.5, -0.5, 1.0),
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
|
||||
// BACK
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(-0.5, -0.5, 0.5, 1.0),
|
||||
vec4(-0.5, 0.5, 0.5, 1.0),
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(0.5, -0.5, 0.5, 1.0),
|
||||
vec4(-0.5, -0.5, 0.5, 1.0),
|
||||
|
||||
// LEFT
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
vec4(-0.5, 0.5, 0.5, 1.0),
|
||||
vec4(-0.5, -0.5, 0.5, 1.0),
|
||||
vec4(-0.5, 0.5, -0.5, 1.0),
|
||||
vec4(-0.5, 0.5, 0.5, 1.0),
|
||||
vec4(-0.5, -0.5, -0.5, 1.0),
|
||||
|
||||
// RIGHT
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(0.5, -0.5, -0.5, 1.0),
|
||||
vec4(0.5, -0.5, 0.5, 1.0),
|
||||
vec4(0.5, 0.5, 0.5, 1.0),
|
||||
vec4(0.5, 0.5, -0.5, 1.0),
|
||||
vec4(0.5, -0.5, -0.5, 1.0)
|
||||
);
|
||||
|
||||
layout(push_constant, std430) uniform pc {
|
||||
layout(offset=0) vec4 cam_orig;
|
||||
layout(offset=16) vec4 cam_rot;
|
||||
layout(offset=32) uvec2 screen_res;
|
||||
};
|
||||
|
||||
layout (location = 0) out vec4 pos_pre;
|
||||
|
||||
const float PI = 3.14159;
|
||||
// Forgive me for I have sinned
|
||||
const float TAU = PI*2.0;
|
||||
|
||||
void main() {
|
||||
// assign outs
|
||||
pos_pre = positions[gl_VertexIndex];
|
||||
|
||||
// define constants
|
||||
const float zFar = 100.0;
|
||||
const float zNear = 0.1;
|
||||
|
||||
// assign the transformee
|
||||
gl_Position = positions[gl_VertexIndex];
|
||||
|
||||
mat4 fix_coordinates = mat4(
|
||||
-1.0, 0.0, 0.0, 0.0,
|
||||
0.0, -1.0, 0.0, 0.0,
|
||||
0.0, 0.0, -1.0, 0.0,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
mat4 view_rot_xz = mat4(
|
||||
cos(cam_rot.y), 0.0, sin(cam_rot.y), 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
-sin(cam_rot.y), 0.0, cos(cam_rot.y), 0.0,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
mat4 view_rot_yz = mat4(
|
||||
1.0, 0.0, 0.0, 0.0,
|
||||
0.0, cos(cam_rot.x), sin(cam_rot.x), 0.0,
|
||||
0.0, -sin(cam_rot.x), cos(cam_rot.x), 0.0,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
mat4 project_aspect = mat4(
|
||||
(float(screen_res.y)/float(screen_res.x)), 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0, 0.0,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
mat4 project_znear = mat4(
|
||||
1.0, 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0, -zNear,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
mat4 project_div = mat4(
|
||||
1.0, 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0, 0.0,
|
||||
0.0, 0.0, tan((70.0/2.0)/360.0*TAU), 0.0
|
||||
);
|
||||
mat4 project_normal = mat4(
|
||||
1.0, 0.0, 0.0, 0.0,
|
||||
0.0, 1.0, 0.0, 0.0,
|
||||
0.0, 0.0, 1.0/zFar, 0.0,
|
||||
0.0, 0.0, 0.0, 1.0
|
||||
);
|
||||
|
||||
// vulkan has inverted screen coordinates
|
||||
// but we want regular mesh coordinates
|
||||
// gl_Position.xyz *= -1.0
|
||||
gl_Position *= fix_coordinates;
|
||||
|
||||
// apply view's xz rotation
|
||||
//mat2 xz_rot;
|
||||
//xz_rot[0] = vec2(cos(cam_rot.y), -sin(cam_rot.y));
|
||||
//xz_rot[1] = vec2(sin(cam_rot.y), cos(cam_rot.y));
|
||||
//gl_Position.xz *= inverse(xz_rot);
|
||||
gl_Position *= view_rot_xz;
|
||||
|
||||
// apply view's yz rotation
|
||||
//mat2 yz_rot;
|
||||
//yz_rot[0] = vec2(cos(cam_rot.x), -sin(cam_rot.x));
|
||||
//yz_rot[1] = vec2(sin(cam_rot.x), cos(cam_rot.x));
|
||||
//gl_Position.yz *= inverse(yz_rot);
|
||||
gl_Position *= view_rot_yz;
|
||||
|
||||
// aspect correction
|
||||
//gl_Position.x *= (1080.0/1920.0);
|
||||
gl_Position *= project_aspect;
|
||||
|
||||
// z near correction
|
||||
//gl_Position.z -= zNear;
|
||||
gl_Position *= project_znear;
|
||||
|
||||
// division by z
|
||||
// has to be assigned by w so that the hardware performs the division AFTER clipping.
|
||||
//gl_Position.w = (gl_Position.z*sin(140.0/360.0*TAU));
|
||||
gl_Position *= project_div;
|
||||
|
||||
// z normalization
|
||||
//gl_Position.z /= zFar;
|
||||
gl_Position *= project_normal;
|
||||
|
||||
}
|
Binary file not shown.
Loading…
Reference in new issue