Better build and project file platform layer

This commit is contained in:
Synthasmagoria 2026-08-28 13:24:22 +02:00
commit 2469b45694
8 changed files with 137 additions and 70 deletions

View file

@ -1,7 +1,6 @@
package main
import rl "libraries/raylib"
import "libraries/back"
import "core:log"
main :: proc() {
@ -9,8 +8,8 @@ main :: proc() {
// exe_dir := filepath.dir(string(exe_path))
// os.set_working_directory(exe_dir)
rl.ChangeDirectory(rl.GetApplicationDirectory())
back.register_segfault_handler()
context.assertion_failure_proc = back.assertion_failure_proc
// back.register_segfault_handler()
// context.assertion_failure_proc = back.assertion_failure_proc
register_illegal_instruction_handler()
context.logger = log.create_console_logger()

View file

@ -1,15 +1,5 @@
package main
/*
TODO (synthas): Things to save to the project file
- Grid configuration
- Shape configuration
*/
import "core:os"
import "core:io"
import "core:mem"
PROJECT_DATA_HEADER :: "WOWOWOW THIS IS HEADER WOWOWOW"
PROJECT_DATA_VERSION :: 1
@ -21,55 +11,10 @@ ProjectData :: struct {
animation: Animation,
}
ProjectWriteError :: union {
os.Error,
io.Error,
}
project_write :: proc(project: ^ProjectData, path: string) -> ProjectWriteError {
f := os.open(path, {.Create, .Trunc, .Write}) or_return
defer os.close(f)
w := io.to_writer(os.to_stream(f))
version: u32 = PROJECT_DATA_VERSION
header := PROJECT_DATA_HEADER
io.write_full(w, transmute([]u8)header) or_return
io.write_ptr(w, &version, size_of(version)) or_return
io.write_ptr(w, &project.matrix_count, size_of(project.matrix_count)) or_return
n := io.write_ptr(w, raw_data(project.matrices), int(project.matrix_count) * 9 * size_of(f32)) or_return
os.close(f)
return nil
}
ProjectReadError :: union {
os.Error,
io.Error,
ProjectReadErrorType,
}
ProjectReadErrorType :: enum {
FailedReadingHeader,
BadHeader,
VersionNeedsUpgrade,
return _project_write(project, path)
}
project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError {
f := os.open(path, {.Read}) or_return
defer os.close(f)
r := io.to_reader(os.to_stream(f))
header := PROJECT_DATA_HEADER
header_buffer: [len(PROJECT_DATA_HEADER)]byte
if num, err := io.read_full(r, header_buffer[:]); err != nil {
return ProjectReadErrorType.FailedReadingHeader
}
if mem.compare(transmute([]byte)header, header_buffer[:]) != 0 {
return ProjectReadErrorType.BadHeader
}
_ = io.read_ptr(r, &project.version, size_of(project.matrix_count)) or_return
if project.version != PROJECT_DATA_VERSION {
return ProjectReadErrorType.VersionNeedsUpgrade
}
_ = io.read_ptr(r, &project.matrix_count, size_of(project.matrix_count)) or_return
n := io.read_ptr(r, raw_data(project.matrices), size_of(f32) * len(project.matrices)) or_return
return nil
return _project_read(project, path)
}

61
src/project_default.odin Normal file
View file

@ -0,0 +1,61 @@
#+build !wasm32
#+build !wasm64p32
package main
import "core:os"
import "core:io"
import "core:mem"
ProjectReadErrorType :: enum {
FailedReadingHeader,
BadHeader,
VersionNeedsUpgrade,
}
ProjectWriteError :: union {
os.Error,
io.Error,
}
ProjectReadError :: union {
os.Error,
io.Error,
ProjectReadErrorType,
}
_project_write :: proc(project: ^ProjectData, path: string) -> ProjectWriteError {
f := os.open(path, {.Create, .Trunc, .Write}) or_return
defer os.close(f)
w := io.to_writer(os.to_stream(f))
version: u32 = PROJECT_DATA_VERSION
header := PROJECT_DATA_HEADER
io.write_full(w, transmute([]u8)header) or_return
io.write_ptr(w, &version, size_of(version)) or_return
io.write_ptr(w, &project.matrix_count, size_of(project.matrix_count)) or_return
n := io.write_ptr(w, raw_data(project.matrices), int(project.matrix_count) * 9 * size_of(f32)) or_return
os.close(f)
return nil
}
_project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError {
f := os.open(path, {.Read}) or_return
defer os.close(f)
r := io.to_reader(os.to_stream(f))
header := PROJECT_DATA_HEADER
header_buffer: [len(PROJECT_DATA_HEADER)]byte
if num, err := io.read_full(r, header_buffer[:]); err != nil {
return ProjectReadErrorType.FailedReadingHeader
}
if mem.compare(transmute([]byte)header, header_buffer[:]) != 0 {
return ProjectReadErrorType.BadHeader
}
_ = io.read_ptr(r, &project.version, size_of(project.matrix_count)) or_return
if project.version != PROJECT_DATA_VERSION {
return ProjectReadErrorType.VersionNeedsUpgrade
}
_ = io.read_ptr(r, &project.matrix_count, size_of(project.matrix_count)) or_return
n := io.read_ptr(r, raw_data(project.matrices), size_of(f32) * len(project.matrices)) or_return
return nil
}

26
src/project_web.odin Normal file
View file

@ -0,0 +1,26 @@
#+build wasm32, wasm64p32
package main
ProjectReadErrorType :: enum {
LoadingProjectNotSupportedOnWeb,
}
ProjectWriteErrorType :: enum {
SavingProjectNotSupportedOnWeb,
}
ProjectWriteError :: union {
ProjectWriteErrorType,
}
ProjectReadError :: union {
ProjectReadErrorType,
}
_project_write :: proc(project: ^ProjectData, path: string) -> ProjectWriteError {
return ProjectWriteErrorType.SavingProjectNotSupportedOnWeb;
}
_project_read :: proc(project: ^ProjectData, path: string) -> ProjectReadError {
return ProjectReadErrorType.LoadingProjectNotSupportedOnWeb;
}