diff --git a/src/editor/editor.jai b/src/editor/editor.jai index 9f1316f..f94928c 100644 --- a/src/editor/editor.jai +++ b/src/editor/editor.jai @@ -17,7 +17,4 @@ draw_editor_ui :: (theme: *GR.Overall_Theme) { tick_editor_ui :: () { tick_trile_editor(); tick_console(); - - - } diff --git a/src/pipelines.jai b/src/pipelines.jai index fb6d13f..2a5a280 100644 --- a/src/pipelines.jai +++ b/src/pipelines.jai @@ -38,11 +38,13 @@ create_trixel_pipeline :: () { shader_desc := trixel_shader_desc(sg_query_backend()); pipeline.shader = sg_make_shader(*shader_desc); pipeline.layout.buffers[0].stride = 4*3; - pipeline.layout.buffers[1].step_func = .PER_INSTANCE; + pipeline.layout.buffers[1].stride = 4*3; + pipeline.layout.buffers[2].step_func = .PER_INSTANCE; pipeline.layout.attrs[ATTR_trixel_position] = .{ format = .FLOAT3, buffer_index = 0 }; - pipeline.layout.attrs[ATTR_trixel_inst] = .{ format = .FLOAT4, buffer_index = 1 }; - pipeline.layout.attrs[ATTR_trixel_inst_col] = .{ format = .FLOAT4, buffer_index = 1 }; + pipeline.layout.attrs[ATTR_trixel_normal] = .{ format = .FLOAT3, buffer_index = 1 }; + pipeline.layout.attrs[ATTR_trixel_inst] = .{ format = .FLOAT4, buffer_index = 2 }; + pipeline.layout.attrs[ATTR_trixel_inst_col] = .{ format = .FLOAT4, buffer_index = 2 }; pipeline.index_type = .UINT16; pipeline.depth = .{ write_enabled = true, @@ -58,45 +60,77 @@ create_trixel_pipeline :: () { } }; - verts : [24] Vector3; - verts[0] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[1] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[2] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[3] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[4] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[5] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[6] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[7] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; + vertices : [24]Vector3 = .[ + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, -TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, -TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, TRIXEL_SIZE/2}, + .{-TRIXEL_SIZE/2, TRIXEL_SIZE/2, -TRIXEL_SIZE/2} + ]; - verts[8] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[9] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[10] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[11] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; + normals : [24]Vector3 = .[ + .{0.0, 0.0, 1.0}, + .{0.0, 0.0, 1.0}, + .{0.0, 0.0, 1.0}, + .{0.0, 0.0, 1.0}, + .{0.0, 0.0,-1.0}, + .{0.0, 0.0,-1.0}, + .{0.0, 0.0,-1.0}, + .{0.0, 0.0,-1.0}, + .{0.0, 1.0, 0.0}, + .{0.0, 1.0, 0.0}, + .{0.0, 1.0, 0.0}, + .{0.0, 1.0, 0.0}, + .{0.0,-1.0, 0.0}, + .{0.0,-1.0, 0.0}, + .{0.0,-1.0, 0.0}, + .{0.0,-1.0, 0.0}, + .{1.0, 0.0, 0.0}, + .{1.0, 0.0, 0.0}, + .{1.0, 0.0, 0.0}, + .{1.0, 0.0, 0.0}, + .{-1.0, 0.0, 0.0}, + .{-1.0, 0.0, 0.0}, + .{-1.0, 0.0, 0.0}, + .{-1.0, 0.0, 0.0} + ]; - verts[12] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[13] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[14] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[15] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; + k : u16 = 0; + i : u16 = 0; - verts[16] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[17] = .{ -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[18] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[19] = .{ TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; + indices : [36]u16; + + while i < 36 { + indices[i] = 4*k; + indices[i + 1] = 4*k + 1; + indices[i + 2] = 4*k + 2; + indices[i + 3] = 4*k; + indices[i + 4] = 4*k + 2; + indices[i + 5] = 4*k + 3; + k += 1; + i += 6; + } - verts[20] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - verts[21] = .{ -TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[22] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF }; - verts[23] = .{ TRIXEL_SIZE_HALF, TRIXEL_SIZE_HALF, -TRIXEL_SIZE_HALF }; - - indices: [] u16 = .[ - 0, 2, 1, 0, 3, 2, - 4, 6, 5, 4, 7, 6, - 8, 10, 9, 8, 11, 10, - 12, 14, 13, 12, 15, 14, - 16, 18, 17, 16, 19, 18, - 20, 22, 21, 20, 23, 22 - ]; pipeline.color_count = 1; pipeline.colors[0] = color_state; @@ -104,12 +138,14 @@ create_trixel_pipeline :: () { gPipelines.trixel.pipeline = sg_make_pipeline(*pipeline); ibuffer := sg_buffer_desc.{ type = .INDEXBUFFER, data = .{ ptr = indices.data, size = 36 * 2 } }; - vbuffer := sg_buffer_desc.{ data = .{ ptr = verts.data, size = 24 * 3 * 4 } }; + vbuffer := sg_buffer_desc.{ data = .{ ptr = vertices.data, size = 24 * 3 * 4 } }; + nbuffer := sg_buffer_desc.{ data = .{ ptr = normals.data, size = 24 * 3 * 4 } }; instance_buffer := sg_buffer_desc.{ usage = .STREAM, size = 4096 * size_of(Position_Color)}; gPipelines.trixel.bind.index_buffer = sg_make_buffer(*ibuffer); gPipelines.trixel.bind.vertex_buffers[0] = sg_make_buffer(*vbuffer); - gPipelines.trixel.bind.vertex_buffers[1] = sg_make_buffer(*instance_buffer); + gPipelines.trixel.bind.vertex_buffers[1] = sg_make_buffer(*nbuffer); + gPipelines.trixel.bind.vertex_buffers[2] = sg_make_buffer(*instance_buffer); } create_arbtri_pipeline :: () { diff --git a/src/shaders/compile_shaders.sh b/src/shaders/compile_shaders.sh index a315405..7499424 100755 --- a/src/shaders/compile_shaders.sh +++ b/src/shaders/compile_shaders.sh @@ -1,4 +1,5 @@ -rm -rf .jai +rm -rf jai +mkdir jai for filename in *.glsl; do if [ -f "$filename" ]; then diff --git a/src/shaders/jai/shader_trixel.jai b/src/shaders/jai/shader_trixel.jai index d910287..159852c 100644 --- a/src/shaders/jai/shader_trixel.jai +++ b/src/shaders/jai/shader_trixel.jai @@ -14,16 +14,18 @@ Fragment Shader: fs_trixel Attributes: ATTR_trixel_position => 0 - ATTR_trixel_inst => 1 - ATTR_trixel_inst_col => 2 + ATTR_trixel_normal => 1 + ATTR_trixel_inst => 2 + ATTR_trixel_inst_col => 3 Bindings: Uniform block 'vs_params': Jai struct: Vs_Params Bind slot: UB_vs_params => 0 */ ATTR_trixel_position :: 0; -ATTR_trixel_inst :: 1; -ATTR_trixel_inst_col :: 2; +ATTR_trixel_normal :: 1; +ATTR_trixel_inst :: 2; +ATTR_trixel_inst_col :: 3; UB_vs_params :: 0; Vs_Params :: struct { mvp: [16]float; @@ -32,10 +34,11 @@ Vs_Params :: struct { #version 430 uniform vec4 vs_params[4]; - layout(location = 1) in vec4 inst; + layout(location = 2) in vec4 inst; layout(location = 0) in vec4 position; layout(location = 0) out vec4 color; - layout(location = 2) in vec4 inst_col; + layout(location = 3) in vec4 inst_col; + layout(location = 1) in vec4 normal; void main() { @@ -48,25 +51,28 @@ vs_trixel_source_glsl430 := u8.[ 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x34,0x33,0x30,0x0a,0x0a,0x75,0x6e, 0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73,0x5f,0x70,0x61, 0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28, - 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29,0x20,0x69,0x6e, + 0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e, 0x20,0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x3b,0x0a,0x6c,0x61,0x79,0x6f, 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29, 0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, 0x6e,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69, 0x6f,0x6e,0x20,0x3d,0x20,0x30,0x29,0x20,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34, 0x20,0x63,0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c, - 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20, - 0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x0a, - 0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20, - 0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20, - 0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30, - 0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c, - 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76, - 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76, - 0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x79,0x7a, - 0x20,0x2b,0x20,0x69,0x6e,0x73,0x74,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30, - 0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x69, - 0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20, + 0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x6c, + 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, + 0x20,0x31,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x72,0x6d, + 0x61,0x6c,0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29, + 0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69, + 0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72, + 0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b, + 0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d, + 0x29,0x20,0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f, + 0x6e,0x2e,0x78,0x79,0x7a,0x20,0x2b,0x20,0x69,0x6e,0x73,0x74,0x2e,0x78,0x79,0x7a, + 0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f, + 0x72,0x20,0x3d,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x7d,0x0a, + 0x0a,0x00, ]; /* #version 430 @@ -95,10 +101,11 @@ fs_trixel_source_glsl430 := u8.[ #version 300 es uniform vec4 vs_params[4]; - layout(location = 1) in vec4 inst; + layout(location = 2) in vec4 inst; layout(location = 0) in vec4 position; out vec4 color; - layout(location = 2) in vec4 inst_col; + layout(location = 3) in vec4 inst_col; + layout(location = 1) in vec4 normal; void main() { @@ -111,24 +118,27 @@ vs_trixel_source_glsl300es := u8.[ 0x23,0x76,0x65,0x72,0x73,0x69,0x6f,0x6e,0x20,0x33,0x30,0x30,0x20,0x65,0x73,0x0a, 0x0a,0x75,0x6e,0x69,0x66,0x6f,0x72,0x6d,0x20,0x76,0x65,0x63,0x34,0x20,0x76,0x73, 0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x34,0x5d,0x3b,0x0a,0x6c,0x61,0x79,0x6f, - 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31,0x29, + 0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29, 0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x3b,0x0a,0x6c, 0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d, 0x20,0x30,0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x70,0x6f,0x73,0x69, 0x74,0x69,0x6f,0x6e,0x3b,0x0a,0x6f,0x75,0x74,0x20,0x76,0x65,0x63,0x34,0x20,0x63, 0x6f,0x6c,0x6f,0x72,0x3b,0x0a,0x6c,0x61,0x79,0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63, - 0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x32,0x29,0x20,0x69,0x6e,0x20,0x76,0x65, - 0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x0a,0x76,0x6f, - 0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20, - 0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x6d,0x61, - 0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x30,0x5d,0x2c, - 0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x31,0x5d,0x2c,0x20,0x76, - 0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d,0x2c,0x20,0x76,0x73,0x5f, - 0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20,0x2a,0x20,0x76,0x65,0x63, - 0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e,0x78,0x79,0x7a,0x20,0x2b, - 0x20,0x69,0x6e,0x73,0x74,0x2e,0x78,0x79,0x7a,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b, - 0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x69,0x6e,0x73, - 0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + 0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x33,0x29,0x20,0x69,0x6e,0x20,0x76,0x65, + 0x63,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x6c,0x61,0x79, + 0x6f,0x75,0x74,0x28,0x6c,0x6f,0x63,0x61,0x74,0x69,0x6f,0x6e,0x20,0x3d,0x20,0x31, + 0x29,0x20,0x69,0x6e,0x20,0x76,0x65,0x63,0x34,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c, + 0x3b,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b, + 0x0a,0x20,0x20,0x20,0x20,0x67,0x6c,0x5f,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e, + 0x20,0x3d,0x20,0x6d,0x61,0x74,0x34,0x28,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d, + 0x73,0x5b,0x30,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b, + 0x31,0x5d,0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x32,0x5d, + 0x2c,0x20,0x76,0x73,0x5f,0x70,0x61,0x72,0x61,0x6d,0x73,0x5b,0x33,0x5d,0x29,0x20, + 0x2a,0x20,0x76,0x65,0x63,0x34,0x28,0x70,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x2e, + 0x78,0x79,0x7a,0x20,0x2b,0x20,0x69,0x6e,0x73,0x74,0x2e,0x78,0x79,0x7a,0x2c,0x20, + 0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x63,0x6f,0x6c,0x6f,0x72,0x20, + 0x3d,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x00, + ]; /* #version 300 es @@ -177,8 +187,8 @@ fs_trixel_source_glsl300es := u8.[ struct main0_in { float4 position [[attribute(0)]]; - float4 inst [[attribute(1)]]; - float4 inst_col [[attribute(2)]]; + float4 inst [[attribute(2)]]; + float4 inst_col [[attribute(3)]]; }; vertex main0_out main0(main0_in in [[stage_in]], constant vs_params& _26 [[buffer(0)]]) @@ -209,9 +219,9 @@ vs_trixel_source_metal_macos := u8.[ 0x74,0x69,0x6f,0x6e,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65, 0x28,0x30,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74, 0x34,0x20,0x69,0x6e,0x73,0x74,0x20,0x5b,0x5b,0x61,0x74,0x74,0x72,0x69,0x62,0x75, - 0x74,0x65,0x28,0x31,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, + 0x74,0x65,0x28,0x32,0x29,0x5d,0x5d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f, 0x61,0x74,0x34,0x20,0x69,0x6e,0x73,0x74,0x5f,0x63,0x6f,0x6c,0x20,0x5b,0x5b,0x61, - 0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x32,0x29,0x5d,0x5d,0x3b,0x0a,0x7d, + 0x74,0x74,0x72,0x69,0x62,0x75,0x74,0x65,0x28,0x33,0x29,0x5d,0x5d,0x3b,0x0a,0x7d, 0x3b,0x0a,0x0a,0x76,0x65,0x72,0x74,0x65,0x78,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f, 0x6f,0x75,0x74,0x20,0x6d,0x61,0x69,0x6e,0x30,0x28,0x6d,0x61,0x69,0x6e,0x30,0x5f, 0x69,0x6e,0x20,0x69,0x6e,0x20,0x5b,0x5b,0x73,0x74,0x61,0x67,0x65,0x5f,0x69,0x6e, @@ -287,9 +297,11 @@ trixel_shader_desc :: (backend: sg_backend) -> sg_shader_desc { desc.attrs[0].base_type = .FLOAT; desc.attrs[0].glsl_name = "position"; desc.attrs[1].base_type = .FLOAT; - desc.attrs[1].glsl_name = "inst"; + desc.attrs[1].glsl_name = "normal"; desc.attrs[2].base_type = .FLOAT; - desc.attrs[2].glsl_name = "inst_col"; + desc.attrs[2].glsl_name = "inst"; + desc.attrs[3].base_type = .FLOAT; + desc.attrs[3].glsl_name = "inst_col"; desc.uniform_blocks[0].stage = .VERTEX; desc.uniform_blocks[0].layout = .STD140; desc.uniform_blocks[0].size = 64; @@ -304,9 +316,11 @@ trixel_shader_desc :: (backend: sg_backend) -> sg_shader_desc { desc.attrs[0].base_type = .FLOAT; desc.attrs[0].glsl_name = "position"; desc.attrs[1].base_type = .FLOAT; - desc.attrs[1].glsl_name = "inst"; + desc.attrs[1].glsl_name = "normal"; desc.attrs[2].base_type = .FLOAT; - desc.attrs[2].glsl_name = "inst_col"; + desc.attrs[2].glsl_name = "inst"; + desc.attrs[3].base_type = .FLOAT; + desc.attrs[3].glsl_name = "inst_col"; desc.uniform_blocks[0].stage = .VERTEX; desc.uniform_blocks[0].layout = .STD140; desc.uniform_blocks[0].size = 64; @@ -321,6 +335,7 @@ trixel_shader_desc :: (backend: sg_backend) -> sg_shader_desc { desc.attrs[0].base_type = .FLOAT; desc.attrs[1].base_type = .FLOAT; desc.attrs[2].base_type = .FLOAT; + desc.attrs[3].base_type = .FLOAT; desc.uniform_blocks[0].stage = .VERTEX; desc.uniform_blocks[0].layout = .STD140; desc.uniform_blocks[0].size = 64; diff --git a/src/shaders/shader_trixel.glsl b/src/shaders/shader_trixel.glsl index 06cde24..5a876c5 100644 --- a/src/shaders/shader_trixel.glsl +++ b/src/shaders/shader_trixel.glsl @@ -1,6 +1,7 @@ @vs vs_trixel in vec4 position; +in vec4 normal; in vec4 inst; in vec4 inst_col; @@ -10,21 +11,24 @@ layout(binding=0) uniform vs_params { out vec4 color; +out vec4 fnormal; void main() { vec3 instancepos = inst.xyz; gl_Position = mvp * (vec4(position.xyz + instancepos, 1.0)); + fnormal = normal; color = inst_col; } @end @fs fs_trixel in vec4 color; +in vec4 fnormal; out vec4 frag_color; void main() { - frag_color = color; + frag_color = color * 0.1 + fnormal; } @end diff --git a/src/shapes.jai b/src/shapes.jai new file mode 100644 index 0000000..df20130 --- /dev/null +++ b/src/shapes.jai @@ -0,0 +1,8 @@ +Shape :: struct { + verts : [..]Vector4; + normals : [..]Vector4; +} + +create_cube :: () { + +}