From 8b0bdfd5534abe4414b28dbe1f627b885521a9ec Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Wed, 27 Oct 2021 17:12:05 -0500 Subject: [PATCH] synchronizing changes --- .github/workflows/onyx-build.yml | 2 + .vimspector.json.old | 24 ----- core/container/bucket_array.onyx | 42 +++++++++ core/container/list.onyx | 4 +- misc/vscode/language-configuration.json | 3 +- misc/vscode/onyx-0.0.1.vsix | Bin 3577 -> 3669 bytes misc/vscode/syntaxes/onyx.tmLanguage | 6 +- modules/bmfont/bmfont_loader.onyx | 89 ++++++++++++++++-- .../immediate_mode/immediate_renderer.onyx | 6 +- tests/bucket_array | 24 +++++ tests/bucket_array.onyx | 4 + 11 files changed, 164 insertions(+), 40 deletions(-) delete mode 100644 .vimspector.json.old diff --git a/.github/workflows/onyx-build.yml b/.github/workflows/onyx-build.yml index cfd52d65..7a503ae0 100644 --- a/.github/workflows/onyx-build.yml +++ b/.github/workflows/onyx-build.yml @@ -15,6 +15,8 @@ jobs: - uses: actions/checkout@v2 - name: make build.sh executable run: chmod +x build.sh + - name: make build directory + run: mkdir -p build - name: build onyx run: ./build.sh - name: run tests diff --git a/.vimspector.json.old b/.vimspector.json.old deleted file mode 100644 index b8923072..00000000 --- a/.vimspector.json.old +++ /dev/null @@ -1,24 +0,0 @@ -{ "configurations": { - "cpptools-run": { - "adapter": "vscode-cpptools", - "configuration": { - "type": "cppdbg", - "request": "launch", - "program": "/home/brendan/dev/c/onyx/bin/onyx-debug", - "args": ["-VVV", "-I", "/home/brendan/dev/c/onyx", "-o", "site/analyzer.wasm", "-r", "js", "--no-colors", "src/build.onyx", "--doc", "doc/source_reference" ], - "stopAtEntry": true, - "cwd": "/home/brendan/dev/onyx/wasm_analyzer", - "environment": [], - "externalConsole": false, - "MIMode": "gdb", - "setupCommands": [ - { - "description": "Enable pretty-printing for gdb", - "text": "-enable-pretty-printing", - "ignoreFailures": true - } - ] - } - } - } -} diff --git a/core/container/bucket_array.onyx b/core/container/bucket_array.onyx index 6947ff72..83b9e7ce 100644 --- a/core/container/bucket_array.onyx +++ b/core/container/bucket_array.onyx @@ -50,6 +50,11 @@ clear :: (use b: ^Bucket_Array($T)) { return get(^b, idx); } +#operator ^[] macro (b: Bucket_Array($T), idx: i32) -> ^T { + get_ptr :: get_ptr + return get_ptr(^b, idx); +} + get :: (use b: ^Bucket_Array($T), idx: i32) -> T { bucket_index := idx / elements_per_bucket; elem_index := idx % elements_per_bucket; @@ -96,6 +101,43 @@ for_each :: macro (b: Bucket_Array($T), body: Code) { } } +iterator :: (b: ^Bucket_Array($T)) -> Iterator(T) { + Context :: struct (T: type_expr) { + ba : ^Bucket_Array(T); + bucket_idx : i32; + elem_idx : i32; + } + + c := new(#type Context(T)); + c.ba = b; + c.bucket_idx = 0; + c.elem_idx = 0; + + next :: (use c: ^Context($T)) -> (T, bool) { + use package core.intrinsics.onyx + + bucket := ^ba.buckets[bucket_idx]; + while elem_idx == bucket.count { + bucket_idx += 1; + if bucket_idx == ba.buckets.count do return __zero_value(T), false; + + bucket = ^ba.buckets[bucket_idx]; + elem_idx = 0; + } + + defer elem_idx += 1; + return bucket.data[elem_idx], true; + } + + close :: (x: rawptr) => cfree(x); + + return .{ + data = c, + next = #solidify next { T=T }, + close = close, + }; +} + #private alloc_bucket :: (use b: ^Bucket_Array($T)) -> Bucket_Array.Bucket(T) { data := raw_alloc(allocator, sizeof T * elements_per_bucket); diff --git a/core/container/list.onyx b/core/container/list.onyx index 4521c787..ceaaf3b2 100644 --- a/core/container/list.onyx +++ b/core/container/list.onyx @@ -120,6 +120,4 @@ get_iterator :: (list: ^List($T)) -> Iterator(T) { } #private_file -allocate_elem :: (list: ^List($T)) -> ^ListElem(T) { - return new(#type ListElem(T), allocator=list.allocator); -} +allocate_elem :: macro (list: ^List($T)) => new(#type ListElem(T), allocator=list.allocator); diff --git a/misc/vscode/language-configuration.json b/misc/vscode/language-configuration.json index 78b4387f..31136ff4 100644 --- a/misc/vscode/language-configuration.json +++ b/misc/vscode/language-configuration.json @@ -24,5 +24,6 @@ ["[", "]"], ["(", ")"], ["\"", "\""] - ] + ], + "wordPattern": "(-?\\d*\\.\\d\\w*)|([^\\`\\~\\!\\@\\#\\%\\^\\&\\*\\(\\)\\-\\=\\+\\[\\{\\]\\}\\\\\\|\\;\\:\\'\\\"\\,\\.\\<\\>\\/\\?\\s]+)" } \ No newline at end of file diff --git a/misc/vscode/onyx-0.0.1.vsix b/misc/vscode/onyx-0.0.1.vsix index 3b6f9e23c7bb70e3af11a51d04ff83d6460d2768..420a7b7850a946bcd1b0b121ffd57b194b5629e0 100644 GIT binary patch delta 2021 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 diff --git a/misc/vscode/syntaxes/onyx.tmLanguage b/misc/vscode/syntaxes/onyx.tmLanguage index d420035d..2f651c03 100644 --- a/misc/vscode/syntaxes/onyx.tmLanguage +++ b/misc/vscode/syntaxes/onyx.tmLanguage @@ -267,7 +267,7 @@ match - \b(str|cstr)\b + \b(str|cstr|type_expr|any)\b name storage.type.onyx @@ -303,13 +303,13 @@ match - (\b[[:alpha:]_]+[[:alnum:]_]*\b)\s*[!]?\s*[\(] + (\b[[:alpha:]_]+[[:alnum:]_]*\b)\s*[:]\s*[:]\s*[\(] captures 1 name - support.function.onyx + entity.name.function.onyx diff --git a/modules/bmfont/bmfont_loader.onyx b/modules/bmfont/bmfont_loader.onyx index 2de49c74..413ef4fd 100644 --- a/modules/bmfont/bmfont_loader.onyx +++ b/modules/bmfont/bmfont_loader.onyx @@ -1,14 +1,10 @@ package bmfont use package core - +#private_file json :: package json load_bmfont :: (fnt_data: [] u8) -> BMFont { - bmf: BMFont; - memory.set(^bmf, 0, sizeof BMFont); - - map.init(^bmf.pages); - map.init(^bmf.glyphs); + bmf := create_bmfont(); parse_bmfont(fnt_data, ^bmf); @@ -22,6 +18,26 @@ load_bmfont :: (fnt_data: [] u8) -> BMFont { return bmf; } +load_bmfont_from_json :: (fnt_data: [] u8) -> BMFont { + bmf := create_bmfont(); + + j := json.decode(fnt_data); + defer json.free(j); + + extract_bmfont_from_json(^bmf, j.root); +} + +#private_file +create_bmfont :: () -> BMFont { + bmf: BMFont; + memory.set(^bmf, 0, sizeof BMFont); + + map.init(^bmf.pages); + map.init(^bmf.glyphs); + + return bmf; +} + #private_file parse_bmfont :: (fnt_data: [] u8, font: ^BMFont) { R :: package core.string.reader @@ -134,3 +150,64 @@ parse_bmfont :: (fnt_data: [] u8, font: ^BMFont) { elseif key == "blueChnl" do common.blue_channel = ~~ conv.str_to_i64(value); } } + +#private_file +extract_bmfont_from_json :: (font: ^BMFont, root: ^json.Value) { + font_info := root["info"]; + font.info.face_name = font_info["face"]->as_str(); + font.info.size = ~~font_info["size"]->as_int(); + font.info.bold = font_info["bold"]->as_int() != 0; + font.info.italic = font_info["italic"]->as_int() != 0; + font.info.unicode = font_info["unicode"]->as_int() != 0; + font.info.stretchH = ~~font_info["stretchH"]->as_int(); + font.info.smooth = font_info["smooth"]->as_int() != 0; + font.info.supersampling = ~~font_info["aa"]->as_int(); + + font_padding := font_info["padding"]; + font.info.padding.top = ~~font_padding[0]->as_int(); + font.info.padding.right = ~~font_padding[1]->as_int(); + font.info.padding.bottom = ~~font_padding[2]->as_int(); + font.info.padding.left = ~~font_padding[3]->as_int(); + + font_spacing := font_info["spacing"]; + font.info.spacing.horizontal = ~~font_spacing[0]->as_int(); + font.info.spacing.vertical = ~~font_spacing[1]->as_int(); + + font_common := root["common"]; + font.common.line_height = ~~font_common["lineHeight"]->as_int(); + font.common.baseline = ~~font_common["base"]->as_int(); + font.common.scale_width = ~~font_common["scaleW"]->as_int(); + font.common.scale_height = ~~font_common["scaleH"]->as_int(); + font.common.page_count = ~~font_common["pages"]->as_int(); + font.common.packed = font_common["packed"]->as_int() != 0; + font.common.alpha_channel = ~~font_common["alphaChnl"]->as_int(); + font.common.red_channel = ~~font_common["redChnl"]->as_int(); + font.common.green_channel = ~~font_common["greenChnl"]->as_int(); + font.common.blue_channel = ~~font_common["blueChnl"]->as_int(); + + i := 0; + for page: root["pages"]->as_array() { + defer i += 1; + + font.pages[i] = page->as_str(); + } + + for ch: root["chars"]->as_array() { + id := cast(i32) ch["id"]->as_int(); + font.glyphs[id] = .{ + id = id, + + x = ~~ch["x"]->as_int(), + y = ~~ch["y"]->as_int(), + w = ~~ch["width"]->as_int(), + h = ~~ch["height"]->as_int(), + + xoffset = ~~ch["xoffset"]->as_int(), + yoffset = ~~ch["yoffset"]->as_int(), + xadvance = ~~ch["xadvance"]->as_int(), + + page = ~~ch["page"]->as_int(), + channel = ~~ch["chnl"]->as_int(), + }; + } +} diff --git a/modules/immediate_mode/immediate_renderer.onyx b/modules/immediate_mode/immediate_renderer.onyx index 95f52f87..13e87396 100644 --- a/modules/immediate_mode/immediate_renderer.onyx +++ b/modules/immediate_mode/immediate_renderer.onyx @@ -279,7 +279,7 @@ Immediate_Renderer :: struct { gl.uniform1i(active_shader.texture_uniform, math.max(texture_id, 0)); } - use_ortho_projection :: (use ir: ^Immediate_Renderer, left: f32, right: f32, top: f32, bottom: f32) { + use_ortho_projection :: (use ir: ^Immediate_Renderer, left, right, top, bottom: f32) { projection_matrix := f32.[ 2 / (right - left), 0, 0, 0, 0, 2 / (top - bottom), 0, 0, @@ -297,7 +297,7 @@ Immediate_Renderer :: struct { gl.useProgram(active_shader.program); } - push_scissor :: (use ir: ^Immediate_Renderer, x: f32, y: f32, w: f32, h: f32) { + push_scissor :: (use ir: ^Immediate_Renderer, x, y, w, h: f32) { if vertex_count > 0 do ir->flush(); if !gl.isEnabled(gl.SCISSOR_TEST) { @@ -367,7 +367,7 @@ Immediate_Renderer :: struct { } } - set_window_size :: (use ir: ^Immediate_Renderer, width: i32, height: i32) { + set_window_size :: (use ir: ^Immediate_Renderer, width, height: i32) { window_width = width; window_height = height; diff --git a/tests/bucket_array b/tests/bucket_array index 2f8f1c0b..b5cb2f5e 100644 --- a/tests/bucket_array +++ b/tests/bucket_array @@ -23,4 +23,28 @@ ba[10] is 10. [1] -> 21 [2] -> 22 [3] -> 23 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +16 +17 +18 +19 +20 +21 +22 +23 Sum is 276 diff --git a/tests/bucket_array.onyx b/tests/bucket_array.onyx index 9307dca9..bc48b02a 100644 --- a/tests/bucket_array.onyx +++ b/tests/bucket_array.onyx @@ -14,5 +14,9 @@ main :: (args: [] cstr) { sum += *it; }); + for it: bucket_array.iterator(^ba) { + printf("{}\n", it); + } + printf("Sum is {}\n", sum); } \ No newline at end of file -- 2.25.1