Skip to content

Commit de90fc7

Browse files
committed
voxel
1 parent 2fb80bc commit de90fc7

18 files changed

Lines changed: 396 additions & 7 deletions

CMakeLists.txt

Lines changed: 57 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${BINARY_DIR})
1111
make_directory(${BINARY_DIR})
1212

1313
add_subdirectory(lib/SDL)
14-
1514
add_executable(blocks WIN32
1615
lib/sqlite3/sqlite3.c
1716
lib/stb/stb.c
@@ -21,11 +20,63 @@ add_executable(blocks WIN32
2120
src/chunk.c
2221
src/main.c
2322
src/map.c
23+
src/voxel.c
2424
src/world.c
2525
)
26+
set_target_properties(blocks PROPERTIES C_STANDARD 11)
27+
target_link_libraries(blocks PRIVATE SDL3::SDL3)
2628

27-
target_link_libraries(blocks PRIVATE
28-
SDL3::SDL3
29-
)
30-
31-
set_target_properties(blocks PROPERTIES C_STANDARD 11)
29+
function(add_shader FILE)
30+
set(DEPENDS ${ARGN})
31+
set(HLSL ${CMAKE_SOURCE_DIR}/shaders/${FILE})
32+
set(SPV ${CMAKE_SOURCE_DIR}/shaders/bin/${FILE}.spv)
33+
set(DXIL ${CMAKE_SOURCE_DIR}/shaders/bin/${FILE}.dxil)
34+
set(MSL ${CMAKE_SOURCE_DIR}/shaders/bin/${FILE}.msl)
35+
set(JSON ${CMAKE_SOURCE_DIR}/shaders/bin/${FILE}.json)
36+
if(MSVC)
37+
set(SHADERCROSS lib/SDL_shadercross/msvc/shadercross.exe)
38+
endif()
39+
function(compile OUTPUT)
40+
add_custom_command(
41+
OUTPUT ${OUTPUT}
42+
COMMAND ${SHADERCROSS} ${HLSL} -s hlsl -o ${OUTPUT} -I src
43+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
44+
DEPENDS ${HLSL} ${DEPENDS}
45+
COMMENT ${OUTPUT}
46+
)
47+
get_filename_component(NAME ${OUTPUT} NAME)
48+
string(REPLACE . _ NAME ${NAME})
49+
set(NAME compile_${NAME})
50+
add_custom_target(${NAME} DEPENDS ${OUTPUT})
51+
add_dependencies(blocks ${NAME})
52+
endfunction()
53+
if (MSVC)
54+
compile(${SPV})
55+
compile(${DXIL})
56+
compile(${MSL})
57+
compile(${JSON})
58+
endif()
59+
function(package OUTPUT)
60+
get_filename_component(NAME ${OUTPUT} NAME)
61+
set(BINARY ${BINARY_DIR}/${NAME})
62+
add_custom_command(
63+
OUTPUT ${BINARY}
64+
COMMAND ${CMAKE_COMMAND} -E copy ${OUTPUT} ${BINARY}
65+
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
66+
DEPENDS ${OUTPUT}
67+
COMMENT ${BINARY}
68+
)
69+
string(REPLACE . _ NAME ${NAME})
70+
set(NAME package_${NAME})
71+
add_custom_target(${NAME} DEPENDS ${BINARY})
72+
add_dependencies(blocks ${NAME})
73+
endfunction()
74+
if(APPLE)
75+
package(${MSL})
76+
else()
77+
package(${SPV})
78+
endif()
79+
package(${JSON})
80+
endfunction()
81+
add_shader(chunk.vert shaders/voxel.hlsl src/voxel_config.h)
82+
add_shader(chunk.frag)

shaders/bin/chunk.frag.dxil

3.64 KB
Binary file not shown.

shaders/bin/chunk.frag.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "samplers": 1, "storage_textures": 0, "storage_buffers": 0, "uniform_buffers": 0, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "float3", "location": 0 }], "outputs": [{ "name": "out.var.SV_Target0", "type": "float4", "location": 0 }] }

shaders/bin/chunk.frag.msl

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include <metal_stdlib>
2+
#include <simd/simd.h>
3+
4+
using namespace metal;
5+
6+
struct main0_out
7+
{
8+
float4 out_var_SV_Target0 [[color(0)]];
9+
};
10+
11+
struct main0_in
12+
{
13+
float3 in_var_TEXCOORD0 [[user(locn0)]];
14+
};
15+
16+
fragment main0_out main0(main0_in in [[stage_in]], texture2d_array<float> Texture [[texture(0)]], sampler Sampler [[sampler(0)]])
17+
{
18+
main0_out out = {};
19+
out.out_var_SV_Target0 = Texture.sample(Sampler, in.in_var_TEXCOORD0.xy, uint(rint(in.in_var_TEXCOORD0.z)));
20+
return out;
21+
}
22+

shaders/bin/chunk.frag.spv

760 Bytes
Binary file not shown.

shaders/bin/chunk.vert.dxil

3.84 KB
Binary file not shown.

shaders/bin/chunk.vert.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
{ "samplers": 0, "storage_textures": 0, "storage_buffers": 0, "uniform_buffers": 1, "inputs": [{ "name": "in.var.TEXCOORD0", "type": "uint", "location": 0 }], "outputs": [{ "name": "out.var.TEXCOORD0", "type": "float3", "location": 0 }] }

shaders/bin/chunk.vert.msl

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#include <metal_stdlib>
2+
#include <simd/simd.h>
3+
4+
using namespace metal;
5+
6+
struct type_UniformBuffer
7+
{
8+
float4x4 Transform;
9+
};
10+
11+
struct main0_out
12+
{
13+
float3 out_var_TEXCOORD0 [[user(locn0)]];
14+
float4 gl_Position [[position]];
15+
};
16+
17+
struct main0_in
18+
{
19+
uint in_var_TEXCOORD0 [[attribute(0)]];
20+
};
21+
22+
vertex main0_out main0(main0_in in [[stage_in]], constant type_UniformBuffer& UniformBuffer [[buffer(0)]])
23+
{
24+
main0_out out = {};
25+
out.gl_Position = UniformBuffer.Transform * float4(float(in.in_var_TEXCOORD0 & 31u), float((in.in_var_TEXCOORD0 >> 5u) & 255u), float((in.in_var_TEXCOORD0 >> 13u) & 31u), 1.0);
26+
out.out_var_TEXCOORD0 = float3(float((in.in_var_TEXCOORD0 >> 18u) & 1u), float((in.in_var_TEXCOORD0 >> 19u) & 1u), float((in.in_var_TEXCOORD0 >> 20u) & 63u));
27+
return out;
28+
}
29+

shaders/bin/chunk.vert.spv

1.29 KB
Binary file not shown.

shaders/chunk.frag

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
Texture2DArray<float4> Texture : register(t0, space2);
2+
SamplerState Sampler : register(s0, space2);
3+
4+
struct Input
5+
{
6+
float3 Texcoord : TEXCOORD0;
7+
};
8+
9+
float4 main(Input input) : SV_Target0
10+
{
11+
return Texture.Sample(Sampler, input.Texcoord);
12+
}

0 commit comments

Comments
 (0)