Skip to content

Commit 6a6a729

Browse files
committed
sokol: fix native
1 parent 7f24ae9 commit 6a6a729

4 files changed

Lines changed: 129 additions & 69 deletions

File tree

‎thirdparty/sokol/sokol_app.h‎

Lines changed: 70 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3185,6 +3185,13 @@ typedef struct {
31853185
@end
31863186
#endif // SOKOL_GLCORE
31873187

3188+
// __v_ start
3189+
@interface MyView2 : NSView
3190+
@end
3191+
3192+
static NSView* g_view = nil;
3193+
// __v_ end
3194+
31883195
typedef struct {
31893196
uint32_t flags_changed_store;
31903197
uint8_t mouse_buttons;
@@ -3941,10 +3948,6 @@ _SOKOL_PRIVATE void _sapp_call_frame_native(void) {
39413948
}
39423949
// __v_ end
39433950

3944-
// __v_ start
3945-
#include "sokol_app2.h" // __v_
3946-
// __v_ end
3947-
39483951
_SOKOL_PRIVATE void _sapp_call_cleanup(void) {
39493952
if (!_sapp.cleanup_called) {
39503953
if (_sapp.desc.cleanup_cb) {
@@ -6491,6 +6494,10 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) {
64916494
}
64926495
}
64936496

6497+
// __v_ start
6498+
#include "sokol_app2.h" // __v_
6499+
// __v_ end
6500+
64946501
@implementation _sapp_macos_app_delegate
64956502
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
64966503
_SOKOL_UNUSED(aNotification);
@@ -6514,6 +6521,28 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) {
65146521
_sapp.macos.window.acceptsMouseMovedEvents = YES;
65156522
_sapp.macos.window.restorable = YES;
65166523

6524+
// __v_ start
6525+
[_sapp.macos.window setMinSize:NSMakeSize(_sapp.desc.min_width, _sapp.desc.min_height)];
6526+
// Quit menu
6527+
NSMenu* menu_bar = [[NSMenu alloc] init];
6528+
NSMenuItem* app_menu_item = [[NSMenuItem alloc] init];
6529+
[menu_bar addItem:app_menu_item];
6530+
NSApp.mainMenu = menu_bar;
6531+
NSMenu* app_menu = [[NSMenu alloc] init];
6532+
NSString* window_title_as_nsstring = [NSString stringWithUTF8String:_sapp.window_title];
6533+
NSString* quit_title = [@"Quit " stringByAppendingString:window_title_as_nsstring];
6534+
NSMenuItem* quit_menu_item = [[NSMenuItem alloc]
6535+
initWithTitle:quit_title
6536+
action:@selector(terminate:)
6537+
keyEquivalent:@"q"];
6538+
[app_menu addItem:quit_menu_item];
6539+
app_menu_item.submenu = app_menu;
6540+
_SAPP_OBJC_RELEASE(window_title_as_nsstring);
6541+
_SAPP_OBJC_RELEASE(app_menu);
6542+
_SAPP_OBJC_RELEASE(app_menu_item);
6543+
_SAPP_OBJC_RELEASE(menu_bar);
6544+
// __v_ end
6545+
65176546
_sapp.macos.win_dlg = [[_sapp_macos_window_delegate alloc] init];
65186547
_sapp.macos.window.delegate = _sapp.macos.win_dlg;
65196548
#if defined(SOKOL_METAL)
@@ -6527,13 +6556,45 @@ _SOKOL_PRIVATE void _sapp_macos_frame(void) {
65276556
[_sapp.macos.window makeFirstResponder:_sapp.macos.view];
65286557
[_sapp.macos.window center];
65296558
_sapp.valid = true;
6559+
6560+
// __v_ start
6561+
if (!_sapp.__v_native_render) { // __v_
6562+
if (_sapp.fullscreen) {
6563+
/* ^^^ on GL, this already toggles a rendered frame, so set the valid flag
6564+
* before */
6565+
[_sapp.macos.window toggleFullScreen:self];
6566+
} else {
6567+
[_sapp.macos.window center];
6568+
}
6569+
} // __v_
6570+
// __v_ end
6571+
65306572
NSApp.activationPolicy = NSApplicationActivationPolicyRegular;
6531-
if (_sapp.fullscreen) {
6532-
/* ^^^ on GL, this already toggles a rendered frame, so set the valid flag
6533-
* before */
6534-
[_sapp.macos.window toggleFullScreen:self];
6535-
}
65366573
[NSApp activateIgnoringOtherApps:YES];
6574+
6575+
// __v_ start
6576+
// Create a child view for native rendering
6577+
if (_sapp.__v_native_render) {
6578+
CGRect wRect = _sapp.macos.window.frame;
6579+
NSView *contentView = _sapp.macos.window.contentView;
6580+
CGRect cRect = contentView.frame;
6581+
CGRect rect = CGRectMake(wRect.origin.x, wRect.origin.y, cRect.size.width,
6582+
cRect.size.height);
6583+
NSWindow *overlayWindow =
6584+
[[NSWindow alloc] initWithContentRect:rect
6585+
styleMask:NSBorderlessWindowMask
6586+
backing:NSBackingStoreBuffered
6587+
defer:NO];
6588+
[overlayWindow setOpaque:YES];
6589+
[_sapp.macos.window setIgnoresMouseEvents:NO];
6590+
g_view = [[MyView2 alloc] init];
6591+
g_view.autoresizingMask = NSViewWidthSizable | NSViewHeightSizable;
6592+
overlayWindow.contentView = g_view;
6593+
[contentView addSubview:g_view];
6594+
[_sapp.macos.window center];
6595+
}
6596+
// __v_ end
6597+
65376598
[_sapp.macos.window makeKeyAndOrderFront:nil];
65386599
_sapp_macos_update_dimensions();
65396600
[NSEvent setMouseCoalescingEnabled:NO];

‎vlib/gg/gg_darwin.m‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
#include <Cocoa/Cocoa.h>
22

3-
// Global view variable
4-
static NSView *g_view = nil;
5-
63
NSColor* nscolor(gg__Color c) {
74
float red = (float)c.r / 255.0f;
85
float green = (float)c.g / 255.0f;

‎vlib/v2/gen/arm64/arm64.v‎

Lines changed: 54 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -51,67 +51,67 @@ pub mut:
5151
type_size_stack map[int]bool
5252
type_align_stack map[int]bool
5353
// Lookup caches for O(1) name resolution
54-
func_by_name map[string]int // function name → index in g.mod.funcs
55-
global_by_name map[string]int // global name → index in g.mod.globals
54+
func_by_name map[string]int // function name → index in g.mod.funcs
55+
global_by_name map[string]int // global name → index in g.mod.globals
5656
// Per-function cache for alloca pointer analysis (cleared per function)
5757
alloca_ptr_cache map[int]u8 // alloca_id → 1=has_ptrs, 2=no_ptrs
5858
// Cached environment variables for debug tracing (read once at init)
59-
env_dump_funcrefs string
60-
env_trace_skip_dead string
61-
env_dump_stackmap string
62-
env_dump_blocks string
63-
env_trace_paramspill string
64-
env_trace_val string
65-
env_trace_instr string
66-
env_trace_cmp string
67-
env_trace_store string
68-
env_trace_load string
69-
env_trace_call string
70-
env_trace_ret string
71-
env_trace_bitcast string
72-
env_trace_assign string
73-
env_trace_extract string
59+
env_dump_funcrefs string
60+
env_trace_skip_dead string
61+
env_dump_stackmap string
62+
env_dump_blocks string
63+
env_trace_paramspill string
64+
env_trace_val string
65+
env_trace_instr string
66+
env_trace_cmp string
67+
env_trace_store string
68+
env_trace_load string
69+
env_trace_call string
70+
env_trace_ret string
71+
env_trace_bitcast string
72+
env_trace_assign string
73+
env_trace_extract string
7474
env_trace_struct_init string
75-
env_trace_agg_copy string
76-
env_trace_insert string
77-
env_trace_callcount string
78-
env_trace_callarg string
75+
env_trace_agg_copy string
76+
env_trace_insert string
77+
env_trace_callcount string
78+
env_trace_callarg string
7979
env_trace_struct_addr string
80-
env_trace_strlit string
81-
env_trace_storeval string
80+
env_trace_strlit string
81+
env_trace_storeval string
8282
}
8383

8484
pub fn Gen.new(mod &mir.Module) &Gen {
8585
return &Gen{
86-
mod: mod
87-
macho: MachOObject.new()
88-
type_size_cache: map[int]int{}
89-
type_align_cache: map[int]int{}
90-
type_size_stack: map[int]bool{}
91-
type_align_stack: map[int]bool{}
92-
env_dump_funcrefs: os.getenv('V2_ARM64_DUMP_FUNCREFS')
93-
env_trace_skip_dead: os.getenv('V2_ARM64_TRACE_SKIP_DEAD')
94-
env_dump_stackmap: os.getenv('V2_ARM64_DUMP_STACKMAP')
95-
env_dump_blocks: os.getenv('V2_ARM64_DUMP_BLOCKS')
96-
env_trace_paramspill: os.getenv('V2_ARM64_TRACE_PARAMSPILL')
97-
env_trace_val: os.getenv('V2_ARM64_TRACE_VAL')
98-
env_trace_instr: os.getenv('V2_ARM64_TRACE_INSTR')
99-
env_trace_cmp: os.getenv('V2_ARM64_TRACE_CMP')
100-
env_trace_store: os.getenv('V2_ARM64_TRACE_STORE')
101-
env_trace_load: os.getenv('V2_ARM64_TRACE_LOAD')
102-
env_trace_call: os.getenv('V2_ARM64_TRACE_CALL')
103-
env_trace_ret: os.getenv('V2_ARM64_TRACE_RET')
104-
env_trace_bitcast: os.getenv('V2_ARM64_TRACE_BITCAST')
105-
env_trace_assign: os.getenv('V2_ARM64_TRACE_ASSIGN')
106-
env_trace_extract: os.getenv('V2_ARM64_TRACE_EXTRACT')
86+
mod: mod
87+
macho: MachOObject.new()
88+
type_size_cache: map[int]int{}
89+
type_align_cache: map[int]int{}
90+
type_size_stack: map[int]bool{}
91+
type_align_stack: map[int]bool{}
92+
env_dump_funcrefs: os.getenv('V2_ARM64_DUMP_FUNCREFS')
93+
env_trace_skip_dead: os.getenv('V2_ARM64_TRACE_SKIP_DEAD')
94+
env_dump_stackmap: os.getenv('V2_ARM64_DUMP_STACKMAP')
95+
env_dump_blocks: os.getenv('V2_ARM64_DUMP_BLOCKS')
96+
env_trace_paramspill: os.getenv('V2_ARM64_TRACE_PARAMSPILL')
97+
env_trace_val: os.getenv('V2_ARM64_TRACE_VAL')
98+
env_trace_instr: os.getenv('V2_ARM64_TRACE_INSTR')
99+
env_trace_cmp: os.getenv('V2_ARM64_TRACE_CMP')
100+
env_trace_store: os.getenv('V2_ARM64_TRACE_STORE')
101+
env_trace_load: os.getenv('V2_ARM64_TRACE_LOAD')
102+
env_trace_call: os.getenv('V2_ARM64_TRACE_CALL')
103+
env_trace_ret: os.getenv('V2_ARM64_TRACE_RET')
104+
env_trace_bitcast: os.getenv('V2_ARM64_TRACE_BITCAST')
105+
env_trace_assign: os.getenv('V2_ARM64_TRACE_ASSIGN')
106+
env_trace_extract: os.getenv('V2_ARM64_TRACE_EXTRACT')
107107
env_trace_struct_init: os.getenv('V2_ARM64_TRACE_STRUCT_INIT')
108-
env_trace_agg_copy: os.getenv('V2_ARM64_TRACE_AGG_COPY')
109-
env_trace_insert: os.getenv('V2_ARM64_TRACE_INSERT')
110-
env_trace_callcount: os.getenv('V2_ARM64_TRACE_CALLCOUNT')
111-
env_trace_callarg: os.getenv('V2_ARM64_TRACE_CALLARG')
108+
env_trace_agg_copy: os.getenv('V2_ARM64_TRACE_AGG_COPY')
109+
env_trace_insert: os.getenv('V2_ARM64_TRACE_INSERT')
110+
env_trace_callcount: os.getenv('V2_ARM64_TRACE_CALLCOUNT')
111+
env_trace_callarg: os.getenv('V2_ARM64_TRACE_CALLARG')
112112
env_trace_struct_addr: os.getenv('V2_ARM64_TRACE_STRUCT_ADDR')
113-
env_trace_strlit: os.getenv('V2_ARM64_TRACE_STRLIT')
114-
env_trace_storeval: os.getenv('V2_ARM64_TRACE_STOREVAL')
113+
env_trace_strlit: os.getenv('V2_ARM64_TRACE_STRLIT')
114+
env_trace_storeval: os.getenv('V2_ARM64_TRACE_STOREVAL')
115115
}
116116
}
117117

@@ -147,7 +147,6 @@ pub fn (mut g Gen) gen() {
147147
g.gen_func(func)
148148
}
149149

150-
151150
// Add return-zero stub for unresolved symbols.
152151
// When the linker can't resolve a symbol, it redirects calls here instead of
153152
// letting them jump to the Mach-O header which corrupts memory.
@@ -262,7 +261,8 @@ fn (mut g Gen) gen_func(func mir.Function) {
262261
g.x8_save_offset = 0
263262
g.mark_sumtype_data_heap_allocas(func)
264263
g.allocate_registers(func)
265-
if g.env_dump_funcrefs.len > 0 && (g.env_dump_funcrefs == '*' || func.name == g.env_dump_funcrefs) {
264+
if g.env_dump_funcrefs.len > 0
265+
&& (g.env_dump_funcrefs == '*' || func.name == g.env_dump_funcrefs) {
266266
eprintln('ARM64 FUNCREFS fn=${func.name} begin')
267267
for i, vv in g.mod.values {
268268
if vv.kind != .func_ref {
@@ -543,7 +543,8 @@ fn (mut g Gen) gen_func(func mir.Function) {
543543

544544
g.stack_size = (slot_offset + 16) & ~0xF
545545

546-
if g.env_dump_stackmap.len > 0 && (g.env_dump_stackmap == '*' || func.name == g.env_dump_stackmap) {
546+
if g.env_dump_stackmap.len > 0
547+
&& (g.env_dump_stackmap == '*' || func.name == g.env_dump_stackmap) {
547548
eprintln('ARM64 FRAME ${func.name} stack_size=${g.stack_size} x8_save_offset=${g.x8_save_offset}')
548549
eprintln('ARM64 STACKMAP ${func.name} begin')
549550
for vid, off in g.stack_map {

‎vlib/v2/ssa/builder.v‎

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5772,13 +5772,14 @@ fn (mut b Builder) collect_init_expr_values(expr ast.InitExpr) (TypeID, []ValueI
57725772
// (e.g., TypeStore.new() returns &TypeStore), but the field expects
57735773
// a value type, we need to load (dereference) the pointer.
57745774
val_typ_id := b.mod.values[field_val].typ
5775-
if val_typ_id > 0 && val_typ_id < b.mod.type_store.types.len
5776-
&& field_type > 0 && field_type < b.mod.type_store.types.len {
5775+
if val_typ_id > 0 && val_typ_id < b.mod.type_store.types.len && field_type > 0
5776+
&& field_type < b.mod.type_store.types.len {
57775777
val_typ := b.mod.type_store.types[val_typ_id]
57785778
fld_typ := b.mod.type_store.types[field_type]
57795779
if val_typ.kind == .ptr_t && fld_typ.kind == .struct_t {
5780-
field_val = b.mod.add_instr(.load, b.cur_block, field_type,
5781-
[field_val])
5780+
field_val = b.mod.add_instr(.load, b.cur_block, field_type, [
5781+
field_val,
5782+
])
57825783
}
57835784
}
57845785
field_vals << field_val

0 commit comments

Comments
 (0)