water improvement test
This commit is contained in:
parent
39f187689e
commit
857338993b
@ -28,7 +28,9 @@ game_tick :: () {
|
||||
}
|
||||
|
||||
game_draw :: () {
|
||||
create_set_cam_rendering_task(cam);
|
||||
curworld := get_current_world();
|
||||
if curworld.valid then create_world_rendering_tasks(curworld.world);
|
||||
if curworld.valid {
|
||||
create_set_cam_rendering_task(cam, curworld.world.conf.planeHeight);
|
||||
create_world_rendering_tasks(curworld.world);
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
{
|
||||
"exposure": -0.252874,
|
||||
"contrast": 1.604926,
|
||||
"saturation": 0,
|
||||
"gamma": 2.162069,
|
||||
"exposure": 0.057475,
|
||||
"contrast": 2.06763,
|
||||
"saturation": 1.202777,
|
||||
"gamma": 1.019477,
|
||||
"tonemap": 1
|
||||
}
|
||||
@ -361,7 +361,7 @@ tick_level_editor :: () {
|
||||
draw_level_editor :: () {
|
||||
curworld := get_current_world();
|
||||
if !curworld.valid then return;
|
||||
create_set_cam_rendering_task(get_level_editor_camera());
|
||||
create_set_cam_rendering_task(get_level_editor_camera(), curworld.world.conf.planeHeight);
|
||||
create_world_rendering_tasks(curworld.world);
|
||||
}
|
||||
|
||||
|
||||
@ -18,7 +18,7 @@ tick_post_process_editor :: () {
|
||||
draw_post_process_editor :: () {
|
||||
curworld := get_current_world();
|
||||
if !curworld.valid then return;
|
||||
create_set_cam_rendering_task(get_post_processing_camera());
|
||||
create_set_cam_rendering_task(get_post_processing_camera(), curworld.world.conf.planeHeight);
|
||||
create_world_rendering_tasks(curworld.world);
|
||||
}
|
||||
|
||||
|
||||
@ -304,7 +304,7 @@ draw_material_tab :: (theme: *GR.Overall_Theme, area: GR.Rect) {
|
||||
|
||||
|
||||
draw_trile_editor :: () {
|
||||
create_set_cam_rendering_task(get_trile_editor_camera());
|
||||
create_set_cam_rendering_task(get_trile_editor_camera(), 0.0);
|
||||
w := New(World,, temp);
|
||||
create_sky_rendering_task(*w.conf);
|
||||
create_trixel_rendering_task(editor_current_trile, *colorMuls);
|
||||
|
||||
@ -7,6 +7,7 @@ current_trile_offset_index : s32 = 0;
|
||||
|
||||
current_world_config : *World_Config = null;
|
||||
in_shadowmap_pass : bool = false;
|
||||
in_reflection_pass : bool = false;
|
||||
shadow_mvp : Matrix4;
|
||||
|
||||
backend_handle_command :: (cmd: *Render_Command) {
|
||||
@ -124,7 +125,12 @@ backend_draw_trile_positions :: (trile : string, amount : s32, worldConf: *World
|
||||
bindings.samplers[0] = gPipelines.trile.bind.samplers[0];
|
||||
bindings.images[0] = trilegfx.trixel_colors;
|
||||
|
||||
fs_params : Trile_Fs_Params;
|
||||
fs_params.mvp_shadow = shadow_mvp.floats;
|
||||
fs_params.is_reflection = ifx in_reflection_pass then cast(s32)1 else cast(s32)0;
|
||||
|
||||
sg_apply_bindings(*bindings);
|
||||
sg_apply_uniforms(UB_trile_fs_params, *(sg_range.{ ptr = *fs_params, size = size_of(type_of(fs_params)) }));
|
||||
sg_apply_uniforms(UB_trile_vs_params, *(sg_range.{ ptr = *vs_params, size = size_of(type_of(vs_params))}));
|
||||
sg_apply_uniforms(UB_trile_world_config, *(sg_range.{ptr = *world_conf, size = size_of(type_of(world_conf))}));
|
||||
sg_draw(0, cast(s32) trilegfx.vertex_count, amount);
|
||||
@ -160,7 +166,9 @@ backend_draw_ground :: (wc: *World_Config) {
|
||||
|
||||
fs_params : Plane_Fs_Params;
|
||||
fs_params.mvp_shadow = shadow_mvp.floats;
|
||||
fs_params.is_reflection = ifx in_reflection_pass then cast(s32)1 else cast(s32)0;
|
||||
vs_params.mvp = mvp.floats;
|
||||
vs_params.planeHeight = wc.planeHeight;
|
||||
sg_apply_pipeline(gPipelines.plane.pipeline);
|
||||
gPipelines.plane.bind.samplers[2] = g_shadowmap_sampler;
|
||||
gPipelines.plane.bind.images[2] = g_shadowmap;
|
||||
@ -169,7 +177,7 @@ backend_draw_ground :: (wc: *World_Config) {
|
||||
sg_apply_uniforms(UB_plane_fs_params, *(sg_range.{ ptr = *fs_params, size = size_of(type_of(fs_params)) }));
|
||||
sg_apply_uniforms(UB_plane_world_config, *(sg_range.{ptr = *world_conf, size = size_of(type_of(world_conf))}));
|
||||
sg_apply_uniforms(UB_plane_data, *(sg_range.{ptr = *plane_data, size = size_of(type_of(plane_data))}));
|
||||
sg_draw(0, 6, 1);
|
||||
sg_draw(0, 6, 2);
|
||||
}
|
||||
|
||||
backend_process_command_buckets :: () {
|
||||
@ -192,9 +200,11 @@ backend_process_command_buckets :: () {
|
||||
|
||||
// 2. Reflection pass
|
||||
sg_begin_pass(*(sg_pass.{ action = state.pass_action_clear, attachments = gPipelines.plane.attachments}));
|
||||
in_reflection_pass = true;
|
||||
for render_command_buckets.reflection {
|
||||
backend_handle_command(it);
|
||||
}
|
||||
in_reflection_pass = false;
|
||||
sg_end_pass();
|
||||
current_trile_offset_index = 0; // This is not optimal, but it is nice and simple.
|
||||
|
||||
|
||||
@ -15,7 +15,6 @@ fill_uniform_with_engine_data :: (uniform: *$A, enginedata: *$B) {
|
||||
create_world_rendering_tasks :: (world: *World) {
|
||||
create_sky_rendering_task(*world.conf);
|
||||
create_set_light_rendering_task(*world.conf);
|
||||
create_ground_rendering_task(world);
|
||||
for world.positions {
|
||||
if it.positions.count < 1 then continue;
|
||||
triletask := Rendering_Task_Trile.{};
|
||||
@ -24,6 +23,7 @@ create_world_rendering_tasks :: (world: *World) {
|
||||
triletask.worldConf = *world.conf;
|
||||
add_rendering_task(triletask);
|
||||
}
|
||||
create_ground_rendering_task(world);
|
||||
}
|
||||
|
||||
create_sky_rendering_task :: (conf: *World_Config) {
|
||||
@ -47,8 +47,8 @@ create_ground_rendering_task :: (world: *World) {
|
||||
add_rendering_task(groundtask);
|
||||
}
|
||||
|
||||
create_set_cam_rendering_task :: (cam: Camera) {
|
||||
camtask := Rendering_Task_Set_Camera.{type = .SET_CAMERA, camera = cam};
|
||||
create_set_cam_rendering_task :: (cam: Camera, planeHeight: float) {
|
||||
camtask := Rendering_Task_Set_Camera.{type = .SET_CAMERA, camera = cam, planeHeight = planeHeight};
|
||||
add_rendering_task(camtask);
|
||||
}
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
Post_Process :: struct {
|
||||
exposure : float = 0.0; @Slider,-1,1,0.1;
|
||||
contrast : float = 1.0; @Slider,0.1,4.0,0.1;
|
||||
saturation : float;
|
||||
saturation : float = 1.0; @Slider,0.0,2.0,0.1;
|
||||
gamma : float = 1.0; @Slider,0.3,3.0,0.1;
|
||||
tonemap : float = 1.0; @Slider,0,1,1;
|
||||
}
|
||||
|
||||
@ -71,10 +71,11 @@ create_shadow_viewproj :: (cam: *Camera, conf: *World_Config) -> Matrix4 {
|
||||
max_v.y = max(max_v.y, transformed_corner.y);
|
||||
max_v.z = max(max_v.z, transformed_corner.z);
|
||||
}
|
||||
max_v.xy = avg.xy + Vector2.{50, 50};
|
||||
min_v.xy = avg.xy - Vector2.{50, 50};
|
||||
transformed_avg := (view * Vector4.{avg.x, avg.y, avg.z, 1.0}).xyz;
|
||||
max_v.xy = transformed_avg.xy + Vector2.{50, 50};
|
||||
min_v.xy = transformed_avg.xy - Vector2.{50, 50};
|
||||
|
||||
proj := matrix_ortho(min_v.x, max_v.x, min_v.y, max_v.y, -max_v.z-100, -min_v.z);
|
||||
proj := matrix_ortho(min_v.x, max_v.x, min_v.y, max_v.y, -min_v.z, -max_v.z-100);
|
||||
return view*proj;
|
||||
}
|
||||
|
||||
|
||||
@ -57,6 +57,7 @@ Rendering_Task_Trixels :: struct {
|
||||
Rendering_Task_Set_Camera :: struct {
|
||||
#as using t : Rendering_Task;
|
||||
camera : Camera;
|
||||
planeHeight : float;
|
||||
}
|
||||
|
||||
rendering_tasklist_clear :: () {
|
||||
@ -116,13 +117,16 @@ tasks_to_commands :: () {
|
||||
array_add(*render_command_buckets.setup, commandGenGround);
|
||||
array_add(*render_command_buckets.main, commandDrawGround);
|
||||
case .SET_CAMERA;
|
||||
task := (cast(*Rendering_Task_Set_Camera)it);
|
||||
command := New(Render_Command_Set_Camera,, temp);
|
||||
command.camera = (cast(*Rendering_Task_Set_Camera)it).camera;
|
||||
command.camera = task.camera;
|
||||
array_add(*render_command_buckets.main, command);
|
||||
commandReflected := New(Render_Command_Set_Camera,, temp);
|
||||
commandReflected.camera = (cast(*Rendering_Task_Set_Camera)it).camera;
|
||||
commandReflected.camera = task.camera;
|
||||
commandReflected.camera.target *= Vector3.{1, -1, 1};
|
||||
commandReflected.camera.position *= Vector3.{1, -1, 1};
|
||||
commandReflected.camera.target.y += task.planeHeight * 2;
|
||||
commandReflected.camera.position.y += task.planeHeight * 2;
|
||||
array_add(*render_command_buckets.reflection, commandReflected);
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -100,7 +100,8 @@ vs_pp_source_glsl430 := u8.[
|
||||
{
|
||||
tonemapped = _61;
|
||||
}
|
||||
frag_color = vec4((((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x), 1.0);
|
||||
vec3 _106 = (((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x);
|
||||
frag_color = vec4(mix(vec3(((0.2125000059604644775390625 * _106.x) + (0.7153999805450439453125 * _106.y)) + (0.07209999859333038330078125 * _106.z)), _106, vec3(post_process_config[0].z)), 1.0);
|
||||
}
|
||||
|
||||
*/
|
||||
@ -152,18 +153,30 @@ fs_pp_source_glsl430 := u8.[
|
||||
0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,
|
||||
0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,
|
||||
0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,
|
||||
0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,
|
||||
0x63,0x34,0x28,0x28,0x28,0x28,0x70,0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,
|
||||
0x70,0x70,0x65,0x64,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,
|
||||
0x20,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,
|
||||
0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x77,0x29,0x29,0x20,0x2d,0x20,0x76,0x65,
|
||||
0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x6d,0x61,0x78,0x28,0x70,
|
||||
0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,
|
||||
0x69,0x67,0x5b,0x30,0x5d,0x2e,0x79,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,
|
||||
0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,
|
||||
0x63,0x33,0x28,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,
|
||||
0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,0x78,0x29,0x2c,0x20,0x31,0x2e,
|
||||
0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
||||
0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x30,0x36,0x20,0x3d,0x20,0x28,0x28,0x28,
|
||||
0x70,0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,
|
||||
0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x70,0x6f,0x73,0x74,0x5f,
|
||||
0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,
|
||||
0x5d,0x2e,0x77,0x29,0x29,0x20,0x2d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x35,
|
||||
0x29,0x29,0x20,0x2a,0x20,0x6d,0x61,0x78,0x28,0x70,0x6f,0x73,0x74,0x5f,0x70,0x72,
|
||||
0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,0x2e,
|
||||
0x79,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,
|
||||
0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x70,0x6f,0x73,
|
||||
0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,
|
||||
0x5b,0x30,0x5d,0x2e,0x78,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,
|
||||
0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x69,
|
||||
0x78,0x28,0x76,0x65,0x63,0x33,0x28,0x28,0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x30,
|
||||
0x30,0x30,0x30,0x35,0x39,0x36,0x30,0x34,0x36,0x34,0x34,0x37,0x37,0x35,0x33,0x39,
|
||||
0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,0x2e,0x78,0x29,0x20,0x2b,
|
||||
0x20,0x28,0x30,0x2e,0x37,0x31,0x35,0x33,0x39,0x39,0x39,0x38,0x30,0x35,0x34,0x35,
|
||||
0x30,0x34,0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,
|
||||
0x36,0x2e,0x79,0x29,0x29,0x20,0x2b,0x20,0x28,0x30,0x2e,0x30,0x37,0x32,0x30,0x39,
|
||||
0x39,0x39,0x39,0x38,0x35,0x39,0x33,0x33,0x33,0x30,0x33,0x38,0x33,0x33,0x30,0x30,
|
||||
0x37,0x38,0x31,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,0x2e,0x7a,0x29,0x29,
|
||||
0x2c,0x20,0x5f,0x31,0x30,0x36,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x70,0x6f,0x73,
|
||||
0x74,0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,
|
||||
0x5b,0x30,0x5d,0x2e,0x7a,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,
|
||||
0x0a,0x0a,0x00,
|
||||
];
|
||||
/*
|
||||
#version 300 es
|
||||
@ -224,7 +237,8 @@ vs_pp_source_glsl300es := u8.[
|
||||
{
|
||||
tonemapped = _61;
|
||||
}
|
||||
frag_color = vec4((((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x), 1.0);
|
||||
highp vec3 _106 = (((pow(tonemapped, vec3(1.0 / post_process_config[0].w)) - vec3(0.5)) * max(post_process_config[0].y, 0.0)) + vec3(0.5)) + vec3(post_process_config[0].x);
|
||||
frag_color = vec4(mix(vec3(((0.2125000059604644775390625 * _106.x) + (0.7153999805450439453125 * _106.y)) + (0.07209999859333038330078125 * _106.z)), _106, vec3(post_process_config[0].z)), 1.0);
|
||||
}
|
||||
|
||||
*/
|
||||
@ -280,8 +294,8 @@ fs_pp_source_glsl300es := u8.[
|
||||
0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,
|
||||
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,
|
||||
0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,
|
||||
0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,
|
||||
0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x28,0x28,0x28,0x70,
|
||||
0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,
|
||||
0x76,0x65,0x63,0x33,0x20,0x5f,0x31,0x30,0x36,0x20,0x3d,0x20,0x28,0x28,0x28,0x70,
|
||||
0x6f,0x77,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,0x76,
|
||||
0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x70,0x6f,0x73,0x74,0x5f,0x70,
|
||||
0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,0x30,0x5d,
|
||||
@ -291,8 +305,20 @@ fs_pp_source_glsl300es := u8.[
|
||||
0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x30,
|
||||
0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x70,0x6f,0x73,0x74,
|
||||
0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,
|
||||
0x30,0x5d,0x2e,0x78,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,
|
||||
0x00,
|
||||
0x30,0x5d,0x2e,0x78,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,
|
||||
0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x6d,0x69,0x78,
|
||||
0x28,0x76,0x65,0x63,0x33,0x28,0x28,0x28,0x30,0x2e,0x32,0x31,0x32,0x35,0x30,0x30,
|
||||
0x30,0x30,0x35,0x39,0x36,0x30,0x34,0x36,0x34,0x34,0x37,0x37,0x35,0x33,0x39,0x30,
|
||||
0x36,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,0x2e,0x78,0x29,0x20,0x2b,0x20,
|
||||
0x28,0x30,0x2e,0x37,0x31,0x35,0x33,0x39,0x39,0x39,0x38,0x30,0x35,0x34,0x35,0x30,
|
||||
0x34,0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,
|
||||
0x2e,0x79,0x29,0x29,0x20,0x2b,0x20,0x28,0x30,0x2e,0x30,0x37,0x32,0x30,0x39,0x39,
|
||||
0x39,0x39,0x38,0x35,0x39,0x33,0x33,0x33,0x30,0x33,0x38,0x33,0x33,0x30,0x30,0x37,
|
||||
0x38,0x31,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,0x2e,0x7a,0x29,0x29,0x2c,
|
||||
0x20,0x5f,0x31,0x30,0x36,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x70,0x6f,0x73,0x74,
|
||||
0x5f,0x70,0x72,0x6f,0x63,0x65,0x73,0x73,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x5b,
|
||||
0x30,0x5d,0x2e,0x7a,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,
|
||||
0x0a,0x00,
|
||||
];
|
||||
/*
|
||||
#include <metal_stdlib>
|
||||
@ -400,7 +426,8 @@ vs_pp_source_metal_macos := u8.[
|
||||
{
|
||||
tonemapped = _61;
|
||||
}
|
||||
out.frag_color = float4((((powr(tonemapped, float3(1.0 / _65.gamma)) - float3(0.5)) * fast::max(_65.contrast, 0.0)) + float3(0.5)) + float3(_65.exposure), 1.0);
|
||||
float3 _106 = (((powr(tonemapped, float3(1.0 / _65.gamma)) - float3(0.5)) * fast::max(_65.contrast, 0.0)) + float3(0.5)) + float3(_65.exposure);
|
||||
out.frag_color = float4(mix(float3(((0.2125000059604644775390625 * _106.x) + (0.7153999805450439453125 * _106.y)) + (0.07209999859333038330078125 * _106.z)), _106, float3(_65.saturation)), 1.0);
|
||||
return out;
|
||||
}
|
||||
|
||||
@ -481,18 +508,30 @@ fs_pp_source_metal_macos := u8.[
|
||||
0x0a,0x20,0x20,0x20,0x20,0x65,0x6c,0x73,0x65,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,
|
||||
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,
|
||||
0x65,0x64,0x20,0x3d,0x20,0x5f,0x36,0x31,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,
|
||||
0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,
|
||||
0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,0x28,0x28,0x28,0x28,0x70,
|
||||
0x6f,0x77,0x72,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,0x70,0x70,0x65,0x64,0x2c,0x20,
|
||||
0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x20,0x2f,0x20,0x5f,0x36,0x35,
|
||||
0x2e,0x67,0x61,0x6d,0x6d,0x61,0x29,0x29,0x20,0x2d,0x20,0x66,0x6c,0x6f,0x61,0x74,
|
||||
0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,0x66,0x61,0x73,0x74,0x3a,0x3a,
|
||||
0x6d,0x61,0x78,0x28,0x5f,0x36,0x35,0x2e,0x63,0x6f,0x6e,0x74,0x72,0x61,0x73,0x74,
|
||||
0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,
|
||||
0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,
|
||||
0x5f,0x36,0x35,0x2e,0x65,0x78,0x70,0x6f,0x73,0x75,0x72,0x65,0x29,0x2c,0x20,0x31,
|
||||
0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,
|
||||
0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
||||
0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x31,0x30,0x36,0x20,
|
||||
0x3d,0x20,0x28,0x28,0x28,0x70,0x6f,0x77,0x72,0x28,0x74,0x6f,0x6e,0x65,0x6d,0x61,
|
||||
0x70,0x70,0x65,0x64,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,
|
||||
0x20,0x2f,0x20,0x5f,0x36,0x35,0x2e,0x67,0x61,0x6d,0x6d,0x61,0x29,0x29,0x20,0x2d,
|
||||
0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2a,0x20,
|
||||
0x66,0x61,0x73,0x74,0x3a,0x3a,0x6d,0x61,0x78,0x28,0x5f,0x36,0x35,0x2e,0x63,0x6f,
|
||||
0x6e,0x74,0x72,0x61,0x73,0x74,0x2c,0x20,0x30,0x2e,0x30,0x29,0x29,0x20,0x2b,0x20,
|
||||
0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x30,0x2e,0x35,0x29,0x29,0x20,0x2b,0x20,0x66,
|
||||
0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x36,0x35,0x2e,0x65,0x78,0x70,0x6f,0x73,0x75,
|
||||
0x72,0x65,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x6f,0x75,0x74,0x2e,0x66,0x72,0x61,
|
||||
0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x34,
|
||||
0x28,0x6d,0x69,0x78,0x28,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x28,0x28,0x30,0x2e,
|
||||
0x32,0x31,0x32,0x35,0x30,0x30,0x30,0x30,0x35,0x39,0x36,0x30,0x34,0x36,0x34,0x34,
|
||||
0x37,0x37,0x35,0x33,0x39,0x30,0x36,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,0x36,
|
||||
0x2e,0x78,0x29,0x20,0x2b,0x20,0x28,0x30,0x2e,0x37,0x31,0x35,0x33,0x39,0x39,0x39,
|
||||
0x38,0x30,0x35,0x34,0x35,0x30,0x34,0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x20,
|
||||
0x2a,0x20,0x5f,0x31,0x30,0x36,0x2e,0x79,0x29,0x29,0x20,0x2b,0x20,0x28,0x30,0x2e,
|
||||
0x30,0x37,0x32,0x30,0x39,0x39,0x39,0x39,0x38,0x35,0x39,0x33,0x33,0x33,0x30,0x33,
|
||||
0x38,0x33,0x33,0x30,0x30,0x37,0x38,0x31,0x32,0x35,0x20,0x2a,0x20,0x5f,0x31,0x30,
|
||||
0x36,0x2e,0x7a,0x29,0x29,0x2c,0x20,0x5f,0x31,0x30,0x36,0x2c,0x20,0x66,0x6c,0x6f,
|
||||
0x61,0x74,0x33,0x28,0x5f,0x36,0x35,0x2e,0x73,0x61,0x74,0x75,0x72,0x61,0x74,0x69,
|
||||
0x6f,0x6e,0x29,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
|
||||
0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x6f,0x75,0x74,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
|
||||
|
||||
];
|
||||
postprocess_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
|
||||
desc: sg_shader_desc;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -5,6 +5,7 @@ in vec4 position;
|
||||
|
||||
layout(binding=0) uniform plane_vs_params {
|
||||
mat4 mvp;
|
||||
float planeHeight;
|
||||
};
|
||||
|
||||
out vec4 pos;
|
||||
@ -12,6 +13,7 @@ out flat int idx;
|
||||
|
||||
void main() {
|
||||
vec3 multisize = vec3(position.xyz * 1000.0);
|
||||
multisize.y += float(gl_InstanceIndex) * planeHeight;
|
||||
gl_Position = mvp * vec4(multisize, 1.0);
|
||||
pos = vec4(multisize, 1.0);
|
||||
idx = gl_InstanceIndex;
|
||||
@ -26,6 +28,7 @@ out vec4 frag_color;
|
||||
|
||||
layout(binding=3) uniform plane_fs_params {
|
||||
mat4 mvp_shadow;
|
||||
int is_reflection;
|
||||
};
|
||||
|
||||
uint murmurHash12(uvec2 src) {
|
||||
@ -55,13 +58,12 @@ layout(binding=1) uniform plane_world_config {
|
||||
|
||||
int hasClouds;
|
||||
|
||||
int hasPlane;
|
||||
float planeHeight;
|
||||
int planeType;
|
||||
vec3 waterColor;
|
||||
vec3 deepColor;
|
||||
|
||||
float time;
|
||||
|
||||
float grassDensity;
|
||||
};
|
||||
|
||||
layout(binding=2) uniform plane_data {
|
||||
@ -129,37 +131,39 @@ vec3 get_ground_sample(vec4 pos, float dirX, float dirY) {
|
||||
}
|
||||
|
||||
void main() {
|
||||
vec4 npos = floor(pos * 16.0) / 16.0;
|
||||
vec2 tileCenter = vec2(floor(npos.x) + 0.5, floor(npos.z) + 0.5);
|
||||
vec2 toCenter = npos.xz - tileCenter;
|
||||
// vec4 npos = floor(pos * 16.0) / 16.0;
|
||||
// vec2 tileCenter = vec2(floor(npos.x) + 0.5, floor(npos.z) + 0.5);
|
||||
// vec2 toCenter = npos.xz - tileCenter;
|
||||
|
||||
// Bilinear filtering
|
||||
float u = smoothstep(0.2, 0.5, abs(toCenter.x)) * 0.5;
|
||||
float v = smoothstep(0.2, 0.5, abs(toCenter.y)) * 0.5;
|
||||
// // Bilinear filtering
|
||||
// float u = smoothstep(0.2, 0.5, abs(toCenter.x)) * 0.5;
|
||||
// float v = smoothstep(0.2, 0.5, abs(toCenter.y)) * 0.5;
|
||||
|
||||
// @ToDo: We should implement some sort of fog system and stop doing all this sampling
|
||||
// stuff if we are far enough from the camera. Currently ground rendering is taking way
|
||||
// too much time each frame.
|
||||
vec3 c0 = get_ground_sample(npos, 0.0, 0.0);
|
||||
vec3 c1 = get_ground_sample(npos, sign2(toCenter.x), 0.0);
|
||||
vec3 c2 = get_ground_sample(npos, 0.0, sign2(toCenter.y));
|
||||
vec3 c3 = get_ground_sample(npos, sign2(toCenter.x), sign2(toCenter.y));
|
||||
// // @ToDo: We should implement some sort of fog system and stop doing all this sampling
|
||||
// // stuff if we are far enough from the camera. Currently ground rendering is taking way
|
||||
// // too much time each frame.
|
||||
// vec3 c0 = get_ground_sample(npos, 0.0, 0.0);
|
||||
// vec3 c1 = get_ground_sample(npos, sign2(toCenter.x), 0.0);
|
||||
// vec3 c2 = get_ground_sample(npos, 0.0, sign2(toCenter.y));
|
||||
// vec3 c3 = get_ground_sample(npos, sign2(toCenter.x), sign2(toCenter.y));
|
||||
|
||||
// @ToDo: Consider using cool Inigo Quilez trick here to make it even smoother.
|
||||
vec3 b01 = mix(c0, c1, u);
|
||||
vec3 b23 = mix(c2, c3, u);
|
||||
vec3 bf = mix(b01, b23, v);
|
||||
// // @ToDo: Consider using cool Inigo Quilez trick here to make it even smoother.
|
||||
// vec3 b01 = mix(c0, c1, u);
|
||||
// vec3 b23 = mix(c2, c3, u);
|
||||
// vec3 bf = mix(b01, b23, v);
|
||||
|
||||
vec4 light_proj_pos = mvp_shadow * vec4(npos.xyz + vec3(1.0/32.0, 0.0, 1.0/32.0), 1.0);
|
||||
vec3 light_pos = light_proj_pos.xyz / light_proj_pos.w;
|
||||
light_pos = light_pos * 0.5 + 0.5;
|
||||
float bias = 0.0005;
|
||||
float shadowp = max(0.7, texture(sampler2DShadow(shadow, shadowsmp), vec3(light_pos.xy, light_pos.z - bias)));
|
||||
// vec4 light_proj_pos = mvp_shadow * vec4(npos.xyz + vec3(1.0/32.0, 0.0, 1.0/32.0), 1.0);
|
||||
// vec3 light_pos = light_proj_pos.xyz / light_proj_pos.w;
|
||||
// light_pos = light_pos * 0.5 + 0.5;
|
||||
// float bias = 0.0005;
|
||||
// float shadowp = max(0.7, texture(sampler2DShadow(shadow, shadowsmp), vec3(light_pos.xy, light_pos.z - bias)));
|
||||
|
||||
if(planeType == 1) {
|
||||
frag_color = vec4(bf * shadowp, 1.0);
|
||||
if(idx == 1) {
|
||||
float f = skyBase.x * float(screen_h) * mvp_shadow[0][0];
|
||||
vec4 reflection = texelFetch(sampler2D(reftex, refsmp), ivec2(gl_FragCoord.x, screen_h - gl_FragCoord.y), 0);
|
||||
frag_color = vec4(reflection.xyz * 0.5 + waterColor * 0.5 + 0.00001 * f, 0.3);
|
||||
} else {
|
||||
frag_color = vec4(vec3(shadowp), 1.0);
|
||||
frag_color = vec4(deepColor, 1.0);
|
||||
}
|
||||
}
|
||||
@end
|
||||
|
||||
@ -46,6 +46,10 @@ void main() {
|
||||
vec3 gammaCorrected = pow(tonemapped, vec3(1.0/gamma));
|
||||
gammaCorrected.rgb = ((gammaCorrected.rgb - 0.5f) * max(contrast, 0)) + 0.5f;
|
||||
gammaCorrected.rgb += exposure;
|
||||
|
||||
float lum = (0.2125 * gammaCorrected.r) + (0.7154 * gammaCorrected.g) + (0.0721 * gammaCorrected.b);
|
||||
vec3 brtColor = vec3(lum, lum, lum);
|
||||
gammaCorrected.rgb = mix(brtColor, gammaCorrected.rgb, saturation);
|
||||
|
||||
frag_color = vec4(gammaCorrected, 1.0);
|
||||
}
|
||||
|
||||
@ -31,13 +31,12 @@ layout(binding=1) uniform sky_world_config {
|
||||
|
||||
int hasClouds;
|
||||
|
||||
int hasPlane;
|
||||
float planeHeight;
|
||||
int planeType;
|
||||
vec3 waterColor;
|
||||
vec3 deepColor;
|
||||
|
||||
float time;
|
||||
|
||||
float grassDensity;
|
||||
};
|
||||
|
||||
in vec4 pos;
|
||||
|
||||
@ -41,13 +41,12 @@ layout(binding=1) uniform trile_world_config {
|
||||
|
||||
int hasClouds;
|
||||
|
||||
int hasPlane;
|
||||
float planeHeight;
|
||||
int planeType;
|
||||
vec3 waterColor;
|
||||
vec3 deepColor;
|
||||
|
||||
float time;
|
||||
|
||||
float grassDensity;
|
||||
};
|
||||
|
||||
in vec3 cam;
|
||||
@ -57,6 +56,11 @@ in vec3 ipos;
|
||||
in vec4 fnormal;
|
||||
out vec4 frag_color;
|
||||
|
||||
layout(binding=3) uniform trile_fs_params {
|
||||
mat4 mvp_shadow;
|
||||
int is_reflection;
|
||||
};
|
||||
|
||||
layout(binding = 0) uniform texture2D triletex;
|
||||
layout(binding = 0) uniform sampler trilesmp;
|
||||
|
||||
@ -179,6 +183,9 @@ vec3 fresnelSchlick(float cosTheta, vec3 F0) {
|
||||
}
|
||||
|
||||
void main() {
|
||||
if (vpos.y < planeHeight - 0.01 && is_reflection == 1) {
|
||||
discard;
|
||||
}
|
||||
//frag_color = vec4((fnormal.xyz + vec3(1.0, 1.0, 1.0)) * 0.5, 1.0);
|
||||
vec3 pos_after_adjust = ipos - fnormal.xyz * 0.02;
|
||||
int count = 0;
|
||||
@ -232,7 +239,7 @@ void main() {
|
||||
vec3 samp = sky(R, sunPosition);
|
||||
// light += F * samp * modifier;
|
||||
|
||||
frag_color = vec4(vec3(light), 1.0);
|
||||
frag_color = vec4(mix(deepColor, light, smoothstep(0.0, planeHeight, vpos.y)), 1.0);
|
||||
|
||||
}
|
||||
@end
|
||||
|
||||
@ -40,13 +40,12 @@ layout(binding=1) uniform trixel_world_config {
|
||||
|
||||
int hasClouds;
|
||||
|
||||
int hasPlane;
|
||||
float planeHeight;
|
||||
int planeType;
|
||||
vec3 waterColor;
|
||||
vec3 deepColor;
|
||||
|
||||
float time;
|
||||
|
||||
float grassDensity;
|
||||
};
|
||||
|
||||
in vec4 color;
|
||||
|
||||
@ -73,11 +73,11 @@ World_Config :: struct {
|
||||
|
||||
hasClouds : s32 = 1; @Slider,0,1,1
|
||||
|
||||
hasPlane : s32 = 0; @Slider,0,1,1
|
||||
planeHeight : float = 0.0; @Slider,-100,100,1
|
||||
planeHeight : float = 0.0; @Slider,0,3,0.1
|
||||
planeType : s32 = 1; @Slider,0,1,1
|
||||
waterColor : Vector3 = .{1.0, 1.0, 1.0}; @Color // @ToDo: sensible default values.
|
||||
deepColor : Vector3 = .{1.0, 1.0, 1.0}; @Color // @ToDo: sensible default values.
|
||||
|
||||
grassDensity : float = 200; @Slider,10,300,1
|
||||
}
|
||||
|
||||
// Copies over all the fields of our world config into a given shader type.
|
||||
|
||||
1225
trueno/trueno.xcodeproj/project.pbxproj
Normal file
1225
trueno/trueno.xcodeproj/project.pbxproj
Normal file
File diff suppressed because it is too large
Load Diff
7
trueno/trueno.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
7
trueno/trueno.xcodeproj/project.xcworkspace/contents.xcworkspacedata
generated
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Workspace
|
||||
version = "1.0">
|
||||
<FileRef
|
||||
location = "self:">
|
||||
</FileRef>
|
||||
</Workspace>
|
||||
@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict/>
|
||||
</plist>
|
||||
Binary file not shown.
@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>BuildLocationStyle</key>
|
||||
<string>UseAppPreferences</string>
|
||||
<key>CustomBuildLocationType</key>
|
||||
<string>RelativeToDerivedData</string>
|
||||
<key>DerivedDataLocationStyle</key>
|
||||
<string>Default</string>
|
||||
<key>ShowSharedSchemesAutomaticallyEnabled</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</plist>
|
||||
@ -0,0 +1,67 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<Scheme
|
||||
LastUpgradeVersion = "1640"
|
||||
version = "1.7">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES"
|
||||
buildArchitectures = "Automatic">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
buildForRunning = "YES"
|
||||
buildForProfiling = "YES"
|
||||
buildForArchiving = "YES"
|
||||
buildForAnalyzing = "YES">
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "EA317AAE2E9ED68E00D1563E"
|
||||
BuildableName = "trueno"
|
||||
BlueprintName = "trueno"
|
||||
ReferencedContainer = "container:trueno.xcodeproj">
|
||||
</BuildableReference>
|
||||
</BuildActionEntry>
|
||||
</BuildActionEntries>
|
||||
</BuildAction>
|
||||
<TestAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
shouldAutocreateTestPlan = "YES">
|
||||
</TestAction>
|
||||
<LaunchAction
|
||||
buildConfiguration = "Debug"
|
||||
selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB"
|
||||
selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB"
|
||||
launchStyle = "0"
|
||||
useCustomWorkingDirectory = "NO"
|
||||
ignoresPersistentStateOnLaunch = "NO"
|
||||
debugDocumentVersioning = "YES"
|
||||
debugServiceExtension = "internal"
|
||||
allowLocationSimulation = "YES">
|
||||
</LaunchAction>
|
||||
<ProfileAction
|
||||
buildConfiguration = "Release"
|
||||
shouldUseLaunchSchemeArgsEnv = "YES"
|
||||
savedToolIdentifier = ""
|
||||
useCustomWorkingDirectory = "NO"
|
||||
debugDocumentVersioning = "YES">
|
||||
<MacroExpansion>
|
||||
<BuildableReference
|
||||
BuildableIdentifier = "primary"
|
||||
BlueprintIdentifier = "EA317AAE2E9ED68E00D1563E"
|
||||
BuildableName = "trueno"
|
||||
BlueprintName = "trueno"
|
||||
ReferencedContainer = "container:trueno.xcodeproj">
|
||||
</BuildableReference>
|
||||
</MacroExpansion>
|
||||
</ProfileAction>
|
||||
<AnalyzeAction
|
||||
buildConfiguration = "Debug">
|
||||
</AnalyzeAction>
|
||||
<ArchiveAction
|
||||
buildConfiguration = "Release"
|
||||
revealArchiveInOrganizer = "YES">
|
||||
</ArchiveAction>
|
||||
</Scheme>
|
||||
@ -0,0 +1,22 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>SchemeUserState</key>
|
||||
<dict>
|
||||
<key>trueno.xcscheme_^#shared#^_</key>
|
||||
<dict>
|
||||
<key>orderHint</key>
|
||||
<integer>0</integer>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>SuppressBuildableAutocreation</key>
|
||||
<dict>
|
||||
<key>EA317AAE2E9ED68E00D1563E</key>
|
||||
<dict>
|
||||
<key>primary</key>
|
||||
<true/>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</plist>
|
||||
Loading…
x
Reference in New Issue
Block a user