Skip to content

Commit d181e6c

Browse files
committed
Merge remote-tracking branch 'origin/master' into merge/fuse-1.8.0
2 parents 8a3f91e + d4da138 commit d181e6c

6 files changed

Lines changed: 411 additions & 565 deletions

File tree

fusepb/FuseX.xcodeproj/project.pbxproj

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88

99
/* Begin PBXBuildFile section */
1010
576F061291E1888735FB9D38 /* FuseQLPreview.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 2395678A67FCB7B7DAFF9A83 /* FuseQLPreview.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; };
11+
70561DA4F03E4F3DA5B85553 /* MetalKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EAA54F20E902456BACB24998 /* MetalKit.framework */; };
12+
B2D0915DE32D43E89E59E3EF /* Metal.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8287F6EDEBAC4FFA8708CC4E /* Metal.framework */; };
1113
B6013812164692F5005FD3AE /* Fuse.iconset in Resources */ = {isa = PBXBuildFile; fileRef = B6013811164692F5005FD3AE /* Fuse.iconset */; };
1214
B61159BF0EEE99D50029FEA3 /* Graphics_Filter.png in Resources */ = {isa = PBXBuildFile; fileRef = B61159BE0EEE99D50029FEA3 /* Graphics_Filter.png */; };
1315
B61159C10EEE99E20029FEA3 /* Machine.png in Resources */ = {isa = PBXBuildFile; fileRef = B61159C00EEE99E20029FEA3 /* Machine.png */; };
@@ -195,7 +197,6 @@
195197
B6A6F0DA0B3D141B000B88E9 /* cocoaui.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A6F0D90B3D141B000B88E9 /* cocoaui.m */; };
196198
B6A6F0EE0B3D5F9E000B88E9 /* CoreAudio.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6A6F0ED0B3D5F9E000B88E9 /* CoreAudio.framework */; };
197199
B6A6F0F30B3D602F000B88E9 /* AudioUnit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6A6F0F20B3D602F000B88E9 /* AudioUnit.framework */; };
198-
B6A6F1060B3D60D0000B88E9 /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F520C8BC038D022E01A804BA /* OpenGL.framework */; };
199200
B6A6F10E0B3D6360000B88E9 /* cocoaerror.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A6F10D0B3D6360000B88E9 /* cocoaerror.m */; };
200201
B6A6F1200B3EA737000B88E9 /* cocoascreenshot.m in Sources */ = {isa = PBXBuildFile; fileRef = B6A6F11E0B3EA737000B88E9 /* cocoascreenshot.m */; };
201202
B6B076B30B59FE9A00D4F95C /* Emulator.m in Sources */ = {isa = PBXBuildFile; fileRef = B6B076B10B59FE9A00D4F95C /* Emulator.m */; };
@@ -288,6 +289,7 @@
288289
B6F66E351E473D68005B270A /* memory_pages.c in Sources */ = {isa = PBXBuildFile; fileRef = B6F66E331E473D68005B270A /* memory_pages.c */; };
289290
B6FA759D0C1D7507007F5A10 /* audiofile.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B6FA759C0C1D7507007F5A10 /* audiofile.framework */; };
290291
B6FA75C60C1D76A5007F5A10 /* audiofile.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = B6FA759C0C1D7507007F5A10 /* audiofile.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
292+
CC2086963F8A491084EEBE3B /* DisplayShaders.metal in Sources */ = {isa = PBXBuildFile; fileRef = 2BDC12F02C4E48F98494D156 /* DisplayShaders.metal */; };
291293
D12E7FF3292596B200185E4D /* AppSandboxFileAccess.m in Sources */ = {isa = PBXBuildFile; fileRef = D12E7FED292596B100185E4D /* AppSandboxFileAccess.m */; };
292294
D12E7FF4292596B200185E4D /* AppSandboxFileAccessOpenSavePanelDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = D12E7FEE292596B100185E4D /* AppSandboxFileAccessOpenSavePanelDelegate.m */; };
293295
D12E7FF5292596B200185E4D /* AppSandboxFileAccessPersist.m in Sources */ = {isa = PBXBuildFile; fileRef = D12E7FF2292596B200185E4D /* AppSandboxFileAccessPersist.m */; };
@@ -445,6 +447,8 @@
445447
2395678A67FCB7B7DAFF9A83 /* FuseQLPreview.appex */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.app-extension"; name = FuseQLPreview.appex; path = ../3rdparty/FuseGenerator/build/Deployment/FuseQLPreview.appex; sourceTree = "<group>"; };
446448
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
447449
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
450+
2BDC12F02C4E48F98494D156 /* DisplayShaders.metal */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.metal; path = DisplayShaders.metal; sourceTree = "<group>"; };
451+
8287F6EDEBAC4FFA8708CC4E /* Metal.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Metal.framework; path = /System/Library/Frameworks/Metal.framework; sourceTree = "<absolute>"; };
448452
9651D9A4AA56B244FA98440C /* FuseQLThumbnail.appex */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = "wrapper.app-extension"; name = FuseQLThumbnail.appex; path = ../3rdparty/FuseGenerator/build/Deployment/FuseQLThumbnail.appex; sourceTree = "<group>"; };
449453
B6013811164692F5005FD3AE /* Fuse.iconset */ = {isa = PBXFileReference; lastKnownFileType = folder.iconset; name = Fuse.iconset; path = ../Fuse.iconset; sourceTree = "<group>"; };
450454
B6018479065A586900B0BE59 /* zxatasp.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; path = zxatasp.c; sourceTree = "<group>"; };
@@ -810,7 +814,7 @@
810814
D1DF6DD726F8077F004A4AB7 /* debug.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = debug.png; sourceTree = "<group>"; };
811815
D1ECC73C2924069800147252 /* ttx2000s.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ttx2000s.h; sourceTree = "<group>"; };
812816
D1ECC73D2924069800147252 /* ttx2000s.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ttx2000s.c; sourceTree = "<group>"; };
813-
F520C8BC038D022E01A804BA /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
817+
EAA54F20E902456BACB24998 /* MetalKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MetalKit.framework; path = /System/Library/Frameworks/MetalKit.framework; sourceTree = "<absolute>"; };
814818
F536B56503A0C275011517A0 /* utils.c */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.c; name = utils.c; path = ../utils.c; sourceTree = SOURCE_ROOT; };
815819
F541FB5E03B0B33401FF8235 /* scaler.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = scaler.h; path = ../ui/scaler/scaler.h; sourceTree = SOURCE_ROOT; };
816820
F54670EB03A3F3E70143EC2C /* settings.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; path = settings.m; sourceTree = SOURCE_ROOT; };
@@ -953,7 +957,8 @@
953957
B6A6F0EE0B3D5F9E000B88E9 /* CoreAudio.framework in Frameworks */,
954958
B6A6F0F30B3D602F000B88E9 /* AudioUnit.framework in Frameworks */,
955959
FE9913050000000000000005 /* AudioToolbox.framework in Frameworks */,
956-
B6A6F1060B3D60D0000B88E9 /* OpenGL.framework in Frameworks */,
960+
B2D0915DE32D43E89E59E3EF /* Metal.framework in Frameworks */,
961+
70561DA4F03E4F3DA5B85553 /* MetalKit.framework in Frameworks */,
957962
B653532B0B902CB20083F942 /* IOKit.framework in Frameworks */,
958963
B6251C3E0C2EB24500BD5543 /* QuartzCore.framework in Frameworks */,
959964
);
@@ -1007,7 +1012,6 @@
10071012
B6A6F0ED0B3D5F9E000B88E9 /* CoreAudio.framework */,
10081013
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
10091014
B653532A0B902CB20083F942 /* IOKit.framework */,
1010-
F520C8BC038D022E01A804BA /* OpenGL.framework */,
10111015
B6251C3D0C2EB24500BD5543 /* QuartzCore.framework */,
10121016
);
10131017
name = "Other Frameworks";
@@ -1084,6 +1088,8 @@
10841088
isa = PBXGroup;
10851089
children = (
10861090
FED24DE22EE108360013DD32 /* Security.framework */,
1091+
8287F6EDEBAC4FFA8708CC4E /* Metal.framework */,
1092+
EAA54F20E902456BACB24998 /* MetalKit.framework */,
10871093
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
10881094
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
10891095
);
@@ -1451,6 +1457,7 @@
14511457
B6CADD560C47AD90004BA954 /* Texture.m */,
14521458
B6CE7FCB0B28FBD600EB65B3 /* DisplayOpenGLView.h */,
14531459
B6CE7FCC0B28FBD600EB65B3 /* DisplayOpenGLView.m */,
1460+
2BDC12F02C4E48F98494D156 /* DisplayShaders.metal */,
14541461
);
14551462
name = Views;
14561463
path = views;
@@ -2145,6 +2152,7 @@
21452152
B6403FD80A7E4B1A00E00B11 /* loader.c in Sources */,
21462153
B6CE7F420B2830A300EB65B3 /* cocoajoystick.c in Sources */,
21472154
B6CE7FCE0B28FBD600EB65B3 /* DisplayOpenGLView.m in Sources */,
2155+
CC2086963F8A491084EEBE3B /* DisplayShaders.metal in Sources */,
21482156
B6E0252C0B38AFE500E23A0F /* keysyms.m in Sources */,
21492157
B6A6F0960B3C108C000B88E9 /* coreaudiosound.c in Sources */,
21502158
B6A6F0DA0B3D141B000B88E9 /* cocoaui.m in Sources */,
@@ -2514,7 +2522,7 @@
25142522
GCC_WARN_SHADOW = YES;
25152523
GCC_WARN_UNINITIALIZED_AUTOS = YES;
25162524
LLVM_LTO = YES;
2517-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2525+
MACOSX_DEPLOYMENT_TARGET = 14.0;
25182526
ONLY_ACTIVE_ARCH = YES;
25192527
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
25202528
RUN_CLANG_STATIC_ANALYZER = YES;
@@ -2542,7 +2550,7 @@
25422550
GCC_WARN_SHADOW = YES;
25432551
GCC_WARN_UNINITIALIZED_AUTOS = YES;
25442552
LLVM_LTO = YES;
2545-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2553+
MACOSX_DEPLOYMENT_TARGET = 14.0;
25462554
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
25472555
RUN_CLANG_STATIC_ANALYZER = YES;
25482556
SDKROOT = macosx;
@@ -2567,7 +2575,7 @@
25672575
GCC_WARN_SHADOW = YES;
25682576
GCC_WARN_UNINITIALIZED_AUTOS = YES;
25692577
LLVM_LTO = YES;
2570-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2578+
MACOSX_DEPLOYMENT_TARGET = 14.0;
25712579
PRECOMPS_INCLUDE_HEADERS_FROM_BUILT_PRODUCTS_DIR = NO;
25722580
RUN_CLANG_STATIC_ANALYZER = YES;
25732581
SDKROOT = macosx;
@@ -2624,7 +2632,7 @@
26242632
GCC_WARN_UNUSED_VARIABLE = YES;
26252633
INFOPLIST_FILE = FuseHelp/Info.plist;
26262634
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
2627-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2635+
MACOSX_DEPLOYMENT_TARGET = 14.0;
26282636
MTL_ENABLE_DEBUG_INFO = YES;
26292637
ONLY_ACTIVE_ARCH = YES;
26302638
PRODUCT_BUNDLE_IDENTIFIER = "net.sourceforge.projects.fuse-for-macosx.FuseHelp";
@@ -2677,7 +2685,7 @@
26772685
GCC_WARN_UNUSED_VARIABLE = YES;
26782686
INFOPLIST_FILE = FuseHelp/Info.plist;
26792687
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
2680-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2688+
MACOSX_DEPLOYMENT_TARGET = 14.0;
26812689
MTL_ENABLE_DEBUG_INFO = NO;
26822690
PRODUCT_BUNDLE_IDENTIFIER = "net.sourceforge.projects.fuse-for-macosx.FuseHelp";
26832691
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -2729,7 +2737,7 @@
27292737
GCC_WARN_UNUSED_VARIABLE = YES;
27302738
INFOPLIST_FILE = FuseHelp/Info.plist;
27312739
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Bundles";
2732-
MACOSX_DEPLOYMENT_TARGET = 10.13;
2740+
MACOSX_DEPLOYMENT_TARGET = 14.0;
27332741
MTL_ENABLE_DEBUG_INFO = NO;
27342742
PRODUCT_BUNDLE_IDENTIFIER = "net.sourceforge.projects.fuse-for-macosx.FuseHelp";
27352743
PRODUCT_NAME = "$(TARGET_NAME)";

fusepb/views/DisplayOpenGLView.h

Lines changed: 18 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,9 @@
2222
*/
2323

2424
#import <Cocoa/Cocoa.h>
25+
#import <MetalKit/MetalKit.h>
2526
#import <QuartzCore/QuartzCore.h>
2627

27-
#include <OpenGL/gl.h>
28-
#include <OpenGL/glext.h>
29-
#include <OpenGL/glu.h>
30-
3128
#include <libspectrum.h>
3229

3330
#include "input.h"
@@ -41,11 +38,13 @@
4138
@class Emulator;
4239
@class Texture;
4340

44-
@interface DisplayOpenGLView : NSOpenGLView
41+
@interface DisplayOpenGLView : MTKView <MTKViewDelegate>
4542
{
46-
/* Two backing textures */
43+
/* Two CPU-side screen buffers; the dirty machinery in
44+
-uploadDirtyToTexture keeps both consistent across frames. */
4745
Cocoa_Texture screenTex[MAX_SCREEN_BUFFERS];
48-
GLuint screenTexId[MAX_SCREEN_BUFFERS];
46+
/* Matching MTLTextures uploaded to the GPU. */
47+
id<MTLTexture> screenTexMTL[MAX_SCREEN_BUFFERS];
4948
int currentScreenTex;
5049

5150
Texture *redCassette;
@@ -60,7 +59,6 @@
6059
ui_statusbar_state disk_state;
6160
ui_statusbar_state mdr_state;
6261
ui_statusbar_state tape_state;
63-
BOOL statusbar_updated;
6462

6563
NSLock *view_lock;
6664

@@ -70,18 +68,25 @@
7068
Emulator *proxy_emulator;
7169
NSConnection *kitConnection;
7270

73-
CVDisplayLinkRef displayLink;
74-
CGDirectDisplayID mainViewDisplayID;
75-
BOOL displayLinkRunning;
76-
BOOL isResizing;
71+
/* Metal rendering state. */
72+
id<MTLDevice> mtlDevice;
73+
id<MTLCommandQueue> commandQueue;
74+
id<MTLRenderPipelineState> pipelineState;
75+
/* Reusable CPU-side staging buffer for the BGR5A1 -> BGRA8 conversion
76+
done at upload time. Sized to a full screen on first use. */
77+
uint32_t *conversionBuffer;
78+
size_t conversionBufferPixels;
79+
80+
/* Frame pacing is driven by MTKView's built-in CADisplayLink, which
81+
calls -drawInMTKView: each vsync. -displayLinkStart / -displayLinkStop
82+
toggle self.paused (always on the main thread). */
7783
}
7884
+(DisplayOpenGLView *) instance;
7985

8086
-(IBAction) zoom:(id)sender;
8187

8288
-(void) createTexture:(Cocoa_Texture*)newScreen;
8389
-(void) destroyTexture;
84-
-(void) blitIcon:(Texture*)iconTexture;
8590

8691
-(void) setServer:(id)anObject;
8792
-(id) initWithFrame:(NSRect)frameRect;
@@ -96,8 +101,6 @@
96101
xOrigin:(int) x
97102
yOrigin:(int) y;
98103

99-
-(void) setNeedsDisplayYes;
100-
101104
-(void) openFile:(const char *)filename;
102105
-(void) snapOpen:(const char *)filename;
103106
-(void) tapeOpen:(const char *)filename;
@@ -226,21 +229,14 @@
226229

227230
-(BOOL) isFlipped;
228231

229-
-(void) copyGLtoQuartz;
230-
-(void) windowWillMiniaturize:(NSNotification *)aNotification;
231-
-(void) windowDidMiniaturize:(NSNotification *)notification;
232232
-(BOOL) windowShouldClose:(id)window;
233233
-(void) windowDidResignKey:(NSNotification *)notification;
234234

235-
-(CVReturn) displayFrame:(const CVTimeStamp *)timeStamp;
236235
-(void) windowChangedScreen:(NSNotification*)inNotification;
237-
-(void) windowDidDeminiaturize:(NSNotification *)inNotification;
238236

239237
-(void) displayLinkStop;
240238
-(void) displayLinkStart;
241239

242-
-(void) doReshape;
243-
244240
@end
245241

246242
/* Helper category used by every utility controller in §Affected Windows

0 commit comments

Comments
 (0)