work on asset packing and console logging

This commit is contained in:
Tuomas Katajisto 2025-07-28 16:51:01 +03:00
parent 307a09cba5
commit d63261a5b4
17 changed files with 774 additions and 176 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@
.build/
dist/
first
packs/*

View File

@ -1,26 +1,35 @@
#load "./src/meta/meta.jai";
Iprof :: #import "Iprof"(IMPORT_MODE = .METAPROGRAM);
#run {
print("%\n", ascii_car);
// @ToDo: Fix this so that we are using the freshly compiled Jai files instead of the old ones.
// {
// process_result, output, error := run_command("bash", "./compile_shaders.sh", working_directory=tprint("%/src/shaders", #filepath));
// if process_result.exit_code != 0 {
// log_error("Shader compilation failed.");
// if output {
// log_error(output,, logger = runtime_support_default_logger);
// }
// exit(1);
// }
// }
// Step 1. Compile shaders.
{
print("--- Shader Compile Step ---\n");
process_result, output, error := run_command("bash", "./compile_shaders.sh", working_directory=tprint("%/src/shaders", #filepath));
if process_result.exit_code != 0 {
log_error("Shader compilation failed.");
if output {
log_error(output,, logger = runtime_support_default_logger);
}
exit(1);
}
}
// Step 2. Create a pack file for all of the assets in ./resources.
create_pack();
opt := get_build_options();
args := opt.compile_time_command_line;
doWasmBuild := false;
hasTacoma := false;
releaseBuild := false;
for arg : args {
if arg == "wasm" then doWasmBuild = true;
if arg == "tacoma" then hasTacoma = true;
if arg == "release" then releaseBuild = true;
}
if doWasmBuild {
@ -74,6 +83,7 @@ Iprof :: #import "Iprof"(IMPORT_MODE = .METAPROGRAM);
add_build_file("src/platform_specific/main_web.jai", w);
add_build_string("HAS_TACOMA :: false;", w);
add_build_string("HAS_IPROF :: false;", w);
add_shaders_to_workspace(w);
while true {
message := compiler_wait_for_message();
@ -123,13 +133,16 @@ Iprof :: #import "Iprof"(IMPORT_MODE = .METAPROGRAM);
w := compiler_create_workspace("Target");
opts := get_build_options(w);
copy_commonly_propagated_fields(*opts, *root_opts);
opts.cpu_target = root_opts.cpu_target;
opts.os_target = root_opts.os_target;
opts.backend = ifx releaseBuild then .LLVM else .X64;
opts.output_executable_name = root_opts.output_executable_name;
set_build_options(opts, w);
iprof_plugin: *Iprof.My_Plugin;
profile :: true;
profile := !releaseBuild;
if profile {
iprof_plugin = cast(*Iprof.My_Plugin) Iprof.get_plugin();
@ -147,19 +160,26 @@ Iprof :: #import "Iprof"(IMPORT_MODE = .METAPROGRAM);
} else {
add_build_string("HAS_TACOMA :: false;", w);
}
if profile {
add_build_string("HAS_IPROF :: true;", w);
iprof_plugin.add_source(iprof_plugin);
} else {
add_build_string("HAS_IPROF :: false;", w);
}
add_build_file("src/platform_specific/main_native.jai", w);
add_shaders_to_workspace(w);
while true {
message := compiler_wait_for_message();
iprof_plugin.message(iprof_plugin, message);
if profile then iprof_plugin.message(iprof_plugin, message);
custom_message_handler(message, *w);
if message.kind == .COMPLETE then break;
}
compiler_end_intercept(w);
if profile {
iprof_plugin.finish(iprof_plugin);
iprof_plugin.shutdown(iprof_plugin);
}
}
}

View File

@ -0,0 +1,172 @@
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
____________________
Devices : 1
0: AMD Radeon RX 6950 XT
- Compatible
Compatible physical devices found : 1
Using Device:
- Device Name : AMD Radeon RX 6950 XT
- Vendor : AMD
- Driver Version : 2.0.341
- API Version : 1.4.308
- Device Type : Discrete GPU
________________________
Used Device Extensions :
VK_KHR_deferred_host_operations
VK_KHR_acceleration_structure
VK_KHR_ray_query
BLAS Compaction: 0.0MB -> 0.0MB (0.0MB saved, 41.3% smaller)
_______________
Vulkan Version:
- available: 1.4.309
- requesting: 1.3.0
______________________
Used Instance Layers :
VK_LAYER_KHRONOS_validation
Used Instance Extensions :
__________________

View File

@ -0,0 +1,73 @@
#import "Simple_Package";
#import "Basic";
#import "File";
#import "Hash_Table";
write_package :: (filename: string) {
item1 := "Hello, Sailor!";
item2: [100] u8;
for 0..item2.count-1 item2[it] = xx it;
item3: [10] float;
for 0..item3.count-1 item3[it] = cast(float)(it*it);
package: Create_Package;
defer deinit(*package);
init(*package);
add(*package, "run_tree/data/item1", xx item1);
add(*package, "this is item2", xx item2);
item3_data: [] u8;
item3_data.data = xx item3.data;
item3_data.count = item3.count * size_of(type_of(item3[0]));
add(*package, "item3, unimaginatively", item3_data);
write(*package, filename);
}
read_package :: (filename: string) -> (success: bool, package: Load_Package) {
package: Load_Package;
success := init_from_file(*package, filename);
if !success return false, package;
print("package has % entries:\n", package.entries.count);
for package.entries {
print("[%] %\n", it_index, it);
}
return true, package;
}
main :: () {
filename :: "test.package";
write_package(filename);
success, package := read_package(filename);
print("\n");
print("read_package returned success == %.\n", success);
print("\n");
if success {
found, entry := table_find_new(*package.lookup, "this is item2");
if found {
print("Found the entry!: %\n", entry.*);
} else {
print("Did not find the entry! Oops!\n");
assert(false);
}
} else {
assert(false);
}
print("\n");
}

View File

@ -0,0 +1,242 @@
// create_*...
Create_Package :: struct {
data: String_Builder;
entries: [..] Entry_Info;
pool: Pool; // Stores entry names and user data.
}
Entry_Info :: struct {
name: string;
data: [] u8;
offset_from_start_of_file: s64;
size_of_entry: s64; // Equal to data.count if we hae the data, but we might not have the data if loading Table_Of_Contents only!
}
deinit :: (using package: *Create_Package) {
free_buffers(*data);
array_reset(*entries);
release(*pool);
}
KNOWN_HEADER_SIZE :: 64;
#assert size_of(Package_Header) == KNOWN_HEADER_SIZE;
Package_Header :: struct {
magic: u32;
version: u32;
flags: u32;
reserved0: u32;
table_of_contents_offset: s64;
reserved: [5] u64;
}
Load_Package :: struct {
header: Package_Header;
data: [] u8;
table_of_contents: Table_Of_Contents;
entries: [] Entry_Info;
lookup: Table(string, *Entry_Info);
}
KNOWN_TABLE_OF_CONTENTS_SIZE :: 64;
#assert size_of(Table_Of_Contents) == KNOWN_TABLE_OF_CONTENTS_SIZE;
Table_Of_Contents :: struct {
table_of_contents_magic: u32;
reserved0: u32;
number_of_entries: s64;
reserved: [6] u64;
}
append_struct :: (builder: *String_Builder, to_append: *$T) {
append(builder, cast(*u8) to_append, size_of(T));
}
init_from_memory :: (package: *Load_Package, data: [] u8, name_for_debugging := "") -> bool {
#assert(TARGET_IS_LITTLE_ENDIAN); // We can endian-swap the header later.
if data.count < KNOWN_HEADER_SIZE {
log_error("Package '%' is too small to even contain a header! (It's % bytes).\n", name_for_debugging, data.count);
return false; // Too small!
}
_header := cast(*Package_Header) data.data;
package.header = << _header;
header_success := check_header(*package.header, name_for_debugging, data.count);
if !header_success return false;
offset := package.header.table_of_contents_offset;
toc_start := data;
toc_start.data += offset;
toc_start.count -= offset;
assert(toc_start.count >= 0);
toc_success := load_table_of_contents(package, toc_start, data.data, name_for_debugging, offset);
return toc_success;
}
load_table_of_contents :: (package: *Load_Package, data: [] u8, base_file_data_if_file_is_loaded: *u8, name_for_debugging: string, offset_for_debugging: s64) -> bool {
toc := cast(*Table_Of_Contents) data.data;
if toc.table_of_contents_magic != TABLE_OF_CONTENTS_MAGIC {
log_error("In package '%', we skipped to the supposed table_of_contents at offset %, but did not find the magic number there that we expected to find. (We wanted %, but got %).\n", name_for_debugging, offset_for_debugging, formatInt(TABLE_OF_CONTENTS_MAGIC, base=16), formatInt(toc.table_of_contents_magic, base=16));
return false;
}
entries: [..] Entry_Info;
array_resize(*entries, toc.number_of_entries);
s: string;
s.data = data.data + KNOWN_TABLE_OF_CONTENTS_SIZE;
s.count = data.count - KNOWN_TABLE_OF_CONTENTS_SIZE;
assert(s.count >= 0);
for 0..toc.number_of_entries-1 {
entry := *entries[it];
if s.count < 4 {
log_error("Table_Of_Contents Entry % is too short!\n", it+1);
return false;
}
name_length: u32;
get(*s, *name_length);
entry.name.data = s.data;
entry.name.count = name_length;
if s.count < name_length + 1 + 16 { // The 16 is for the chunk size and offset.
log_error("Table_Of_Contents Entry % is too short!\n", it+1);
return false;
}
advance(*s, name_length + 1);
chunk_size: s64;
chunk_offset: s64;
get(*s, *chunk_size);
get(*s, *chunk_offset);
if chunk_offset >= package.header.table_of_contents_offset {
log_error("The offset_from_start_of_file for Entry % is out of range; it must be before the table_of_contents, which starts at %, but it was %.\n", it+1, package.header.table_of_contents_offset, chunk_offset);
return false;
}
base := base_file_data_if_file_is_loaded;
if base {
entry.data.data = base + chunk_offset;
entry.data.count = chunk_size;
}
entry.size_of_entry = chunk_size;
entry.offset_from_start_of_file = chunk_offset;
table_add(*package.lookup, entry.name, entry);
}
package.entries = entries;
return true;
}
#scope_file
MAGIC :: #run << cast(*u32) "simp".data;
TABLE_OF_CONTENTS_MAGIC :: #run << cast(*u32) "toc!".data;
FILE_VERSION :: 1;
TARGET_IS_LITTLE_ENDIAN :: true; // @Endian: Need a way to change this based on target CPU!
// @Copypasta from the game!
put :: (builder: *String_Builder, x: $T)
#modify {
using Type_Info_Tag;
ti := cast(*Type_Info) T;
if ti.type == INTEGER return true; // Accept integers.
if ti.type == FLOAT return true; // Accept floats.
if ti.type == BOOL return true; // Accept bools.
if ti.type == ENUM return true; // Accept enums.
return false; // Reject anything else.
}
{
ensure_contiguous_space(builder, size_of(T));
#if TARGET_IS_LITTLE_ENDIAN {
// @Speed: Just write the target type!
simple_memcpy(builder, x);
} else {
// @Incomplete: Do a slow-path if we know we are not little-endian. This can be generated by #run_and_insert?
assert(false);
}
}
get :: (s: *string, x: *$T)
#modify { // @Cutnpaste from put
using Type_Info_Tag;
ti := cast(*Type_Info) T;
if ti.type == INTEGER return true; // Accept integers.
if ti.type == FLOAT return true; // Accept floats.
if ti.type == BOOL return true; // Accept bools.
if ti.type == ENUM return true; // Accept enums.
return false; // Reject anything else.
}
{
assert(s.count >= size_of(T));
if TARGET_IS_LITTLE_ENDIAN {
memcpy(x, s.data, size_of(T));
} else {
// @Incomplete: Do a slow-path if we know we are not little-endian. This can be generated by #run_and_insert?
assert(false);
}
s.data += size_of(T);
s.count -= size_of(T);
}
check_header :: (header: *Package_Header, name: string, file_size_in_bytes_or_minus_1: s64) -> bool {
using header;
if magic != MAGIC {
log_error("Package '%' has an incorrect magic number! (Wanted %, got %).\n", name, formatInt(MAGIC, base=16), formatInt(magic, base=16));
return false;
}
if version > FILE_VERSION { // 'version' is unsigned, so, don't check < 0.
log_error("Package '%' has an invalid version number, or a version created by code that is newer than we are, so we don't understand the format. (Its version is %; our highest known version is %).\n", name, version, FILE_VERSION);
return false;
}
if file_size_in_bytes_or_minus_1 >= 0 {
size := file_size_in_bytes_or_minus_1;
if table_of_contents_offset + KNOWN_TABLE_OF_CONTENTS_SIZE >= size {
log_error("Package '%' has an invalid table_of_contents_offset; it claims to be %, but the file is only % bytes long.\n", name, table_of_contents_offset, size);
return false;
}
}
return true;
}
#import "Basic";
#import "Hash_Table";
#import "Pool";

View File

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 35 KiB

View File

@ -120,6 +120,9 @@ tick_console :: () {
}
}
console_add_output_line :: (s: string) {
array_add(*console_report, s);
}
draw_console :: (theme: *GR.Overall_Theme) {
if console_h < 1 then return;

View File

@ -108,8 +108,10 @@ handle_tool_click :: () {
current_color : Vector3 = .{1.0, 0.0, 0.0};
reset_trile :: (a: bool = false) {
print("Reset called, with arg: %!\n", a);
reset_trile :: () {
newt : Trile;
set_trile("test", newt);
current_trile = get_trile("test");
} @Command
tick_trile_editor :: () {

View File

@ -1,18 +1,36 @@
#scope_file
MAX_FILE_SIZE :: 200_000;
buf : [MAX_FILE_SIZE]u8;
g_asset_pack : Load_Package;
mandatory_loads_left : s32 = 0;
packcb :: (res: *sfetch_response_t) #c_call {
push_context,defer_pop default_context;
mem : []u8;
mem.count = res.data.size.(s64);
mem.data = res.data.ptr;
success := init_from_memory(*g_asset_pack, mem, "main_asset_pack");
print("Succesfully loaded main asset pack!\n");
mandatory_loads_left -= 1;
}
#scope_export
init_after_mandatory_done : bool = false;
mandatory_loads_done :: () -> bool {
return mandatory_loads_left <= 0;
}
init_font_loads :: () {
init_asset_pack_load :: () {
mandatory_loads_left += 1;
sfetch_send(*(sfetch_request_t.{
path = "./resources/DroidSerif-Regular.ttf".data,
callback = fontcb,
path = "./packs/assets.pack".data,
callback = packcb,
buffer = .{
ptr = buf.data,
size = buf.count
@ -20,9 +38,36 @@ init_font_loads :: () {
}));
}
fontcb :: (res: *sfetch_response_t) #c_call {
push_context,defer_pop default_context;
state.font_default.fons_font = fonsAddFontMem(state.fons, "sans", res.data.ptr, xx res.data.size, 0);
ui_init_font_fields(*state.font_default);
mandatory_loads_left -= 1;
add_font_from_pack :: (path: string) {
ok, entry := table_find_new(*g_asset_pack.lookup, path);
if !ok {
print("Failed to find font % from pack...\n", path);
return;
}
state.font_default.fons_font = fonsAddFontMem(state.fons, "sans", entry.data.data, xx entry.data.count, 0);
}
asset_list :: () -> string #expand {
count := 0;
for v : g_asset_pack.lookup {
console_add_output_line(sprint("% (%)", v.name, format_size(v.size_of_entry)));
count += 1;
}
return tprint("> A total of % assets.", count);
} @Command
// Returns tprinted pointer, please copy it somewhere.
format_size :: (bytes: int) -> string {
bytes_counter := bytes;
bytes_float := cast(float) bytes;
names : []string = .["b", "kb", "mb", "gb", "tb"];
name_index := 0;
while bytes_counter / 1000 > 0 {
name_index += 1;
bytes_counter /= 1000;
bytes_float /= 1000.0;
if name_index > 4 then break;
}
return tprint("% %", bytes_float, names[name_index]);
}

View File

@ -9,6 +9,7 @@ MEM_DEBUG :: false;
#import "Input";
#import "Hash_Table";
#import "Hash";
#import "Simple_Package_Reader";
stbi :: #import "stb_image";
#load "trile.jai";
@ -87,16 +88,19 @@ init :: () {
state.pass_action_clear.colors[0] = .{ load_action = .CLEAR, clear_value = .{ r = 0.6, g = 0.7, b = 1.0, a = 1 } };
state.pass_action.colors[0] = .{ load_action = .LOAD };
init_font_loads();
// Add empty trile.
set_trile("test", Trile.{});
init_asset_pack_load();
init_editor();
}
init_after_mandatory_loads :: () {
init_after_asset_pack :: () {
add_font_from_pack("./resources/DroidSerif-Regular.ttf");
ui_init_font_fields(*state.font_default);
init_ui();
set_trile("test", Trile.{});
init_editor();
}
cam : Camera;
@ -108,7 +112,7 @@ frame :: () {
sfetch_dowork();
if mandatory_loads_done() && !init_after_mandatory_done {
init_after_mandatory_loads();
init_after_asset_pack();
init_after_mandatory_done = true;
}

View File

@ -38,6 +38,10 @@ lint_procedure_name :: (name: string, node: Code_Node) -> bool {
for name {
if it >= #char "a" && it <= #char "z" then continue;
if it == #char "_" then continue;
if it == #char "+" then continue;
if it == #char "=" then continue;
if it == #char "<" then continue;
if it == #char ">" then continue;
if it >= #char "0" && it <= #char "9" then continue;
name_ok = false;
wrong_char = it;

View File

@ -1,6 +1,8 @@
#load "ascii.jai";
#load "pack.jai";
#load "lint.jai";
#load "console_commands.jai";
#load "shaderload.jai";
custom_message_handler :: (message: *Message, w: *Workspace) {
lint_checks(message);

27
src/meta/pack.jai Normal file
View File

@ -0,0 +1,27 @@
create_pack :: () {
#import "Simple_Package";
#import "File";
util :: #import "File_Utilities";
files_to_pack := util.file_list("./resources", true);
package: Create_Package;
defer deinit(*package);
init(*package);
print("Packing % files -> ./packs/assets.pack\n", files_to_pack.count);
for files_to_pack {
file, ok := read_entire_file(it);
if !ok {
print("Failed in loading file to pack: %\n", it);
continue;
}
filedata : []u8;
filedata.count = file.count;
filedata.data = file.data;
add(*package, it, filedata);
}
write(*package, "./packs/assets.pack");
}

16
src/meta/shaderload.jai Normal file
View File

@ -0,0 +1,16 @@
#scope_file
get_shader_paths :: () -> []string {
util :: #import "File_Utilities";
return util.file_list("./src/shaders/jai");
}
#scope_export
add_shaders_to_workspace :: (w: Workspace) {
file :: #import "File";
paths := get_shader_paths();
for paths {
add_build_file(file.get_absolute_path(it), w);
}
}

View File

@ -1,8 +1,3 @@
#load "./shaders/jai/shader_triangle.jai";
#load "./shaders/jai/shader_trixel.jai";
#load "./shaders/jai/shader_sky.jai";
#load "./shaders/jai/shader_trile.jai";
Pipeline_Binding :: struct {
pipeline : sg_pipeline;
bind : sg_bindings;

View File

@ -165,18 +165,19 @@ vs_sky_source_glsl430 := u8.[
}
float _240 = _199.y;
final += (mix(_178.horizonHalo, vec3(0.0), vec3(clamp(abs(_240) * 80.0, 0.0, 1.0))) * 0.100000001490116119384765625);
if (_178.hasClouds == 1)
{
vec3 param = ((_199 / vec3(_240)) * 2.0) + vec3(_178.time * 0.0500000007450580596923828125);
float _269 = fbm(param);
vec3 _273 = final;
vec3 _282 = mix(_273, vec3(1.0), vec3((max(0.0, _240) * (smoothstep(0.5, 1.0, _269) * 0.300000011920928955078125)) * 2.0));
final = _282;
return _282;
float _276 = fbm(param);
final = mix(final, vec3(1.0), vec3((max(0.0, _240) * (smoothstep(0.5, 1.0, _276) * 0.300000011920928955078125)) * 2.0));
}
return final;
}
void main()
{
vec3 param = normalize(pos.xyz);
vec3 param_1 = vec3(0.485071241855621337890625, 0.72760689258575439453125, 0.485071241855621337890625);
vec3 param_1 = _178.sunPosition;
frag_color = vec4(sky(param, param_1), 1.0);
}
@ -389,40 +390,36 @@ fs_sky_source_glsl430 := u8.[
0x30,0x2e,0x30,0x2c,0x20,0x30,0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,
0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,
0x30,0x31,0x31,0x36,0x31,0x31,0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,
0x6d,0x20,0x3d,0x20,0x28,0x28,0x5f,0x31,0x39,0x39,0x20,0x2f,0x20,0x76,0x65,0x63,
0x33,0x28,0x5f,0x32,0x34,0x30,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,
0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,0x37,0x38,0x2e,0x74,0x69,0x6d,0x65,
0x20,0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,
0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,
0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x32,
0x36,0x39,0x20,0x3d,0x20,0x66,0x62,0x6d,0x28,0x70,0x61,0x72,0x61,0x6d,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x32,0x37,0x33,0x20,0x3d,
0x20,0x66,0x69,0x6e,0x61,0x6c,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,
0x20,0x5f,0x32,0x38,0x32,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,0x32,0x37,0x33,
0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x76,0x65,0x63,
0x33,0x28,0x28,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x34,0x30,
0x29,0x20,0x2a,0x20,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,
0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x36,0x39,0x29,0x20,
0x2a,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,
0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x29,0x20,0x2a,
0x20,0x32,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x69,0x6e,0x61,
0x6c,0x20,0x3d,0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,
0x74,0x75,0x72,0x6e,0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,
0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,
0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x70,0x6f,0x73,0x2e,0x78,0x79,0x7a,0x29,0x3b,
0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,
0x31,0x20,0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x34,0x38,0x35,0x30,0x37,
0x31,0x32,0x34,0x31,0x38,0x35,0x35,0x36,0x32,0x31,0x33,0x33,0x37,0x38,0x39,0x30,
0x36,0x32,0x35,0x2c,0x20,0x30,0x2e,0x37,0x32,0x37,0x36,0x30,0x36,0x38,0x39,0x32,
0x35,0x38,0x35,0x37,0x35,0x34,0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,
0x30,0x2e,0x34,0x38,0x35,0x30,0x37,0x31,0x32,0x34,0x31,0x38,0x35,0x35,0x36,0x32,
0x31,0x33,0x33,0x37,0x38,0x39,0x30,0x36,0x32,0x35,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,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,
0x72,0x61,0x6d,0x5f,0x31,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,
0x0a,0x00,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x38,0x2e,
0x68,0x61,0x73,0x43,0x6c,0x6f,0x75,0x64,0x73,0x20,0x3d,0x3d,0x20,0x31,0x29,0x0a,
0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x76,0x65,
0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x28,0x28,0x5f,0x31,0x39,
0x39,0x20,0x2f,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x32,0x34,0x30,0x29,0x29,0x20,
0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,
0x37,0x38,0x2e,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,
0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x32,0x37,0x36,0x20,0x3d,0x20,
0x66,0x62,0x6d,0x28,0x70,0x61,0x72,0x61,0x6d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,
0x66,0x69,0x6e,0x61,0x6c,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,
0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,
0x20,0x5f,0x32,0x34,0x30,0x29,0x20,0x2a,0x20,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,
0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x5f,
0x32,0x37,0x36,0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,
0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,
0x35,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x69,
0x6e,0x61,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,
0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x76,0x65,0x63,0x33,0x20,0x70,
0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,
0x28,0x70,0x6f,0x73,0x2e,0x78,0x79,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x76,
0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x20,0x3d,0x20,0x5f,0x31,
0x37,0x38,0x2e,0x73,0x75,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,0x20,0x3d,
0x20,0x76,0x65,0x63,0x34,0x28,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,
0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,
0x0a,0x7d,0x0a,0x0a,0x00,
];
/*
#version 300 es
@ -539,18 +536,19 @@ vs_sky_source_glsl300es := u8.[
}
highp float _240 = _199.y;
final += (mix(_178.horizonHalo, vec3(0.0), vec3(clamp(abs(_240) * 80.0, 0.0, 1.0))) * 0.100000001490116119384765625);
if (_178.hasClouds == 1)
{
highp vec3 param = ((_199 / vec3(_240)) * 2.0) + vec3(_178.time * 0.0500000007450580596923828125);
highp float _269 = fbm(param);
highp vec3 _273 = final;
highp vec3 _282 = mix(_273, vec3(1.0), vec3((max(0.0, _240) * (smoothstep(0.5, 1.0, _269) * 0.300000011920928955078125)) * 2.0));
final = _282;
return _282;
highp float _276 = fbm(param);
final = mix(final, vec3(1.0), vec3((max(0.0, _240) * (smoothstep(0.5, 1.0, _276) * 0.300000011920928955078125)) * 2.0));
}
return final;
}
void main()
{
highp vec3 param = normalize(pos.xyz);
highp vec3 param_1 = vec3(0.485071241855621337890625, 0.72760689258575439453125, 0.485071241855621337890625);
highp vec3 param_1 = _178.sunPosition;
frag_color = vec4(sky(param, param_1), 1.0);
}
@ -782,42 +780,37 @@ fs_sky_source_glsl300es := u8.[
0x2e,0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,
0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,
0x39,0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,
0x6d,0x20,0x3d,0x20,0x28,0x28,0x5f,0x31,0x39,0x39,0x20,0x2f,0x20,0x76,0x65,0x63,
0x33,0x28,0x5f,0x32,0x34,0x30,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,
0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,0x37,0x38,0x2e,0x74,0x69,0x6d,0x65,
0x20,0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,
0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,
0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,
0x6f,0x61,0x74,0x20,0x5f,0x32,0x36,0x39,0x20,0x3d,0x20,0x66,0x62,0x6d,0x28,0x70,
0x61,0x72,0x61,0x6d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,
0x20,0x76,0x65,0x63,0x33,0x20,0x5f,0x32,0x37,0x33,0x20,0x3d,0x20,0x66,0x69,0x6e,
0x61,0x6c,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,
0x63,0x33,0x20,0x5f,0x32,0x38,0x32,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,0x32,
0x37,0x33,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x76,
0x65,0x63,0x33,0x28,0x28,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,
0x34,0x30,0x29,0x20,0x2a,0x20,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,
0x70,0x28,0x30,0x2e,0x35,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x36,0x39,
0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,
0x32,0x30,0x39,0x32,0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x29,
0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x69,
0x6e,0x61,0x6c,0x20,0x3d,0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x7d,0x0a,0x0a,
0x76,0x6f,0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,
0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,
0x61,0x6d,0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x70,
0x6f,0x73,0x2e,0x78,0x79,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,
0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x20,
0x3d,0x20,0x76,0x65,0x63,0x33,0x28,0x30,0x2e,0x34,0x38,0x35,0x30,0x37,0x31,0x32,
0x34,0x31,0x38,0x35,0x35,0x36,0x32,0x31,0x33,0x33,0x37,0x38,0x39,0x30,0x36,0x32,
0x35,0x2c,0x20,0x30,0x2e,0x37,0x32,0x37,0x36,0x30,0x36,0x38,0x39,0x32,0x35,0x38,
0x35,0x37,0x35,0x34,0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,
0x34,0x38,0x35,0x30,0x37,0x31,0x32,0x34,0x31,0x38,0x35,0x35,0x36,0x32,0x31,0x33,
0x33,0x37,0x38,0x39,0x30,0x36,0x32,0x35,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,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,
0x6d,0x5f,0x31,0x29,0x2c,0x20,0x31,0x2e,0x30,0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
0x20,0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x38,0x2e,0x68,0x61,0x73,0x43,0x6c,0x6f,
0x75,0x64,0x73,0x20,0x3d,0x3d,0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,
0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x28,0x28,0x5f,0x31,0x39,
0x39,0x20,0x2f,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x32,0x34,0x30,0x29,0x29,0x20,
0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2b,0x20,0x76,0x65,0x63,0x33,0x28,0x5f,0x31,
0x37,0x38,0x2e,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,
0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,
0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,
0x32,0x37,0x36,0x20,0x3d,0x20,0x66,0x62,0x6d,0x28,0x70,0x61,0x72,0x61,0x6d,0x29,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c,0x20,
0x3d,0x20,0x6d,0x69,0x78,0x28,0x66,0x69,0x6e,0x61,0x6c,0x2c,0x20,0x76,0x65,0x63,
0x33,0x28,0x31,0x2e,0x30,0x29,0x2c,0x20,0x76,0x65,0x63,0x33,0x28,0x28,0x6d,0x61,
0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x34,0x30,0x29,0x20,0x2a,0x20,0x28,
0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x35,0x2c,0x20,
0x31,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x37,0x36,0x29,0x20,0x2a,0x20,0x30,0x2e,0x33,
0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,0x39,0x35,
0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,
0x75,0x72,0x6e,0x20,0x66,0x69,0x6e,0x61,0x6c,0x3b,0x0a,0x7d,0x0a,0x0a,0x76,0x6f,
0x69,0x64,0x20,0x6d,0x61,0x69,0x6e,0x28,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,
0x68,0x69,0x67,0x68,0x70,0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,
0x20,0x3d,0x20,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x70,0x6f,0x73,
0x2e,0x78,0x79,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x68,0x69,0x67,0x68,0x70,
0x20,0x76,0x65,0x63,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x20,0x3d,0x20,
0x5f,0x31,0x37,0x38,0x2e,0x73,0x75,0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,
0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x72,0x61,0x67,0x5f,0x63,0x6f,0x6c,0x6f,0x72,
0x20,0x3d,0x20,0x76,0x65,0x63,0x34,0x28,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,
0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x29,0x2c,0x20,0x31,0x2e,0x30,
0x29,0x3b,0x0a,0x7d,0x0a,0x0a,0x00,
];
/*
#include <metal_stdlib>
@ -978,19 +971,20 @@ vs_sky_source_metal_macos := u8.[
}
float _240 = _199.y;
final += (mix(_178.horizonHalo, float3(0.0), float3(fast::clamp(abs(_240) * 80.0, 0.0, 1.0))) * 0.100000001490116119384765625);
if (_178.hasClouds == 1)
{
float3 param = ((_199 / float3(_240)) * 2.0) + float3(_178.time * 0.0500000007450580596923828125);
float _269 = fbm(param);
float3 _273 = final;
float3 _282 = mix(_273, float3(1.0), float3((fast::max(0.0, _240) * (smoothstep(0.5, 1.0, _269) * 0.300000011920928955078125)) * 2.0));
final = _282;
return _282;
float _276 = fbm(param);
final = mix(final, float3(1.0), float3((fast::max(0.0, _240) * (smoothstep(0.5, 1.0, _276) * 0.300000011920928955078125)) * 2.0));
}
return final;
}
fragment main0_out main0(main0_in in [[stage_in]], constant sky_world_config& _178 [[buffer(0)]])
{
main0_out out = {};
float3 param = fast::normalize(in.pos.xyz);
float3 param_1 = float3(0.485071241855621337890625, 0.72760689258575439453125, 0.485071241855621337890625);
float3 param_1 = float3(_178.sunPosition);
out.frag_color = float4(sky(param, param_1, _178), 1.0);
return out;
}
@ -1237,50 +1231,46 @@ fs_sky_source_metal_macos := u8.[
0x30,0x2c,0x20,0x31,0x2e,0x30,0x29,0x29,0x29,0x20,0x2a,0x20,0x30,0x2e,0x31,0x30,
0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x34,0x39,0x30,0x31,0x31,0x36,0x31,0x31,0x39,
0x33,0x38,0x34,0x37,0x36,0x35,0x36,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,
0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x28,
0x28,0x5f,0x31,0x39,0x39,0x20,0x2f,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,
0x32,0x34,0x30,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,0x30,0x29,0x20,0x2b,0x20,0x66,
0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x37,0x38,0x2e,0x74,0x69,0x6d,0x65,0x20,
0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,0x30,0x30,0x30,0x30,0x37,0x34,0x35,
0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,0x33,0x38,0x32,0x38,0x31,0x32,0x35,
0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x32,0x36,
0x39,0x20,0x3d,0x20,0x66,0x62,0x6d,0x28,0x70,0x61,0x72,0x61,0x6d,0x29,0x3b,0x0a,
0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x5f,0x32,0x37,0x33,0x20,
0x3d,0x20,0x66,0x69,0x6e,0x61,0x6c,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,
0x61,0x74,0x33,0x20,0x5f,0x32,0x38,0x32,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x5f,
0x32,0x37,0x33,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,0x29,
0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x28,0x66,0x61,0x73,0x74,0x3a,0x3a,
0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x34,0x30,0x29,0x20,0x2a,
0x20,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,0x35,
0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x36,0x39,0x29,0x20,0x2a,0x20,0x30,
0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,0x38,
0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x29,0x20,0x2a,0x20,0x32,0x2e,
0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c,0x20,0x3d,
0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x20,0x20,0x20,0x20,0x72,0x65,0x74,0x75,0x72,
0x6e,0x20,0x5f,0x32,0x38,0x32,0x3b,0x0a,0x7d,0x0a,0x0a,0x66,0x72,0x61,0x67,0x6d,
0x65,0x6e,0x74,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,0x5d,0x5d,0x2c,0x20,0x63,0x6f,
0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x73,0x6b,0x79,0x5f,0x77,0x6f,0x72,0x6c,0x64,
0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x26,0x20,0x5f,0x31,0x37,0x38,0x20,0x5b,0x5b,
0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,0x5d,0x29,0x0a,0x7b,0x0a,0x20,
0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,0x75,0x74,0x20,0x6f,0x75,0x74,
0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,0x66,0x61,0x73,0x74,0x3a,0x3a,
0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,0x69,0x6e,0x2e,0x70,0x6f,0x73,
0x2e,0x78,0x79,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,
0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x20,0x3d,0x20,0x66,0x6c,0x6f,0x61,
0x74,0x33,0x28,0x30,0x2e,0x34,0x38,0x35,0x30,0x37,0x31,0x32,0x34,0x31,0x38,0x35,
0x35,0x36,0x32,0x31,0x33,0x33,0x37,0x38,0x39,0x30,0x36,0x32,0x35,0x2c,0x20,0x30,
0x2e,0x37,0x32,0x37,0x36,0x30,0x36,0x38,0x39,0x32,0x35,0x38,0x35,0x37,0x35,0x34,
0x33,0x39,0x34,0x35,0x33,0x31,0x32,0x35,0x2c,0x20,0x30,0x2e,0x34,0x38,0x35,0x30,
0x37,0x31,0x32,0x34,0x31,0x38,0x35,0x35,0x36,0x32,0x31,0x33,0x33,0x37,0x38,0x39,
0x30,0x36,0x32,0x35,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,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,0x6d,0x2c,0x20,0x70,0x61,
0x72,0x61,0x6d,0x5f,0x31,0x2c,0x20,0x5f,0x31,0x37,0x38,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,
0x69,0x66,0x20,0x28,0x5f,0x31,0x37,0x38,0x2e,0x68,0x61,0x73,0x43,0x6c,0x6f,0x75,
0x64,0x73,0x20,0x3d,0x3d,0x20,0x31,0x29,0x0a,0x20,0x20,0x20,0x20,0x7b,0x0a,0x20,
0x20,0x20,0x20,0x20,0x20,0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,
0x72,0x61,0x6d,0x20,0x3d,0x20,0x28,0x28,0x5f,0x31,0x39,0x39,0x20,0x2f,0x20,0x66,
0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x32,0x34,0x30,0x29,0x29,0x20,0x2a,0x20,0x32,
0x2e,0x30,0x29,0x20,0x2b,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x37,
0x38,0x2e,0x74,0x69,0x6d,0x65,0x20,0x2a,0x20,0x30,0x2e,0x30,0x35,0x30,0x30,0x30,
0x30,0x30,0x30,0x30,0x37,0x34,0x35,0x30,0x35,0x38,0x30,0x35,0x39,0x36,0x39,0x32,
0x33,0x38,0x32,0x38,0x31,0x32,0x35,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x66,0x6c,0x6f,0x61,0x74,0x20,0x5f,0x32,0x37,0x36,0x20,0x3d,0x20,0x66,
0x62,0x6d,0x28,0x70,0x61,0x72,0x61,0x6d,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x20,
0x20,0x20,0x20,0x66,0x69,0x6e,0x61,0x6c,0x20,0x3d,0x20,0x6d,0x69,0x78,0x28,0x66,
0x69,0x6e,0x61,0x6c,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x31,0x2e,0x30,
0x29,0x2c,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x28,0x66,0x61,0x73,0x74,0x3a,
0x3a,0x6d,0x61,0x78,0x28,0x30,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x34,0x30,0x29,0x20,
0x2a,0x20,0x28,0x73,0x6d,0x6f,0x6f,0x74,0x68,0x73,0x74,0x65,0x70,0x28,0x30,0x2e,
0x35,0x2c,0x20,0x31,0x2e,0x30,0x2c,0x20,0x5f,0x32,0x37,0x36,0x29,0x20,0x2a,0x20,
0x30,0x2e,0x33,0x30,0x30,0x30,0x30,0x30,0x30,0x31,0x31,0x39,0x32,0x30,0x39,0x32,
0x38,0x39,0x35,0x35,0x30,0x37,0x38,0x31,0x32,0x35,0x29,0x29,0x20,0x2a,0x20,0x32,
0x2e,0x30,0x29,0x29,0x3b,0x0a,0x20,0x20,0x20,0x20,0x7d,0x0a,0x20,0x20,0x20,0x20,
0x72,0x65,0x74,0x75,0x72,0x6e,0x20,0x66,0x69,0x6e,0x61,0x6c,0x3b,0x0a,0x7d,0x0a,
0x0a,0x66,0x72,0x61,0x67,0x6d,0x65,0x6e,0x74,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,
0x5d,0x5d,0x2c,0x20,0x63,0x6f,0x6e,0x73,0x74,0x61,0x6e,0x74,0x20,0x73,0x6b,0x79,
0x5f,0x77,0x6f,0x72,0x6c,0x64,0x5f,0x63,0x6f,0x6e,0x66,0x69,0x67,0x26,0x20,0x5f,
0x31,0x37,0x38,0x20,0x5b,0x5b,0x62,0x75,0x66,0x66,0x65,0x72,0x28,0x30,0x29,0x5d,
0x5d,0x29,0x0a,0x7b,0x0a,0x20,0x20,0x20,0x20,0x6d,0x61,0x69,0x6e,0x30,0x5f,0x6f,
0x75,0x74,0x20,0x6f,0x75,0x74,0x20,0x3d,0x20,0x7b,0x7d,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x20,0x3d,0x20,
0x66,0x61,0x73,0x74,0x3a,0x3a,0x6e,0x6f,0x72,0x6d,0x61,0x6c,0x69,0x7a,0x65,0x28,
0x69,0x6e,0x2e,0x70,0x6f,0x73,0x2e,0x78,0x79,0x7a,0x29,0x3b,0x0a,0x20,0x20,0x20,
0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x20,
0x3d,0x20,0x66,0x6c,0x6f,0x61,0x74,0x33,0x28,0x5f,0x31,0x37,0x38,0x2e,0x73,0x75,
0x6e,0x50,0x6f,0x73,0x69,0x74,0x69,0x6f,0x6e,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,0x73,0x6b,0x79,0x28,0x70,0x61,0x72,0x61,
0x6d,0x2c,0x20,0x70,0x61,0x72,0x61,0x6d,0x5f,0x31,0x2c,0x20,0x5f,0x31,0x37,0x38,
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,
];
sky_shader_desc :: (backend: sg_backend) -> sg_shader_desc {
desc: sg_shader_desc;

View File

@ -113,8 +113,10 @@ vec3 sky(vec3 skypos, vec3 sunpos) {
final = vec3(final);
// Cirrus Clouds
if(hasClouds == 1) {
float density = smoothstep(1.0 - cirrus, 1.0, fbm(npos.xyz / npos.y * 2.0 + time * 0.05)) * 0.3;
final.rgb = mix(final.rgb, vec3(1.0, 1.0, 1.0), max(0.0, npos.y) * density * 2.0);
}
return final;
}
@ -123,7 +125,7 @@ vec3 sky(vec3 skypos, vec3 sunpos) {
void main() {
vec3 dir = normalize(pos.xyz);
vec3 color = sky(dir, normalize(vec3(0.6,0.9,0.6)));
vec3 color = sky(dir, sunPosition);
frag_color = vec4(color, 1.0);
}
@end