Рисуем квадратик
This commit is contained in:
Binary file not shown.
Binary file not shown.
@@ -1,28 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout (triangles) in;
|
||||
layout (triangle_strip, max_vertices = 3) out;
|
||||
|
||||
layout(location = 0) in GeometryObj {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint Texture; // Текстура
|
||||
vec2 UV;
|
||||
} Geometry[];
|
||||
|
||||
layout(location = 0) out FragmentObj {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint Texture; // Текстура
|
||||
vec2 UV;
|
||||
} Fragment;
|
||||
|
||||
void main() {
|
||||
for(int iter = 0; iter < 3; iter++) {
|
||||
gl_Position = gl_in[iter].gl_Position;
|
||||
Fragment.GeoPos = Geometry[iter].GeoPos;
|
||||
Fragment.Texture = Geometry[iter].Texture;
|
||||
Fragment.UV = Geometry[iter].UV;
|
||||
EmitVertex();
|
||||
}
|
||||
|
||||
EndPrimitive();
|
||||
}
|
||||
Binary file not shown.
@@ -1,44 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in uvec4 Vertex;
|
||||
|
||||
layout(location = 0) out GeometryObj {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint Texture; // Текстура
|
||||
vec2 UV;
|
||||
} Geometry;
|
||||
|
||||
layout(push_constant) uniform UniformBufferObject {
|
||||
mat4 projview;
|
||||
mat4 model;
|
||||
} ubo;
|
||||
|
||||
|
||||
// struct NodeVertexStatic {
|
||||
// uint32_t
|
||||
// FX : 9, FY : 9, FZ : 9, // Позиция -112 ~ 369 / 16
|
||||
// N1 : 4, // Не занято
|
||||
// LS : 1, // Масштаб карты освещения (1м/16 или 1м)
|
||||
// Tex : 18, // Текстура
|
||||
// N2 : 14, // Не занято
|
||||
// TU : 16, TV : 16; // UV на текстуре
|
||||
// };
|
||||
|
||||
void main()
|
||||
{
|
||||
vec4 baseVec = ubo.model*vec4(
|
||||
float(Vertex.x & 0x1ff) / 16.f - 7,
|
||||
float((Vertex.x >> 9) & 0x1ff) / 16.f - 7,
|
||||
float((Vertex.x >> 18) & 0x1ff) / 16.f - 7,
|
||||
1
|
||||
);
|
||||
|
||||
Geometry.GeoPos = baseVec.xyz;
|
||||
Geometry.Texture = Vertex.y & 0x3ffff;
|
||||
Geometry.UV = vec2(
|
||||
float(Vertex.z & 0xffff) / pow(2, 16),
|
||||
float((Vertex.z >> 16) & 0xffff) / pow(2, 16)
|
||||
);
|
||||
|
||||
gl_Position = ubo.projview*baseVec;
|
||||
}
|
||||
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in FragmentObj {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint Texture; // Текстура
|
||||
vec2 UV;
|
||||
} Fragment;
|
||||
|
||||
layout(location = 0) out vec4 Frame;
|
||||
|
||||
uniform layout(set = 0, binding = 0) sampler2DArray MainAtlas;
|
||||
layout(set = 0, binding = 1) readonly buffer MainAtlasLayoutObj {
|
||||
vec3 Color;
|
||||
} MainAtlasLayout;
|
||||
|
||||
uniform layout(set = 1, binding = 0) sampler2DArray LightMap;
|
||||
layout(set = 1, binding = 1) readonly buffer LightMapLayoutObj {
|
||||
vec3 Color;
|
||||
} LightMapLayout;
|
||||
|
||||
void main() {
|
||||
Frame = vec4(1);
|
||||
}
|
||||
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in FragmentObj {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint Texture; // Текстура
|
||||
vec2 UV;
|
||||
} Fragment;
|
||||
|
||||
layout(location = 0) out vec4 Frame;
|
||||
|
||||
uniform layout(set = 0, binding = 0) sampler2DArray MainAtlas;
|
||||
layout(set = 0, binding = 1) readonly buffer MainAtlasLayoutObj {
|
||||
vec3 Color;
|
||||
} MainAtlasLayout;
|
||||
|
||||
uniform layout(set = 1, binding = 0) sampler2DArray LightMap;
|
||||
layout(set = 1, binding = 1) readonly buffer LightMapLayoutObj {
|
||||
vec3 Color;
|
||||
} LightMapLayout;
|
||||
|
||||
void main() {
|
||||
Frame = vec4(1);
|
||||
}
|
||||
Binary file not shown.
@@ -1,244 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout (points) in;
|
||||
layout (triangle_strip, max_vertices = 4) out;
|
||||
|
||||
layout(location = 0) in highp uvec3 Geometry[];
|
||||
|
||||
layout(location = 0) out Fragment {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint VoxMTL; // Материал вокселя
|
||||
vec2 LUV;
|
||||
} fragment;
|
||||
|
||||
layout(push_constant) uniform UniformBufferObject {
|
||||
mat4 projview;
|
||||
mat4 model;
|
||||
} ubo;
|
||||
|
||||
// struct VoxelVertexPoint {
|
||||
// uint32_t
|
||||
// FX : 9, FY : 9, FZ : 9, // Позиция
|
||||
// Place : 3, // Положение распространения xz, xy, zy, и обратные
|
||||
// N1 : 1, // Не занято
|
||||
// LS : 1, // Масштаб карты освещения (1м/16 или 1м)
|
||||
// TX : 8, TY : 8, // Размер+1
|
||||
// VoxMtl : 16, // Материал вокселя DefVoxelId_t
|
||||
// LU : 14, LV : 14, // Позиция на карте освещения
|
||||
// N2 : 2; // Не занято
|
||||
// };
|
||||
|
||||
void main() {
|
||||
vec4 baseVec = vec4(
|
||||
float(Geometry[0].x & 0x1ff) / 16.f,
|
||||
float((Geometry[0].x >> 9) & 0x1ff) / 16.f,
|
||||
float((Geometry[0].x >> 18) & 0x1ff) / 16.f,
|
||||
1
|
||||
);
|
||||
|
||||
vec2 size = vec2(
|
||||
float(Geometry[0].y & 0xff)+1,
|
||||
float((Geometry[0].y >> 8) & 0xff)+1
|
||||
);
|
||||
|
||||
uint voxMTL = ((Geometry[0].y >> 16) & 0xffff);
|
||||
vec2 luv = vec2(float(Geometry[0].z & 0x3fff)+0.5f, float((Geometry[0].z >> 14) & 0x3fff)+0.5f);
|
||||
|
||||
// Стартовая вершина
|
||||
vec4 tempVec = baseVec;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv;
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
|
||||
int place = int(Geometry[0].x >> 27) & 0x3;
|
||||
switch(place) {
|
||||
case 0: // xz
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec.z += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
case 1: // xy
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
case 2: // zy
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.x;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
case 3: // xz inv
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec.z += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
case 4: // xy inv
|
||||
tempVec = baseVec;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.x += size.x;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
case 5: // zy inv
|
||||
tempVec = baseVec;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, 0);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.x;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(0, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
tempVec = baseVec;
|
||||
tempVec.z += size.x;
|
||||
tempVec.y += size.y;
|
||||
tempVec = ubo.model*tempVec;
|
||||
fragment.GeoPos = vec3(tempVec);
|
||||
fragment.VoxMTL = voxMTL;
|
||||
fragment.LUV = luv+vec2(size.x, size.y);
|
||||
gl_Position = ubo.projview*tempVec;
|
||||
EmitVertex();
|
||||
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
EndPrimitive();
|
||||
}
|
||||
Binary file not shown.
@@ -1,10 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in uvec3 Vertex;
|
||||
layout(location = 0) out uvec3 Geometry;
|
||||
|
||||
|
||||
void main()
|
||||
{
|
||||
Geometry = Vertex;
|
||||
}
|
||||
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in Fragment {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint VoxMTL; // Материал вокселя
|
||||
vec2 LUV;
|
||||
} fragment;
|
||||
|
||||
layout(location = 0) out vec4 Frame;
|
||||
|
||||
uniform layout(set = 0, binding = 0) sampler2DArray MainAtlas;
|
||||
layout(set = 0, binding = 1) readonly buffer MainAtlasLayoutObj {
|
||||
vec3 Color;
|
||||
} MainAtlasLayout;
|
||||
|
||||
uniform layout(set = 1, binding = 0) sampler2DArray LightMap;
|
||||
layout(set = 1, binding = 1) readonly buffer LightMapLayoutObj {
|
||||
vec3 Color;
|
||||
} LightMapLayout;
|
||||
|
||||
void main() {
|
||||
Frame = vec4(1);
|
||||
}
|
||||
Binary file not shown.
@@ -1,23 +0,0 @@
|
||||
#version 450
|
||||
|
||||
layout(location = 0) in Fragment {
|
||||
vec3 GeoPos; // Реальная позиция в мире
|
||||
uint VoxMTL; // Материал вокселя
|
||||
vec2 LUV;
|
||||
} fragment;
|
||||
|
||||
layout(location = 0) out vec4 Frame;
|
||||
|
||||
uniform layout(set = 0, binding = 0) sampler2DArray MainAtlas;
|
||||
layout(set = 0, binding = 1) readonly buffer MainAtlasLayoutObj {
|
||||
vec3 Color;
|
||||
} MainAtlasLayout;
|
||||
|
||||
uniform layout(set = 1, binding = 0) sampler2DArray LightMap;
|
||||
layout(set = 1, binding = 1) readonly buffer LightMapLayoutObj {
|
||||
vec3 Color;
|
||||
} LightMapLayout;
|
||||
|
||||
void main() {
|
||||
Frame = vec4(1);
|
||||
}
|
||||
Binary file not shown.
@@ -1,18 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
function compile_shaders() {
|
||||
local source_dir="$1"
|
||||
|
||||
for item in "$source_dir"/*; do
|
||||
filename=$(basename "$item")
|
||||
if [ -d "$item" ]; then
|
||||
compile_shaders "$source_dir"/"$filename"
|
||||
|
||||
elif [ -f "$item" ] && [ $item -nt $item.bin ] && ([[ $filename = *'.frag' ]] || [[ $filename = *'.vert' ]] || [[ $filename = *'.geom' ]]); then
|
||||
echo $filename
|
||||
glslc $item -o $item.bin --target-env=vulkan1.2
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
||||
compile_shaders .
|
||||
Reference in New Issue
Block a user