luboslenco 4 ماه پیش
والد
کامیت
62cffd93ab

+ 6 - 6
armorpaint/sources/make_mesh.ts

@@ -433,7 +433,7 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.OBJECT_NORMAL) {
 			kong.frag_nattr = true;
-			node_shader_write_frag(kong, "output[1] = float4(nattr, 1.0);");
+			node_shader_write_frag(kong, "output[1] = float4(input.nattr, 1.0);");
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.MATERIAL_ID) {
 			let id: i32 = context_raw.layer.id;
@@ -446,11 +446,11 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
 			node_shader_write_frag(kong, "output[1] = float4(matid_r, matid_g, matid_b, 1.0);");
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.OBJECT_ID) {
-			node_shader_add_constant(kong, "float object_id", "_object_id");
-			node_shader_write_frag(kong, "float obid = constants.object_id + 1.0 / 255.0;");
-			node_shader_write_frag(kong, "float id_r = frac(sin(dot(float2(obid, obid * 20.0), float2(12.9898, 78.233))) * 43758.5453);");
-			node_shader_write_frag(kong, "float id_g = frac(sin(dot(float2(obid * 20.0, obid), float2(12.9898, 78.233))) * 43758.5453);");
-			node_shader_write_frag(kong, "float id_b = frac(sin(dot(float2(obid, obid * 40.0), float2(12.9898, 78.233))) * 43758.5453);");
+			node_shader_add_constant(kong, "object_id: float", "_object_id");
+			node_shader_write_frag(kong, "var obid: float = constants.object_id + 1.0 / 255.0;");
+			node_shader_write_frag(kong, "var id_r: float = frac(sin(dot(float2(obid, obid * 20.0), float2(12.9898, 78.233))) * 43758.5453);");
+			node_shader_write_frag(kong, "var id_g: float = frac(sin(dot(float2(obid * 20.0, obid), float2(12.9898, 78.233))) * 43758.5453);");
+			node_shader_write_frag(kong, "var id_b: float = frac(sin(dot(float2(obid, obid * 40.0), float2(12.9898, 78.233))) * 43758.5453);");
 			node_shader_write_frag(kong, "output[1] = float4(id_r, id_g, id_b, 1.0);");
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.MASK && (slot_layer_get_masks(context_raw.layer) != null || slot_layer_is_mask(context_raw.layer))) {

+ 1 - 1
armorsculpt/sources/make_mesh.ts

@@ -294,7 +294,7 @@ function make_mesh_run(data: material_t, layer_pass: i32 = 0): node_shader_conte
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.OBJECT_NORMAL) {
 			kong.frag_nattr = true;
-			node_shader_write_frag(kong, "output[1] = float4(nAttr, 1.0);");
+			node_shader_write_frag(kong, "output[1] = float4(input.nattr, 1.0);");
 		}
 		else if (context_raw.viewport_mode == viewport_mode_t.OBJECT_ID) {
 			node_shader_add_constant(kong, "object_id: float", "_object_id");

+ 4 - 4
base/shaders/cursor.kong

@@ -17,9 +17,10 @@ const sampler_linear: sampler;
 const gbufferD: tex2d;
 
 struct vert_in {
-	pos: float4; // hlsl
-	nor: float2; // hlsl
+	pos: float4;
+	nor: float2;
 	tex: float2;
+	col: float4;
 }
 
 struct vert_out {
@@ -46,8 +47,7 @@ fun get_normal(p0: float3, uv: float2): float3 {
 // }
 
 fun cursor_vert(input: vert_in): vert_out {
-
-	var keep: float = input.pos.x + input.nor.x; // hlsl
+	var keep: float = input.pos.x + input.nor.x + input.col.x; // hlsl
 
 	var output: vert_out;
 	output.tex = input.tex;

+ 3 - 1
base/sources/backends/metal_gpu.m

@@ -252,6 +252,8 @@ void iron_gpu_internal_init_window(int depth_buffer_bits, bool vsync) {
 	// device.makeArgumentEncoder(bufferIndex:)
 
 	argument_buffer_step = [argument_encoder encodedLength];
+	// int align = [argument_encoder alignment];
+	// argument_buffer_step += (align - (argument_buffer_step % align)) % align;
 	argument_buffer = [device newBufferWithLength:(argument_buffer_step * 2048) options:MTLResourceStorageModeShared];
 	for (int i = 0; i < 2048; ++i) {
 		[argument_encoder setArgumentBuffer:argument_buffer offset:argument_buffer_step * i];
@@ -520,7 +522,7 @@ void iron_gpu_command_list_set_constant_buffer(iron_gpu_command_list_t *list, ir
 	id<MTLBuffer> buf = (__bridge id<MTLBuffer>)buffer->impl._buffer;
 	int i = constant_buffer_index;
 	[argument_encoder setArgumentBuffer:argument_buffer offset:argument_buffer_step * i];
-	[argument_encoder setBuffer:buf offset:offset atIndex:0 ];
+	[argument_encoder setBuffer:buf offset:offset atIndex:0];
 	[command_encoder setVertexBuffer:argument_buffer offset:argument_buffer_step * i atIndex:1];
     [command_encoder setFragmentBuffer:argument_buffer offset:argument_buffer_step * i atIndex:1];
 	[command_encoder useResource:buf usage:MTLResourceUsageRead];

+ 1 - 1
base/sources/iron_draw.c

@@ -208,7 +208,7 @@ void draw_init(buffer_t *image_vert, buffer_t *image_frag, buffer_t *rect_vert,
 		tris_pos2_loc = iron_gpu_pipeline_get_constant_location(&tris_pipeline, "pos2");
 		tris_pos2_loc.impl.vertexOffset = 80;
 		tris_col_loc = iron_gpu_pipeline_get_constant_location(&tris_pipeline, "col");
-		tris_col_loc.impl.vertexOffset = 96;
+		tris_col_loc.impl.vertexOffset = 96; // 88 with 16 align
 	}
 
 	// Text painter

+ 1 - 1
base/sources/iron_gpu.c

@@ -50,7 +50,7 @@ void gpu_draw(void) {
 
 void gpu_begin() {
 	constant_buffer_index = 0;
-	iron_gpu_constant_buffer_lock(&constant_buffer, constant_buffer_index, CONSTANT_BUFFER_SIZE);
+	iron_gpu_constant_buffer_lock(&constant_buffer, constant_buffer_index * CONSTANT_BUFFER_SIZE, CONSTANT_BUFFER_SIZE);
 	framebuffer_index = (framebuffer_index + 1) % FRAMEBUFFER_COUNT;
 
 	// if (window_resized) {

+ 24 - 4
base/sources/ts/iron/shader_data.ts

@@ -158,12 +158,33 @@ function shader_context_compile(raw: shader_context_t): shader_context_t {
 	return shader_context_finish_compile(raw);
 }
 
+///if arm_metal
+
+function shader_context_type_size(t: string): i32 {
+	if (t == "int") return 4;
+	if (t == "float") return 4;
+	if (t == "vec2") return 8;
+	if (t == "vec3") return 16;
+	if (t == "vec4") return 16;
+	if (t == "mat3") return 48;
+	if (t == "mat4") return 64;
+	return 0;
+}
+
+function shader_context_type_pad(offset: i32, size: i32): i32 {
+	if (size > 16) {
+		size = 16;
+	}
+	return (size - (offset % size)) % size;
+}
+
+///else
+
 function shader_context_type_size(t: string): i32 {
 	if (t == "int") return 4;
 	if (t == "float") return 4;
 	if (t == "vec2") return 8;
 	if (t == "vec3") return 12;
-	// if (t == "vec3") return 16;
 	if (t == "vec4") return 16;
 	if (t == "mat3") return 48;
 	if (t == "mat4") return 64;
@@ -171,9 +192,6 @@ function shader_context_type_size(t: string): i32 {
 }
 
 function shader_context_type_pad(offset: i32, size: i32): i32 {
-	///if arm_metal
-	// return 0;
-	///end
 	let r: i32 = offset % 16;
 	if (r == 0) {
 		return 0;
@@ -184,6 +202,8 @@ function shader_context_type_pad(offset: i32, size: i32): i32 {
 	return 0;
 }
 
+///end
+
 function shader_context_finish_compile(raw: shader_context_t): shader_context_t {
 	gpu_compile_pipeline(raw._.pipe_state);
 

+ 1 - 1
base/sources/ts/node_shader.ts

@@ -219,7 +219,7 @@ function node_shader_get(raw: node_shader_t): string {
 	s += raw.vert_normal;
 	s += raw.vert;
 	s += raw.vert_end;
-	s += "output.pos.z = (output.pos.z + output.pos.w) * 0.5;\n";
+	s += "output.pos.z = (output.pos.z + output.pos.w) * 0.5;\n"; ////
 	s += "\n\treturn output;\n";
 	s += "}\n\n";
 

+ 1 - 1
base/sources/ts/parser_material.ts

@@ -251,7 +251,7 @@ function parser_material_finalize(con: node_shader_context_t) {
 		node_shader_write_attrib_vert(kong, "var wnormal: float3 = normalize(constants.N * float3(input.nor.xy, input.pos.w));");
 	}
 	if (kong.frag_nattr) {
-		node_shader_add_out(kong, "var nattr: float3");
+		node_shader_add_out(kong, "nattr: float3");
 		node_shader_write_attrib_vert(kong, "output.nattr = float3(input.nor.xy, input.pos.w);");
 	}
 	if (kong.frag_dotnv) {

+ 1 - 0
base/sources/ts/pipes.ts

@@ -266,6 +266,7 @@ function pipes_init() {
 		gpu_vertex_struct_add(vs, "pos", vertex_data_t.I16_4X_NORM);
 		gpu_vertex_struct_add(vs, "nor", vertex_data_t.I16_2X_NORM);
 		gpu_vertex_struct_add(vs, "tex", vertex_data_t.I16_2X_NORM);
+		gpu_vertex_struct_add(vs, "col", vertex_data_t.I16_4X_NORM);
 		pipes_cursor.input_layout = vs;
 		pipes_cursor.blend_source = blend_factor_t.SOURCE_ALPHA;
 		pipes_cursor.blend_destination = blend_factor_t.INV_SOURCE_ALPHA;