From 1adb6c6a02a3205349e5bb11fabe2e82fd750fe7 Mon Sep 17 00:00:00 2001 From: Qianqian Fang Date: Wed, 20 Sep 2023 13:13:09 -0400 Subject: [PATCH] disable OpenGL functionalities when building 64bit mac, fix #184 --- mcxstudio/mcxgui.pas | 45 +++++++++++++++++++++++++++++++++++------ mcxstudio/mcxstudio.lpr | 10 +++++++-- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/mcxstudio/mcxgui.pas b/mcxstudio/mcxgui.pas index bc8aea1c..820263c6 100755 --- a/mcxstudio/mcxgui.pas +++ b/mcxstudio/mcxgui.pas @@ -9,6 +9,12 @@ ===============================================================================} {$mode objfpc}{$H+} +{$IFDEF Darwin} + {$IFDEF LCLcocoa} + {$DEFINE NO_GLSCENE} + {$ENDIF} +{$ENDIF} + interface uses @@ -17,8 +23,9 @@ interface LResources, Forms, Controls, Graphics, Dialogs, StdCtrls, Menus, ComCtrls, ExtCtrls, Spin, EditBtn, Buttons, ActnList, lcltype, AsyncProcess, Grids, CheckLst, LazHelpHTML, ValEdit, inifiles, fpjson, jsonparser,jsonscanner {$IFDEF USE_SYNAPSE}, runssh{$ENDIF}, - strutils, RegExpr, OpenGLTokens, mcxabout, mcxshape, mcxnewsession, mcxsource, - mcxrender, mcxview, mcxconfig, mcxstoprun, Types {$IFDEF WINDOWS}, registry, ShlObj{$ENDIF}; + strutils, RegExpr, mcxabout, mcxnewsession, mcxsource + {$IFNDEF NO_GLSCENE}, OpenGLTokens, mcxshape, mcxrender, mcxview{$ENDIF}, mcxconfig, + mcxstoprun, Types {$IFDEF WINDOWS}, registry, ShlObj{$ENDIF}; type @@ -476,7 +483,9 @@ TfmMCX = class(TForm) var fmMCX: TfmMCX; + {$IFNDEF NO_GLSCENE} fmDomain: TfmDomain; + {$ENDIF} fmConfig: TfmConfig; fmStop: TfmStop; ProfileChanged: Boolean; @@ -1197,7 +1206,9 @@ procedure TfmMCX.mcxdoOpenExecute(Sender: TObject); ret:TModalResult; TaskFile: string; fext: string; + {$IFNDEF NO_GLSCENE} fmViewer: TfmViewer; + {$ENDIF} begin ret:=mrNo; if(OpenProject.Execute) then begin @@ -1206,6 +1217,7 @@ procedure TfmMCX.mcxdoOpenExecute(Sender: TObject); if(fext = '.json') then begin // adding new session LoadSessionFromJSON(TaskFile); end else if (AnsiIndexStr(fext, ['.tx3','.nii','.jnii']) >= 0) then begin + {$IFNDEF NO_GLSCENE} try fmViewer:=TfmViewer.Create(self); Case AnsiIndexStr(fext, ['.tx3','.nii','.jnii']) of @@ -1222,6 +1234,7 @@ procedure TfmMCX.mcxdoOpenExecute(Sender: TObject); on E: Exception do ShowMessage('OpenGL Error: '+E.ClassName+#13#10 + E.Message); end; + {$ENDIF} end else begin if(mcxdoSave.Enabled) then begin ret:=MessageDlg('Confirmation', 'The current session has not been saved, do you want to save it?', @@ -1306,7 +1319,9 @@ procedure TfmMCX.mcxdoPlotVolExecute(Sender: TObject); ftype: TAction; nx : integer = 0; ny,nz,nt: integer; + {$IFNDEF NO_GLSCENE} fmViewer: TfmViewer; + {$ENDIF} cmd: TStringList; singletype: LongWord; dref: string; @@ -1321,10 +1336,14 @@ procedure TfmMCX.mcxdoPlotVolExecute(Sender: TObject); if (grProgram.ItemIndex <> 1) then begin outputfile:=CreateWorkFolder(edSession.Text, false)+DirectorySeparator+edSession.Text+ftype.Hint; +{$IFNDEF NO_GLSCENE} singletype:=GL_RGBA32F; +{$ENDIF} end else begin outputfile:=sgConfig.Cells[2,14]+DirectorySeparator+edSession.Text+ftype.Hint; +{$IFNDEF NO_GLSCENE} singletype:=GL_DOUBLE_EXT; +{$ENDIF} end; if(not FileExists(outputfile)) then begin @@ -1371,6 +1390,7 @@ procedure TfmMCX.mcxdoPlotVolExecute(Sender: TObject); AddMultiLineLog(cmd.DelimitedText,pMCX); cmd.Free; + {$IFNDEF NO_GLSCENE} if(miUseMatlab.Checked) then exit; try fmViewer:=TfmViewer.Create(self); @@ -1388,6 +1408,7 @@ procedure TfmMCX.mcxdoPlotVolExecute(Sender: TObject); on E: Exception do ShowMessage('OpenGL Error: '+E.ClassName+#13#10 + E.Message); end; + {$ENDIF} end; procedure TfmMCX.RunSSHCmd(Sender: TObject; cmd: string; updategpu:boolean=false; doprogress: boolean=false); @@ -1727,11 +1748,12 @@ procedure TfmMCX.FormCreate(Sender: TObject); lvJobs.ViewStyle:=vsReport; {$ENDIF} DockMaster.MakeDockSite(Self,[akBottom,akLeft,akRight],admrpChild); - + {$IFNDEF NO_GLSCENE} fmDomain:=TfmDomain.Create(Self); + fmDomain.FormStyle:=fsStayOnTop; + {$ENDIF} fmConfig:=TfmConfig.Create(Self); fmStop:=TfmStop.Create(Self); - fmDomain.FormStyle:=fsStayOnTop; fmStop.FormStyle:=fsStayOnTop; CurrentSession:=nil; @@ -1794,7 +1816,9 @@ procedure TfmMCX.FormDestroy(Sender: TObject); PassList.Free; BCItemProp.Free; + {$IFNDEF NO_GLSCENE} fmDomain.Free; + {$ENDIF} fmConfig.Free; fmStop.Free; @@ -1986,12 +2010,16 @@ procedure TfmMCX.MenuItem22Click(Sender: TObject); end; procedure TfmMCX.MenuItem76Click(Sender: TObject); +{$IFNDEF NO_GLSCENE} var - fmViewer: TfmViewer; + fmViewer: TfmViewer; +{$ENDIF} begin + {$IFNDEF NO_GLSCENE} fmViewer:=TfmViewer.Create(self); fmViewer.BringToFront; fmViewer.Show; + {$ENDIF} end; procedure TfmMCX.miExportJSONClick(Sender: TObject); @@ -2235,7 +2263,9 @@ procedure TfmMCX.shapeAddCylinderExecute(Sender: TObject); procedure TfmMCX.AddShapesWindow(shapeid: string; defaultval: TStringList; node: TTreeNode); var + {$IFNDEF NO_GLSCENE} fmshape:TfmShapeEditor; + {$ENDIF} ss: string; jdata: TJSONData; begin @@ -2253,6 +2283,7 @@ procedure TfmMCX.AddShapesWindow(shapeid: string; defaultval: TStringList; node: exit; end; + {$IFNDEF NO_GLSCENE} fmshape:=TfmShapeEditor.Create(Application, defaultval); fmshape.Caption:='Add Shape: '+shapeid; if(Pos('Layer',shapeid)=2) or (Pos('Slab',shapeid)=2) then @@ -2268,6 +2299,7 @@ procedure TfmMCX.AddShapesWindow(shapeid: string; defaultval: TStringList; node: ShowJSONData(node,jdata,true); end; fmshape.Free; + {$ENDIF} end; procedure TfmMCX.AddShapes(shapeid: string; defaultval: string); @@ -2473,7 +2505,7 @@ procedure TfmMCX.shapePreviewExecute(Sender: TObject); cmd.Free; if(miUseMatlab.Checked) then exit; - + {$IFNDEF NO_GLSCENE} try fmDomain.mmShapeJSON.Lines.Text:=shapejson.FormatJSON; freeandnil(shapejson); @@ -2482,6 +2514,7 @@ procedure TfmMCX.shapePreviewExecute(Sender: TObject); on E: Exception do ShowMessage('OpenGL Error: '+E.ClassName+#13#10 + E.Message); end; + {$ENDIF} end; diff --git a/mcxstudio/mcxstudio.lpr b/mcxstudio/mcxstudio.lpr index db384f86..eaed094e 100644 --- a/mcxstudio/mcxstudio.lpr +++ b/mcxstudio/mcxstudio.lpr @@ -3,13 +3,19 @@ //{$mode objfpc}{$H+} {$mode delphi} +{$IFDEF Darwin} + {$IFDEF LCLcocoa} + {$DEFINE NO_GLSCENE} + {$ENDIF} +{$ENDIF} + uses {$IFDEF UNIX}{$IFDEF UseCThreads} cthreads, {$ENDIF}{$ENDIF} Interfaces, // this includes the LCL widgetset - Forms, mcxgui, lazcontrols, anchordockpkg, mcxabout, - mcxshape, mcxnewsession, mcxsource, mcxview, mcxloadfile, mcxconfig, + Forms, mcxgui, lazcontrols, anchordockpkg, mcxabout + {$IFNDEF NO_GLSCENE}, mcxshape, mcxview{$ENDIF}, mcxnewsession, mcxsource, mcxloadfile, mcxconfig, mcxstoprun, runexec{$IFDEF USE_SYNAPSE}, runssh{$ENDIF} {$IFDEF WINDOWS}, sendkeys{$ENDIF}; {$R *.res}