git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@34786 e17a0e51-4ae3-4d35-97c3-1a29b211df97

This commit is contained in:
SND\weimingzhi_cp 2009-11-02 06:59:44 +00:00
parent 69840b25a2
commit 303526a061
23 changed files with 2074 additions and 4 deletions

View File

@ -1,3 +1,10 @@
November 2, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* macosx/plugins/DFXVideo: Added project file and necessary codes for
building existing dfxvideo sources for Mac OS X. (NOT bug-free yet!!!)
* dfxvideo/gpu.c: Made necessary changes for Mac OS X build.
* dfxvideo/externals.h: Likewise.
November 1, 2009 Wei Mingzhi <weimingzhi@gmail.com>
* macosx/plugins/PeopsSpu109: Removed.

View File

@ -0,0 +1,13 @@
{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica-Bold;\f1\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx565\tx1133\tx1700\tx2266\tx2833\tx3401\tx3967\tx4535\tx5102\tx5669\tx6235\tx6802\ql\qnatural
\f0\b\fs24 \cf0 Created By
\f1\b0 \
Pete Bernert and the P.E.Op.S. team\
\
\f0\b Macintosh Port By
\f1\b0 \
Gil Pedersen}

View File

@ -0,0 +1,21 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
ACTIONS = {cancel = id; hackToggle = id; ok = id; reset = id; };
CLASS = NetSfPeopsSoftGPUPluginConfigController;
LANGUAGE = ObjC;
OUTLETS = {
autoFullScreen = NSControl;
ditherMode = NSPopUpButton;
fpsCounter = NSControl;
frameSkipping = NSControl;
hackEnable = NSControl;
hacksView = NSView;
vSync = NSControl;
};
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>19 23 561 249 0 0 1024 746 </string>
<key>IBFramework Version</key>
<string>446.1</string>
<key>IBOpenObjects</key>
<array>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>8P2137</string>
</dict>
</plist>

View File

@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>PeopsSoftGL</string>
<key>CFBundleIdentifier</key>
<string>net.sf.peops.SoftGpuGLPlugin</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>PsxP</string>
<key>CFBundleSignature</key>
<string>PSGl</string>
<key>CFBundleVersion</key>
<string>1.16</string>
</dict>
</plist>

View File

@ -0,0 +1,22 @@
{
IBClasses = (
{CLASS = FirstResponder; LANGUAGE = ObjC; SUPERCLASS = NSObject; },
{
CLASS = NetSfPeopsSoftGPUPluginGLView;
LANGUAGE = ObjC;
SUPERCLASS = NSOpenGLView;
},
{
CLASS = NetSfPeopsSoftGPUPluginWindow;
LANGUAGE = ObjC;
SUPERCLASS = NSWindow;
},
{
CLASS = NetSfPeopsSoftGPUPluginWindowController;
LANGUAGE = ObjC;
OUTLETS = {glView = NSOpenGLView; };
SUPERCLASS = NSWindowController;
}
);
IBVersion = 1;
}

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>IBDocumentLocation</key>
<string>99 26 409 240 0 0 1024 746 </string>
<key>IBFramework Version</key>
<string>364.0</string>
<key>IBOpenObjects</key>
<array>
<integer>5</integer>
</array>
<key>IBSystem Version</key>
<string>7S215</string>
</dict>
</plist>

View File

@ -0,0 +1,414 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 42;
objects = {
/* Begin PBXBuildFile section */
2B038C07069183300082466B /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2B038C05069183300082466B /* InfoPlist.strings */; };
2B038D2306918AA80082466B /* Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2B038D2206918AA80082466B /* Info.plist */; };
2B143C79078A0C6700AF745A /* PluginWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B957EAE0635DFE400543905 /* PluginWindow.h */; };
2B57868206BE7B3700BBA288 /* ExtendedKeys.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B57868106BE7B3700BBA288 /* ExtendedKeys.h */; };
2B957EB10635DFE400543905 /* PluginWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B957EAF0635DFE400543905 /* PluginWindow.m */; };
2B959DC106342C22000F2A2D /* drawgl.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B3E5D64062B2CC1001D796E /* drawgl.m */; };
2B959DC406342C23000F2A2D /* PluginGLView.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BAF4FC90632967A00DB9A16 /* PluginGLView.h */; };
2B959DCD06342C24000F2A2D /* PluginGLView.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BAF4FCA0632967A00DB9A16 /* PluginGLView.m */; };
2B959DD006342C25000F2A2D /* PluginWindowController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2B3E5DF0062B36FB001D796E /* PluginWindowController.h */; };
2B959DD506342C25000F2A2D /* PluginWindowController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2B3E5DF1062B36FB001D796E /* PluginWindowController.m */; };
2B959DE106342C31000F2A2D /* NetSfPeopsSoftGPUInterface.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2B3E5DED062B36A0001D796E /* NetSfPeopsSoftGPUInterface.nib */; };
2B959E4406342D32000F2A2D /* OpenGL.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B959E4306342D32000F2A2D /* OpenGL.framework */; };
2BB260A80777462E00F6854C /* PluginConfigController.h in Headers */ = {isa = PBXBuildFile; fileRef = 2BB260A60777462E00F6854C /* PluginConfigController.h */; };
2BB260A90777462E00F6854C /* PluginConfigController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2BB260A70777462E00F6854C /* PluginConfigController.m */; };
2BD2E769077AF53E00657C69 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2BD2E767077AF53E00657C69 /* Credits.rtf */; };
2BD2E829077AFC2C00657C69 /* NetSfPeopsSoftGPUConfig.nib in Resources */ = {isa = PBXBuildFile; fileRef = 2BD2E828077AFC2C00657C69 /* NetSfPeopsSoftGPUConfig.nib */; };
2BD7C777076E1FAB000F05ED /* GLUT.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2B51949E06B3D2D200744730 /* GLUT.framework */; };
71E9EC06109F24E700E98D1D /* fps.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBF4109F24E600E98D1D /* fps.c */; };
71E9EC08109F24E700E98D1D /* gpu.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBF6109F24E600E98D1D /* gpu.c */; };
71E9EC0B109F24E700E98D1D /* key.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBF9109F24E600E98D1D /* key.c */; };
71E9EC0D109F24E700E98D1D /* menu.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBFB109F24E600E98D1D /* menu.c */; };
71E9EC0F109F24E700E98D1D /* prim.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBFD109F24E700E98D1D /* prim.c */; };
71E9EC11109F24E700E98D1D /* soft.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EBFF109F24E700E98D1D /* soft.c */; };
71E9EC14109F24E700E98D1D /* zn.c in Sources */ = {isa = PBXBuildFile; fileRef = 71E9EC02109F24E700E98D1D /* zn.c */; };
/* End PBXBuildFile section */
/* Begin PBXFileReference section */
2B038C06069183300082466B /* English */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
2B038D2206918AA80082466B /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = Info.plist; sourceTree = "<group>"; };
2B371FBB0773859200B1DC0B /* English */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; name = English; path = English.lproj/NetSfPeopsSoftGPUConfig.nib; sourceTree = "<group>"; };
2B3E5D64062B2CC1001D796E /* drawgl.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = drawgl.m; path = macsrc/drawgl.m; sourceTree = SOURCE_ROOT; };
2B3E5DED062B36A0001D796E /* NetSfPeopsSoftGPUInterface.nib */ = {isa = PBXFileReference; lastKnownFileType = wrapper.nib; path = NetSfPeopsSoftGPUInterface.nib; sourceTree = "<group>"; };
2B3E5DF0062B36FB001D796E /* PluginWindowController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PluginWindowController.h; path = macsrc/PluginWindowController.h; sourceTree = SOURCE_ROOT; };
2B3E5DF1062B36FB001D796E /* PluginWindowController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PluginWindowController.m; path = macsrc/PluginWindowController.m; sourceTree = SOURCE_ROOT; };
2B51949E06B3D2D200744730 /* GLUT.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GLUT.framework; path = /System/Library/Frameworks/GLUT.framework; sourceTree = "<absolute>"; };
2B57868106BE7B3700BBA288 /* ExtendedKeys.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ExtendedKeys.h; path = macsrc/ExtendedKeys.h; sourceTree = SOURCE_ROOT; };
2B957EAE0635DFE400543905 /* PluginWindow.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PluginWindow.h; path = macsrc/PluginWindow.h; sourceTree = SOURCE_ROOT; };
2B957EAF0635DFE400543905 /* PluginWindow.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PluginWindow.m; path = macsrc/PluginWindow.m; sourceTree = SOURCE_ROOT; };
2B959E4306342D32000F2A2D /* OpenGL.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = OpenGL.framework; path = /System/Library/Frameworks/OpenGL.framework; sourceTree = "<absolute>"; };
2BAF4FC90632967A00DB9A16 /* PluginGLView.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PluginGLView.h; path = macsrc/PluginGLView.h; sourceTree = SOURCE_ROOT; };
2BAF4FCA0632967A00DB9A16 /* PluginGLView.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PluginGLView.m; path = macsrc/PluginGLView.m; sourceTree = SOURCE_ROOT; };
2BAF50930632BB1A00DB9A16 /* PeopsSoftGL.psxplugin */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PeopsSoftGL.psxplugin; sourceTree = BUILT_PRODUCTS_DIR; };
2BB260A60777462E00F6854C /* PluginConfigController.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = PluginConfigController.h; path = macsrc/PluginConfigController.h; sourceTree = SOURCE_ROOT; };
2BB260A70777462E00F6854C /* PluginConfigController.m */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.objc; name = PluginConfigController.m; path = macsrc/PluginConfigController.m; sourceTree = SOURCE_ROOT; };
2BD2E768077AF53E00657C69 /* English */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = English; path = English.lproj/Credits.rtf; sourceTree = "<group>"; };
71E9EBF1109F24E600E98D1D /* cfg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = cfg.h; path = ../../../plugins/dfxvideo/cfg.h; sourceTree = SOURCE_ROOT; };
71E9EBF2109F24E600E98D1D /* draw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = draw.h; path = ../../../plugins/dfxvideo/draw.h; sourceTree = SOURCE_ROOT; };
71E9EBF3109F24E600E98D1D /* externals.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = externals.h; path = ../../../plugins/dfxvideo/externals.h; sourceTree = SOURCE_ROOT; };
71E9EBF4109F24E600E98D1D /* fps.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = fps.c; path = ../../../plugins/dfxvideo/fps.c; sourceTree = SOURCE_ROOT; };
71E9EBF5109F24E600E98D1D /* fps.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = fps.h; path = ../../../plugins/dfxvideo/fps.h; sourceTree = SOURCE_ROOT; };
71E9EBF6109F24E600E98D1D /* gpu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = gpu.c; path = ../../../plugins/dfxvideo/gpu.c; sourceTree = SOURCE_ROOT; };
71E9EBF7109F24E600E98D1D /* gpu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = gpu.h; path = ../../../plugins/dfxvideo/gpu.h; sourceTree = SOURCE_ROOT; };
71E9EBF8109F24E600E98D1D /* interp.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = interp.h; path = ../../../plugins/dfxvideo/interp.h; sourceTree = SOURCE_ROOT; };
71E9EBF9109F24E600E98D1D /* key.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = key.c; path = ../../../plugins/dfxvideo/key.c; sourceTree = SOURCE_ROOT; };
71E9EBFA109F24E600E98D1D /* key.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = key.h; path = ../../../plugins/dfxvideo/key.h; sourceTree = SOURCE_ROOT; };
71E9EBFB109F24E600E98D1D /* menu.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = menu.c; path = ../../../plugins/dfxvideo/menu.c; sourceTree = SOURCE_ROOT; };
71E9EBFC109F24E700E98D1D /* menu.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = menu.h; path = ../../../plugins/dfxvideo/menu.h; sourceTree = SOURCE_ROOT; };
71E9EBFD109F24E700E98D1D /* prim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = prim.c; path = ../../../plugins/dfxvideo/prim.c; sourceTree = SOURCE_ROOT; };
71E9EBFE109F24E700E98D1D /* prim.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = prim.h; path = ../../../plugins/dfxvideo/prim.h; sourceTree = SOURCE_ROOT; };
71E9EBFF109F24E700E98D1D /* soft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = soft.c; path = ../../../plugins/dfxvideo/soft.c; sourceTree = SOURCE_ROOT; };
71E9EC00109F24E700E98D1D /* soft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = soft.h; path = ../../../plugins/dfxvideo/soft.h; sourceTree = SOURCE_ROOT; };
71E9EC01109F24E700E98D1D /* swap.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = swap.h; path = ../../../plugins/dfxvideo/swap.h; sourceTree = SOURCE_ROOT; };
71E9EC02109F24E700E98D1D /* zn.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = zn.c; path = ../../../plugins/dfxvideo/zn.c; sourceTree = SOURCE_ROOT; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
2BAF50910632BB1A00DB9A16 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
2B959E4406342D32000F2A2D /* OpenGL.framework in Frameworks */,
2BD7C777076E1FAB000F05ED /* GLUT.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
2B3E59FF062AAC1A001D796E = {
isa = PBXGroup;
children = (
71E9EBF0109F24B600E98D1D /* src */,
2BD2E2F40779F50B00657C69 /* macsrc */,
2BD2E818077AFB9F00657C69 /* English.lproj */,
2B3E5DED062B36A0001D796E /* NetSfPeopsSoftGPUInterface.nib */,
2B038D2206918AA80082466B /* Info.plist */,
2B3E5A0B062AAC34001D796E /* Frameworks */,
2B3E5A46062AACF3001D796E /* Products */,
);
sourceTree = "<group>";
};
2B3E5A0B062AAC34001D796E /* Frameworks */ = {
isa = PBXGroup;
children = (
2B959E4306342D32000F2A2D /* OpenGL.framework */,
2B51949E06B3D2D200744730 /* GLUT.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
2B3E5A46062AACF3001D796E /* Products */ = {
isa = PBXGroup;
children = (
2BAF50930632BB1A00DB9A16 /* PeopsSoftGL.psxplugin */,
);
name = Products;
sourceTree = "<group>";
};
2BD2E2F40779F50B00657C69 /* macsrc */ = {
isa = PBXGroup;
children = (
2BB260A60777462E00F6854C /* PluginConfigController.h */,
2BB260A70777462E00F6854C /* PluginConfigController.m */,
2B3E5DF0062B36FB001D796E /* PluginWindowController.h */,
2B3E5DF1062B36FB001D796E /* PluginWindowController.m */,
2B957EAE0635DFE400543905 /* PluginWindow.h */,
2B957EAF0635DFE400543905 /* PluginWindow.m */,
2BAF4FC90632967A00DB9A16 /* PluginGLView.h */,
2BAF4FCA0632967A00DB9A16 /* PluginGLView.m */,
2B3E5D64062B2CC1001D796E /* drawgl.m */,
2B57868106BE7B3700BBA288 /* ExtendedKeys.h */,
);
name = macsrc;
sourceTree = "<group>";
};
2BD2E818077AFB9F00657C69 /* English.lproj */ = {
isa = PBXGroup;
children = (
2BD2E828077AFC2C00657C69 /* NetSfPeopsSoftGPUConfig.nib */,
2BD2E767077AF53E00657C69 /* Credits.rtf */,
2B038C05069183300082466B /* InfoPlist.strings */,
);
name = English.lproj;
sourceTree = "<group>";
};
71E9EBF0109F24B600E98D1D /* src */ = {
isa = PBXGroup;
children = (
71E9EBF1109F24E600E98D1D /* cfg.h */,
71E9EBF2109F24E600E98D1D /* draw.h */,
71E9EBF3109F24E600E98D1D /* externals.h */,
71E9EBF4109F24E600E98D1D /* fps.c */,
71E9EBF5109F24E600E98D1D /* fps.h */,
71E9EBF6109F24E600E98D1D /* gpu.c */,
71E9EBF7109F24E600E98D1D /* gpu.h */,
71E9EBF8109F24E600E98D1D /* interp.h */,
71E9EBF9109F24E600E98D1D /* key.c */,
71E9EBFA109F24E600E98D1D /* key.h */,
71E9EBFB109F24E600E98D1D /* menu.c */,
71E9EBFC109F24E700E98D1D /* menu.h */,
71E9EBFD109F24E700E98D1D /* prim.c */,
71E9EBFE109F24E700E98D1D /* prim.h */,
71E9EBFF109F24E700E98D1D /* soft.c */,
71E9EC00109F24E700E98D1D /* soft.h */,
71E9EC01109F24E700E98D1D /* swap.h */,
71E9EC02109F24E700E98D1D /* zn.c */,
);
name = src;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
2BAF508E0632BB1A00DB9A16 /* Headers */ = {
isa = PBXHeadersBuildPhase;
buildActionMask = 2147483647;
files = (
2B959DC406342C23000F2A2D /* PluginGLView.h in Headers */,
2B959DD006342C25000F2A2D /* PluginWindowController.h in Headers */,
2B57868206BE7B3700BBA288 /* ExtendedKeys.h in Headers */,
2BB260A80777462E00F6854C /* PluginConfigController.h in Headers */,
2B143C79078A0C6700AF745A /* PluginWindow.h in Headers */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXHeadersBuildPhase section */
/* Begin PBXNativeTarget section */
2BAF50920632BB1A00DB9A16 /* gpuPeopsSoftGL */ = {
isa = PBXNativeTarget;
buildConfigurationList = 7170842C0FDFD328004F3EB4 /* Build configuration list for PBXNativeTarget "gpuPeopsSoftGL" */;
buildPhases = (
2BAF508E0632BB1A00DB9A16 /* Headers */,
2BAF508F0632BB1A00DB9A16 /* Resources */,
2BAF50900632BB1A00DB9A16 /* Sources */,
2BAF50910632BB1A00DB9A16 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = gpuPeopsSoftGL;
productName = gpuPeopsSoftGL;
productReference = 2BAF50930632BB1A00DB9A16 /* PeopsSoftGL.psxplugin */;
productType = "com.apple.product-type.bundle";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
2B3E5A03062AAC1A001D796E /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 717084310FDFD328004F3EB4 /* Build configuration list for PBXProject "PeopsSoftGPU" */;
hasScannedForEncodings = 1;
mainGroup = 2B3E59FF062AAC1A001D796E;
productRefGroup = 2B3E5A46062AACF3001D796E /* Products */;
projectDirPath = "";
targets = (
2BAF50920632BB1A00DB9A16 /* gpuPeopsSoftGL */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
2BAF508F0632BB1A00DB9A16 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2B959DE106342C31000F2A2D /* NetSfPeopsSoftGPUInterface.nib in Resources */,
2B038C07069183300082466B /* InfoPlist.strings in Resources */,
2B038D2306918AA80082466B /* Info.plist in Resources */,
2BD2E829077AFC2C00657C69 /* NetSfPeopsSoftGPUConfig.nib in Resources */,
2BD2E769077AF53E00657C69 /* Credits.rtf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
2BAF50900632BB1A00DB9A16 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
2B959DC106342C22000F2A2D /* drawgl.m in Sources */,
2B959DCD06342C24000F2A2D /* PluginGLView.m in Sources */,
2B959DD506342C25000F2A2D /* PluginWindowController.m in Sources */,
2B957EB10635DFE400543905 /* PluginWindow.m in Sources */,
2BB260A90777462E00F6854C /* PluginConfigController.m in Sources */,
71E9EC06109F24E700E98D1D /* fps.c in Sources */,
71E9EC08109F24E700E98D1D /* gpu.c in Sources */,
71E9EC0B109F24E700E98D1D /* key.c in Sources */,
71E9EC0D109F24E700E98D1D /* menu.c in Sources */,
71E9EC0F109F24E700E98D1D /* prim.c in Sources */,
71E9EC11109F24E700E98D1D /* soft.c in Sources */,
71E9EC14109F24E700E98D1D /* zn.c in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
2B038C05069183300082466B /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
2B038C06069183300082466B /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
2BD2E767077AF53E00657C69 /* Credits.rtf */ = {
isa = PBXVariantGroup;
children = (
2BD2E768077AF53E00657C69 /* English */,
);
name = Credits.rtf;
sourceTree = "<group>";
};
2BD2E828077AFC2C00657C69 /* NetSfPeopsSoftGPUConfig.nib */ = {
isa = PBXVariantGroup;
children = (
2B371FBB0773859200B1DC0B /* English */,
);
name = NetSfPeopsSoftGPUConfig.nib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
7170842D0FDFD328004F3EB4 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = NO;
DEBUGGING_SYMBOLS = YES;
GCC_DYNAMIC_NO_PIC = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = YES;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = 1;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
_MACGL,
_DARWIN,
);
GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = NO;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Playstation Emulator Plugins";
LIBRARY_STYLE = BUNDLE;
OPTIMIZATION_CFLAGS = "-finline-functions -finline-limit=1600 -fomit-frame-pointer -fno-exceptions -funroll-loops -falign-loops=16 -ffast-math";
OTHER_CFLAGS = "-finline-functions";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
AppKit,
);
OTHER_REZFLAGS = "";
PRODUCT_NAME = PeopsSoftGL;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
WRAPPER_EXTENSION = psxplugin;
};
name = Development;
};
7170842E0FDFD328004F3EB4 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
COPY_PHASE_STRIP = YES;
DEBUGGING_SYMBOLS = NO;
GCC_DYNAMIC_NO_PIC = NO;
GCC_ENABLE_FIX_AND_CONTINUE = NO;
GCC_GENERATE_DEBUGGING_SYMBOLS = NO;
GCC_MODEL_TUNING = "";
GCC_OPTIMIZATION_LEVEL = 3;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = "";
GCC_PREPROCESSOR_DEFINITIONS = (
_MACGL,
_DARWIN,
);
GCC_WARN_FOUR_CHARACTER_CONSTANTS = NO;
GCC_WARN_UNKNOWN_PRAGMAS = NO;
INFOPLIST_FILE = Info.plist;
INSTALL_PATH = "$(USER_LIBRARY_DIR)/Playstation Emulator Plugins";
LIBRARY_STYLE = BUNDLE;
OPTIMIZATION_CFLAGS = "-finline-functions -finline-limit=1600 -fomit-frame-pointer -fno-exceptions -funroll-loops -falign-loops=16 -ffast-math";
OTHER_LDFLAGS = (
"-framework",
Foundation,
"-framework",
AppKit,
);
OTHER_REZFLAGS = "";
PRODUCT_NAME = PeopsSoftGL;
SECTORDER_FLAGS = "";
WARNING_CFLAGS = (
"-Wmost",
"-Wno-four-char-constants",
"-Wno-unknown-pragmas",
);
WRAPPER_EXTENSION = psxplugin;
ZERO_LINK = NO;
};
name = Deployment;
};
717084320FDFD328004F3EB4 /* Development */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_MODEL_TUNING = "";
HEADER_SEARCH_PATHS = (
../../../plugins/dfxvideo,
../../../libpcsxcore,
);
};
name = Development;
};
717084330FDFD328004F3EB4 /* Deployment */ = {
isa = XCBuildConfiguration;
buildSettings = {
GCC_MODEL_TUNING = "";
HEADER_SEARCH_PATHS = (
../../../plugins/dfxvideo,
../../../libpcsxcore,
);
};
name = Deployment;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
7170842C0FDFD328004F3EB4 /* Build configuration list for PBXNativeTarget "gpuPeopsSoftGL" */ = {
isa = XCConfigurationList;
buildConfigurations = (
7170842D0FDFD328004F3EB4 /* Development */,
7170842E0FDFD328004F3EB4 /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
717084310FDFD328004F3EB4 /* Build configuration list for PBXProject "PeopsSoftGPU" */ = {
isa = XCConfigurationList;
buildConfigurations = (
717084320FDFD328004F3EB4 /* Development */,
717084330FDFD328004F3EB4 /* Deployment */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Development;
};
/* End XCConfigurationList section */
};
rootObject = 2B3E5A03062AAC1A001D796E /* Project object */;
}

View File

@ -0,0 +1,23 @@
#ifndef __EXTENDED_KEYS_H__
#define __EXTENDED_KEYS_H__
enum {
PSX_FREEZE_KEY = 0xFFBE/*XK_F1*/,
PSX_NEXT_FREEZE_SLOT_KEY = 0xFFBF/*XK_F2*/,
PSX_DEFROST_KEY = 0xFFC0/*XK_F3*/,
PSX_SHOW_FREEZE_PIC_KEY = 0xFFC1/*XK_F4*/,
PSX_SIO_ALWAYS_ON_KEY = 0xFFC2/*XK_F5*/,
PSX_BW_MDEC_KEY = 0xFFC3/*XK_F6*/,
PSX_XA_AUDIO_ON_KEY = 0xFFC4/*XK_F7*/,
PSX_SNAPSHOT_KEY = 0xFFC5/*XK_F8*/,
PSX_OPEN_SHELL_KEY = 0xFFC6/*XK_F9*/,
PSX_CLOSE_SHELL_KEY = 0xFFC7/*XK_F10*/,
PSX_STOP_KEY = 0xFF1B/*XK_Escape*/,
GPU_FULLSCREEN_KEY = 0x0100,
GPU_FPS_DISPLAY_KEY = 0xFFFF/*XK_Delete*/
};
#endif //__EXTENDED_KEYS_H__

View File

@ -0,0 +1,26 @@
/* NetSfPeopsSoftGPUPluginConfigController */
#define PluginConfigController NetSfPeopsSoftGPUPluginConfigController
#import <Cocoa/Cocoa.h>
@interface PluginConfigController : NSWindowController
{
IBOutlet NSControl *autoFullScreen;
IBOutlet NSPopUpButton *ditherMode;
IBOutlet NSControl *fpsCounter;
IBOutlet NSControl *frameSkipping;
IBOutlet NSControl *hackEnable;
IBOutlet NSView *hacksView;
IBOutlet NSControl *vSync;
NSMutableDictionary *keyValues;
}
- (IBAction)cancel:(id)sender;
- (IBAction)ok:(id)sender;
- (IBAction)reset:(id)sender;
- (IBAction)hackToggle:(id)sender;
- (void)loadValues;
@end

View File

@ -0,0 +1,215 @@
#import "PluginConfigController.h"
#include "gpu.h"
#include "cfg.h"
#include "externals.h"
#define APP_ID @"net.sf.peops.SoftGpuGLPlugin"
#define PrefsKey APP_ID @" Settings"
static PluginConfigController *windowController;
char * pConfigFile=NULL;
void AboutDlgProc()
{
// Get parent application instance
NSApplication *app = [NSApplication sharedApplication];
NSBundle *bundle = [NSBundle bundleWithIdentifier:APP_ID];
// Get Credits.rtf
NSString *path = [bundle pathForResource:@"Credits" ofType:@"rtf"];
NSAttributedString *credits;
if (path) {
credits = [[[NSAttributedString alloc] initWithPath: path
documentAttributes:NULL] autorelease];
} else {
credits = [[[NSAttributedString alloc] initWithString:@""] autorelease];
}
// Get Application Icon
NSImage *icon = [[NSWorkspace sharedWorkspace] iconForFile:[bundle bundlePath]];
NSSize size = NSMakeSize(64, 64);
[icon setSize:size];
[app orderFrontStandardAboutPanelWithOptions:[NSDictionary dictionaryWithObjectsAndKeys:
[bundle objectForInfoDictionaryKey:@"CFBundleName"], @"ApplicationName",
icon, @"ApplicationIcon",
[bundle objectForInfoDictionaryKey:@"CFBundleShortVersionString"], @"ApplicationVersion",
[bundle objectForInfoDictionaryKey:@"CFBundleVersion"], @"Version",
[bundle objectForInfoDictionaryKey:@"NSHumanReadableCopyright"], @"Copyright",
credits, @"Credits",
nil]];
}
void SoftDlgProc()
{
NSWindow *window;
if (windowController == nil) {
windowController = [[PluginConfigController alloc] initWithWindowNibName:@"NetSfPeopsSoftGPUConfig"];
}
window = [windowController window];
/* load values */
[windowController loadValues];
[window center];
[window makeKeyAndOrderFront:nil];
}
void ReadConfig(void)
{
NSDictionary *keyValues;
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults registerDefaults:[NSDictionary dictionaryWithObjectsAndKeys:
[[NSMutableDictionary alloc] initWithObjectsAndKeys:
[NSNumber numberWithBool:NO], @"FPS Counter",
[NSNumber numberWithBool:NO], @"Auto Full Screen",
[NSNumber numberWithBool:NO], @"Frame Skipping",
[NSNumber numberWithBool:YES], @"Frame Limit",
[NSNumber numberWithBool:NO], @"VSync",
[NSNumber numberWithBool:NO], @"Enable Hacks",
[NSNumber numberWithInt:1], @"Dither Mode",
[NSNumber numberWithLong:0], @"Hacks",
nil], PrefsKey,
nil]];
keyValues = [defaults dictionaryForKey:PrefsKey];
iShowFPS = [[keyValues objectForKey:@"FPS Counter"] boolValue];
iWindowMode = [[keyValues objectForKey:@"Auto Full Screen"] boolValue] ? 0 : 1;
UseFrameSkip = [[keyValues objectForKey:@"Frame Skipping"] boolValue];
UseFrameLimit = [[keyValues objectForKey:@"Frame Limit"] boolValue];
//??? = [[keyValues objectForKey:@"VSync"] boolValue];
iUseFixes = [[keyValues objectForKey:@"Enable Hacks"] boolValue];
iUseDither = [[keyValues objectForKey:@"Dither Mode"] intValue];
dwCfgFixes = [[keyValues objectForKey:@"Hacks"] longValue];
iResX = 640;
iResY = 480;
iUseNoStretchBlt = 1;
fFrameRate = 60;
iFrameLimit = 2;
if (iShowFPS)
ulKeybits|=KEY_SHOWFPS;
else
ulKeybits&=~KEY_SHOWFPS;
// additional checks
if(!iColDepth) iColDepth=32;
if(iUseFixes) dwActFixes=dwCfgFixes;
else dwActFixes=0;
SetFixes();
if(iFrameLimit==2) SetAutoFrameCap();
bSkipNextFrame = FALSE;
szDispBuf[0]=0;
BuildDispMenu(0);
}
@implementation PluginConfigController
- (IBAction)cancel:(id)sender
{
[self close];
}
- (IBAction)ok:(id)sender
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *writeDic = [NSMutableDictionary dictionaryWithDictionary:keyValues];
[writeDic setObject:[NSNumber numberWithInt:[fpsCounter intValue]] forKey:@"FPS Counter"];
[writeDic setObject:[NSNumber numberWithInt:[autoFullScreen intValue]] forKey:@"Auto Full Screen"];
[writeDic setObject:[NSNumber numberWithInt:[frameSkipping intValue]] forKey:@"Frame Skipping"];
//[writeDic setObject:[NSNumber numberWithInt:[frameLimit intValue]] forKey:@"Frame Limit"];
[writeDic setObject:[NSNumber numberWithInt:[vSync intValue]] forKey:@"VSync"];
[writeDic setObject:[NSNumber numberWithInt:[hackEnable intValue]] forKey:@"Enable Hacks"];
[writeDic setObject:[NSNumber numberWithInt:[ditherMode indexOfSelectedItem]] forKey:@"Dither Mode"];
unsigned long hackValues = 0;
int i;
NSArray *views = [hacksView subviews];
for (i=0; i<[views count]; i++) {
NSView *control = [views objectAtIndex:i];
if ([control isKindOfClass:[NSButton class]]) {
hackValues |= [(NSControl *)control intValue] << ([control tag] - 1);
}
}
[writeDic setObject:[NSNumber numberWithLong:hackValues] forKey:@"Hacks"];
// write to defaults
[defaults setObject:writeDic forKey:PrefsKey];
[defaults synchronize];
// and set global values accordingly
ReadConfig();
[self close];
}
- (IBAction)reset:(id)sender
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults removeObjectForKey:PrefsKey];
[self loadValues];
}
- (IBAction)hackToggle:(id)sender
{
BOOL enable = [sender intValue] ? YES : NO;
int i;
NSArray *views = [hacksView subviews];
for (i=0; i<[views count]; i++) {
NSView *control = [views objectAtIndex:i];
if ([control isKindOfClass:[NSButton class]]) {
[(NSControl *)control setEnabled:enable];
}
}
}
- (void)loadValues
{
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
ReadConfig();
/* load from preferences */
[keyValues release];
keyValues = [[defaults dictionaryForKey:PrefsKey] retain];
[fpsCounter setIntValue:[[keyValues objectForKey:@"FPS Counter"] intValue]];
[autoFullScreen setIntValue:[[keyValues objectForKey:@"Auto Full Screen"] intValue]];
[frameSkipping setIntValue:[[keyValues objectForKey:@"Frame Skipping"] intValue]];
[vSync setIntValue:[[keyValues objectForKey:@"VSync"] intValue]];
[hackEnable setIntValue:[[keyValues objectForKey:@"Enable Hacks"] intValue]];
[ditherMode selectItemAtIndex:[[keyValues objectForKey:@"Dither Mode"] intValue]];
unsigned long hackValues = [[keyValues objectForKey:@"Hacks"] longValue];
int i;
NSArray *views = [hacksView subviews];
for (i=0; i<[views count]; i++) {
NSView *control = [views objectAtIndex:i];
if ([control isKindOfClass:[NSButton class]]) {
[(NSControl *)control setIntValue:(hackValues >> ([control tag] - 1)) & 1];
}
}
[self hackToggle:hackEnable];
}
- (void)awakeFromNib
{
hacksView = [[hacksView subviews] objectAtIndex:0];
}
@end

View File

@ -0,0 +1,63 @@
/***************************************************************************
PluginGLView.h
PeopsSoftGPU
Created by Gil Pedersen on Sun April 18 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#define PluginGLView NetSfPeopsSoftGPUPluginGLView
#import <Cocoa/Cocoa.h>
#import <OpenGL/gl.h>
#include <sys/time.h>
#define IMAGE_COUNT 2
@interface PluginGLView : NSOpenGLView
{
GLubyte *image_base;
GLubyte *image[IMAGE_COUNT];
GLint buffers;
//GLint frame_rate;
GLenum texture_hint;
GLboolean rect_texture;
GLboolean client_storage;
GLboolean texture_range;
struct timeval cycle_time;
NSLock *glLock;
BOOL noDisplay;
BOOL drawBG;
int image_width;
int image_height;
int image_width2;
int image_height2;
int image_depth;
int image_type;
float image_tx;
float image_ty;
int whichImage;
int isFullscreen;
}
- (void)renderScreen;
- (void)swapBuffer;
- (void)clearBuffer:(BOOL)display;
- (void)loadTextures: (GLboolean)first;
@end

View File

@ -0,0 +1,682 @@
/***************************************************************************
PluginGLView.m
PeopsSoftGPU
Created by Gil Pedersen on Sun April 18 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#import <OpenGL/gl.h>
#import <OpenGL/glext.h>
#import <OpenGL/glu.h>
#import <GLUT/glut.h>
#import <Carbon/Carbon.h>
#import "PluginGLView.h"
#include "externals.h"
#undef BOOL
#include "gpu.h"
#include "swap.h"
#include <time.h>
extern time_t tStart;
static int mylog2(int val)
{
int i;
for (i=1; i<31; i++)
if (val <= (1 << i))
return (1 << i);
return -1;
}
#if 0
void BlitScreen16NS(unsigned char * surf,long x,long y)
{
unsigned long lu;
unsigned short row,column;
unsigned short dx=PreviousPSXDisplay.Range.x1>>1;
unsigned short dy=PreviousPSXDisplay.DisplayMode.y;
unsigned short LineOffset,SurfOffset;
long lPitch=image_width<<1;
if(PreviousPSXDisplay.Range.y0) // centering needed?
{
surf+=PreviousPSXDisplay.Range.y0*lPitch;
dy-=PreviousPSXDisplay.Range.y0;
}
{
unsigned long * SRCPtr = (unsigned long *)(psxVuw + (y<<10) + x);
unsigned long * DSTPtr = ((unsigned long *)surf)+(PreviousPSXDisplay.Range.x0>>1);
LineOffset = 512 - dx;
SurfOffset = (lPitch>>2) - dx;
for(column=0;column<dy;column++)
{
for(row=0;row<dx;row++)
{
lu=GETLE16D(SRCPtr++);
*DSTPtr++= lu;//((lu<<11)&0xf800f800)|((lu<<1)&0x7c007c0)|((lu>>10)&0x1f001f);
}
SRCPtr += LineOffset;
DSTPtr += SurfOffset;
}
}
}
#endif
@implementation PluginGLView
//- (id)initWithFrame:(NSRect)frameRect
- (id) initWithCoder: (NSCoder *) coder
{
const GLubyte * strExt;
if ((self = [super initWithCoder:coder]) == nil)
return nil;
glLock = [[NSLock alloc] init];
if (nil == glLock) {
[self release];
return nil;
}
// Init pixel format attribs
NSOpenGLPixelFormatAttribute attrs[] =
{
NSOpenGLPFAAccelerated,
NSOpenGLPFANoRecovery,
NSOpenGLPFADoubleBuffer,
0
};
// Get pixel format from OpenGL
NSOpenGLPixelFormat* pixFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs];
if (!pixFmt)
{
NSLog(@"No Accelerated OpenGL pixel format found\n");
NSOpenGLPixelFormatAttribute attrs2[] =
{
NSOpenGLPFANoRecovery,
0
};
// Get pixel format from OpenGL
pixFmt = [[NSOpenGLPixelFormat alloc] initWithAttributes:attrs2];
if (!pixFmt) {
NSLog(@"No OpenGL pixel format found!\n");
[self release];
return nil;
}
}
[self setPixelFormat:[pixFmt autorelease]];
/*
long swapInterval = 1 ;
[[self openGLContext]
setValues:&swapInterval
forParameter:NSOpenGLCPSwapInterval];
*/
[glLock lock];
[[self openGLContext] makeCurrentContext];
// Init object members
strExt = glGetString (GL_EXTENSIONS);
texture_range = gluCheckExtension ((const unsigned char *)"GL_APPLE_texture_range", strExt) ? GL_TRUE : GL_FALSE;
texture_hint = GL_STORAGE_SHARED_APPLE ;
client_storage = gluCheckExtension ((const unsigned char *)"GL_APPLE_client_storage", strExt) ? GL_TRUE : GL_FALSE;
rect_texture = gluCheckExtension((const unsigned char *)"GL_EXT_texture_rectangle", strExt) ? GL_TRUE : GL_FALSE;
// Setup some basic OpenGL stuff
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
[NSOpenGLContext clearCurrentContext];
[glLock unlock];
image_width = 1024;
image_height = 512;
image_depth = 16;
image_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
image_base = (GLubyte *) calloc(((IMAGE_COUNT * image_width * image_height) / 3) * 4, image_depth >> 3);
if (image_base == nil) {
[self release];
return nil;
}
// Create and load textures for the first time
[self loadTextures:GL_TRUE];
// Init fps timer
//gettimeofday(&cycle_time, NULL);
drawBG = YES;
// Call for a redisplay
noDisplay = YES;
PSXDisplay.Disabled = 1;
[self setNeedsDisplay:true];
return self;
}
- (void)dealloc
{
int i;
[glLock lock];
[[self openGLContext] makeCurrentContext];
for(i = 0; i < IMAGE_COUNT; i++)
{
GLuint dt = i+1;
glDeleteTextures(1, &dt);
}
if(texture_range) glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, IMAGE_COUNT * image_width * image_height * (image_depth >> 3), image_base);
[NSOpenGLContext clearCurrentContext];
[glLock unlock];
[glLock release];
if (image_base)
free(image_base);
[super dealloc];
}
- (BOOL)isOpaque
{
return YES;
}
- (BOOL)acceptsFirstResponder
{
return NO;
}
- (void)drawRect:(NSRect)aRect
{
// Check if an update has occured to the buffer
if ([self lockFocusIfCanDraw]) {
// Make this context current
if (drawBG) {
[[NSColor blackColor] setFill];
[NSBezierPath fillRect:[self visibleRect]];
}
//glFinish() ;
// Swap buffer to screen
//[[self openGLContext] flushBuffer];
[self unlockFocus];
}
}
#if 0
- (void)update // moved or resized
{
NSRect rect;
[super update];
[[self openGLContext] makeCurrentContext];
[[self openGLContext] update];
rect = [self bounds];
glViewport(0, 0, (int) rect.size.width, (int) rect.size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
//[self setNeedsDisplay:true];
}
#endif
- (void)reshape // scrolled, moved or resized
{
[glLock lock];
NSOpenGLContext *oglContext = [self openGLContext];
NSRect rect;
[super reshape];
[oglContext makeCurrentContext];
[oglContext update];
rect = [[oglContext view] bounds];
glViewport(0, 0, (int) rect.size.width, (int) rect.size.height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
drawBG = YES;
[NSOpenGLContext clearCurrentContext];
// [self setNeedsDisplay:true];
[self renderScreen];
[glLock unlock];
}
- (void)renderScreen
{
int bufferIndex = whichImage;
if (1/*[glLock tryLock]*/) {
// Make this context current
[[self openGLContext] makeCurrentContext];
if (PSXDisplay.Disabled) {
glClear(GL_COLOR_BUFFER_BIT);
} else {
// Bind, update and draw new image
if(rect_texture)
{
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, bufferIndex+1);
glTexSubImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, image_width, image_height, GL_BGRA, image_type, image[bufferIndex]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(-1.0f, 1.0f);
glTexCoord2f(0.0f, image_height);
glVertex2f(-1.0f, -1.0f);
glTexCoord2f(image_width, image_height);
glVertex2f(1.0f, -1.0f);
glTexCoord2f(image_width, 0.0f);
glVertex2f(1.0f, 1.0f);
glEnd();
}
else
{
glBindTexture(GL_TEXTURE_2D, whichImage+1);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, image_width2, image_height2, GL_BGRA, image_type, image[bufferIndex]);
glBegin(GL_QUADS);
glTexCoord2f(0.0f, 0.0f);
glVertex2f(-1.0f, 1.0f);
glTexCoord2f(0.0f, image_ty);
glVertex2f(-1.0f, -1.0f);
glTexCoord2f(image_tx, image_ty);
glVertex2f(1.0f, -1.0f);
glTexCoord2f(image_tx, 0.0f);
glVertex2f(1.0f, 1.0f);
glEnd();
}
}
// FPS Display
if(ulKeybits&KEY_SHOWFPS)
{
int len, i;
if(szDebugText[0] && ((time(NULL) - tStart) < 2))
{
strncpy(szDispBuf, szDebugText, 63);
}
else
{
szDebugText[0]=0;
if (szMenuBuf) {
strncat(szDispBuf, szMenuBuf, 63 - strlen(szDispBuf));
}
}
NSRect rect = [[[self openGLContext] view] bounds];
len = (int) strlen(szDispBuf);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
gluOrtho2D(0.0, rect.size.width, 0.0, rect.size.height);
glDisable(rect_texture ? GL_TEXTURE_RECTANGLE_EXT : GL_TEXTURE_2D);
glColor4f(0.0, 0.0, 0.0, 0.5);
glRasterPos2f(3.0, rect.size.height - 14.0);
for (i = 0; i < len; i++) {
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, szDispBuf[i]);
}
glColor3f(1.0, 1.0, 1.0);
glRasterPos2f(2.0, rect.size.height - 13.0);
for (i = 0; i < len; i++) {
glutBitmapCharacter(GLUT_BITMAP_HELVETICA_12, szDispBuf[i]);
}
glEnable(rect_texture ? GL_TEXTURE_RECTANGLE_EXT : GL_TEXTURE_2D);
glPopMatrix();
}
[[self openGLContext] flushBuffer];
[NSOpenGLContext clearCurrentContext];
//[glLock unlock];
}
}
- (void)loadTextures:(GLboolean)first
{
GLint i;
//[glLock lock];
[[self openGLContext] makeCurrentContext];
/*
printf("Range.x0=%i\n"
"Range.x1=%i\n"
"Range.y0=%i\n"
"Range.y1=%i\n",
PreviousPSXDisplay.Range.x0,
PreviousPSXDisplay.Range.x1,
PreviousPSXDisplay.Range.y0,
PreviousPSXDisplay.Range.y1);
printf("DisplayMode.x=%d\n"
"DisplayMode.y=%d\n",
PreviousPSXDisplay.DisplayMode.x,
PreviousPSXDisplay.DisplayMode.y);
printf("DisplayPosition.x=%i\n"
"DisplayPosition.y=%i\n",
PreviousPSXDisplay.DisplayPosition.x,
PreviousPSXDisplay.DisplayPosition.y);
printf("DisplayEnd.x=%i\n"
"DisplayEnd.y=%i\n",
PreviousPSXDisplay.DisplayEnd.x,
PreviousPSXDisplay.DisplayEnd.y);
printf("Double=%i\n"
"Height=%i\n",
PreviousPSXDisplay.Double,
PreviousPSXDisplay.Height);
printf("Disabled=%i\n", PreviousPSXDisplay.Disabled);
*/
image_width = PreviousPSXDisplay.Range.x1;
image_height = PreviousPSXDisplay.DisplayMode.y;
if (PSXDisplay.RGB24) {
image_depth = 32;
image_type = GL_UNSIGNED_INT_8_8_8_8_REV;
} else {
image_depth = 16;
image_type = GL_UNSIGNED_SHORT_1_5_5_5_REV;
//image_width >>= 1;
}
if (image_width * image_height * (image_depth >> 3) > ((1024*512*2)/3)*4)
printf("Fatal error: desired dimension are too large! (%ix%i %ibpp)\n",
image_width, image_height, image_depth);
for(i = 0; i < IMAGE_COUNT; i++)
image[i] = image_base + i * image_width * image_height * (image_depth >> 3);
if(rect_texture)
{
image_width2 = image_width;
image_height2 = image_height;
image_tx = (float)image_width;
image_ty = (float)image_height;
if(texture_range) glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, IMAGE_COUNT * image_width * image_height * (image_depth >> 3), image_base);
else glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, 0, NULL);
for(i = 0; i < IMAGE_COUNT; i++)
{
if(!first)
{
GLuint dt = i+1;
glDeleteTextures(1, &dt);
}
glDisable(GL_TEXTURE_2D);
glEnable(GL_TEXTURE_RECTANGLE_EXT);
glBindTexture(GL_TEXTURE_RECTANGLE_EXT, i+1);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_STORAGE_HINT_APPLE , texture_hint);
glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, client_storage);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_RECTANGLE_EXT, 0, GL_RGBA, image_width,
image_height, 0, GL_BGRA, image_type, image[i]);
}
}
else
{
image_width2 = mylog2(image_width);
image_height2 = mylog2(image_height);
image_tx = (float)image_width/(float)image_width2;
image_ty = (float)image_height/(float)image_height2;
glTextureRangeAPPLE(GL_TEXTURE_RECTANGLE_EXT, 0, NULL);
if(texture_range) glTextureRangeAPPLE(GL_TEXTURE_2D, IMAGE_COUNT * image_width2 * image_height2 * (image_depth >> 3), image_base);
else glTextureRangeAPPLE(GL_TEXTURE_2D, 0, NULL);
for(i = 0; i < IMAGE_COUNT; i++)
{
if(!first)
{
GLuint dt = i+1;
glDeleteTextures(1, &dt);
}
glDisable(GL_TEXTURE_RECTANGLE_EXT);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, i+1);
//if(texture_range) glTextureRangeAPPLE(GL_TEXTURE_2D, IMAGE_COUNT * image_width2 * image_height2 * (image_depth >> 3), image_base);
//else glTextureRangeAPPLE(GL_TEXTURE_2D, 0, NULL);
glTexParameteri(GL_TEXTURE_RECTANGLE_EXT, GL_TEXTURE_STORAGE_HINT_APPLE , texture_hint);
glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, client_storage);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image_width2,
image_height2, 0, GL_BGRA, image_type, image[i]);
}
}
[NSOpenGLContext clearCurrentContext];
//[glLock unlock];
}
- (void)swapBuffer
{
unsigned char * surf;
long x = PSXDisplay.DisplayPosition.x;
long y = PSXDisplay.DisplayPosition.y;
unsigned long lu;
unsigned short row,column;
unsigned short dx=(unsigned short)PSXDisplay.DisplayEnd.x;//PreviousPSXDisplay.Range.x1;
unsigned short dy=(unsigned short)PSXDisplay.DisplayEnd.y;//PreviousPSXDisplay.DisplayMode.y;
long lPitch;
//printf("y=%i",PSXDisplay.DisplayPosition.y);
if ([glLock tryLock]) {
// make sure the texture area is ready to be written to
glFinishObjectAPPLE(GL_TEXTURE, 2-whichImage);
if ((image_width != PreviousPSXDisplay.Range.x1) ||
(image_height != PreviousPSXDisplay.DisplayMode.y) ||
((PSXDisplay.RGB24 ? 32 : 16) != image_depth)) {
[self loadTextures:NO];
}
surf = image[1-whichImage];
lPitch=image_width2<<(image_depth >> 4);
if(PreviousPSXDisplay.Range.y0) // centering needed?
{
surf+=PreviousPSXDisplay.Range.y0*lPitch;
dy-=PreviousPSXDisplay.Range.y0;
}
if(PSXDisplay.RGB24)
{
unsigned char * pD;unsigned int startxy;
surf+=PreviousPSXDisplay.Range.x0<<2;
for(column=0;column<dy;column++)
{
startxy=((1024)*(column+y))+x;
pD=(unsigned char *)&psxVuw[startxy];
row=0;
// make sure the reads are aligned
while ((int)pD & 0x3) {
*((unsigned long *)((surf)+(column*lPitch)+(row<<2)))=
(*(pD+0)<<16)|(*(pD+1)<<8)|*(pD+2);
pD+=3;
row++;
}
for(;row<dx;row+=4)
{
unsigned long lu1 = *((unsigned long *)pD);
unsigned long lu2 = *((unsigned long *)pD+1);
unsigned long lu3 = *((unsigned long *)pD+2);
unsigned long *dst = ((unsigned long *)((surf)+(column*lPitch)+(row<<2)));
*(dst)=
(((lu1>>24)&0xff)<<16)|(((lu1>>16)&0xff)<<8)|(((lu1>>8)&0xff));
*(dst+1)=
(((lu1>>0)&0xff)<<16)|(((lu2>>24)&0xff)<<8)|(((lu2>>16)&0xff));
*(dst+2)=
(((lu2>>8)&0xff)<<16)|(((lu2>>0)&0xff)<<8)|(((lu3>>24)&0xff));
*(dst+3)=
(((lu3>>16)&0xff)<<16)|(((lu3>>8)&0xff)<<8)|(((lu3>>0)&0xff));
pD+=12;
}
//for(;row<dx;row+=4)
/*while (pD&0x3) {
*((unsigned long *)((surf)+(column*lPitch)+(row<<2)))=
(*(pD+0)<<16)|(*(pD+1)<<8)|(*(pD+2)&0xff));
pD+=3;
row++;
}*/
}
}
else
{
int LineOffset,SurfOffset;
unsigned long * SRCPtr = (unsigned long *)(psxVuw +
(y<<10) + x);
unsigned long * DSTPtr =
((unsigned long *)surf)+(PreviousPSXDisplay.Range.x0>>1);
dx>>=1;
LineOffset = 512 - dx;
SurfOffset = (lPitch>>2) - dx;
for(column=0;column<dy;column++)
{
for(row=0;row<dx;row++)
{
lu=GETLE16D(SRCPtr++);
*DSTPtr++=
((lu<<10)&0x7c007c00)|
((lu)&0x3e003e0)|
((lu>>10)&0x1f001f);
}
SRCPtr += LineOffset;
DSTPtr += SurfOffset;
}
}
// Swap image buffer
whichImage = 1 - whichImage;
[self renderScreen];
[glLock unlock];
}
}
- (void)clearBuffer:(BOOL)display
{
if (display == NO) {
//[[self openGLContext] makeCurrentContext];
//glClear(GL_COLOR_BUFFER_BIT);
//[self loadTextures:NO];
} else {
noDisplay = YES;
// [self setNeedsDisplay:true];
}
}
/*
- (void)mouseDown:(NSEvent *)theEvent
{
PluginWindowController *controller = [[self window] windowController];
static unsigned long lastTime = 0;
unsigned long time;
time = TickCount();
if (lastTime != 0) {
if (time - lastTime > GetDblTime()) {
if (isFullscreen) {
[[self openGLContext] clearDrawable];
} else {
[[self openGLContext] setFullScreen];
}
isFullscreen = 1-isFullscreen;
lastTime = 0;
return;
}
}
lastTime = time;
}*/
@end

View File

@ -0,0 +1,24 @@
/***************************************************************************
PluginWindow.h
PeopsSoftGPU
Created by Gil Pedersen on Wed April 21 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#import <Cocoa/Cocoa.h>
@interface NetSfPeopsSoftGPUPluginWindow : NSWindow
{
}
@end

View File

@ -0,0 +1,46 @@
/***************************************************************************
PluginWindow.m
PeopsSoftGPU
Created by Gil Pedersen on Wed April 21 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#import "PluginWindow.h"
@implementation NetSfPeopsSoftGPUPluginWindow
/*
- (BOOL)windowShouldClose:(id)sender
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"emuWindowDidClose" object:self];
return YES;
}*/
- (void)sendEvent:(NSEvent *)theEvent
{
int type = [theEvent type];
if (type == NSKeyDown || type == NSKeyUp) {
if (type == NSKeyDown && [theEvent keyCode] == 53 /* escape */) {
// reroute to menu event
[[NSApp mainMenu] performKeyEquivalent:theEvent];
}
// ignore all key Events
return;
}
[super sendEvent:theEvent];
}
@end

View File

@ -0,0 +1,41 @@
/***************************************************************************
PluginWindowController.h
PeopsSoftGPU
Created by Gil Pedersen on Mon April 11 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#define PluginWindowController NetSfPeopsSoftGPUPluginWindowController
#import <Cocoa/Cocoa.h>
#import "PluginGLView.h"
@class PluginWindowController;
extern NSWindow *gameWindow;
extern PluginWindowController *gameController;
@interface PluginWindowController : NSWindowController
{
IBOutlet NSOpenGLView *glView;
NSWindow *fullWindow;
}
+ (id)openGameView;
- (PluginGLView *)getOpenGLView;
- (BOOL)fullscreen;
- (void)setFullscreen:(BOOL)flag;
@end

View File

@ -0,0 +1,227 @@
/***************************************************************************
PluginWindowController.m
PeopsSoftGPU
Created by Gil Pedersen on Tue April 12 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#import "PluginWindowController.h"
#import "PluginWindow.h"
#import "Carbon/Carbon.h"
#include "externals.h"
#undef BOOL
NSWindow *gameWindow;
PluginWindowController *gameController;
NSRect windowFrame;
@implementation PluginWindowController
+ (id)openGameView
{
if (gameWindow == nil) {
if (gameController == nil) {
gameController = [[PluginWindowController alloc] initWithWindowNibName:@"NetSfPeopsSoftGPUInterface"];
}
gameWindow = [gameController window];
}
if (windowFrame.size.width != 0) {
[gameWindow setFrame:windowFrame display:NO];
} else {
[gameWindow center];
}
[gameWindow makeKeyAndOrderFront:nil];
[gameController showWindow:nil];
CGDirectDisplayID display = (CGDirectDisplayID)[[[[gameWindow screen] deviceDescription] objectForKey:@"NSScreenNumber"] longValue];
if (CGDisplayIsCaptured(display)) {
[gameController setFullscreen:YES];
}
return gameController;
}
- (PluginGLView *)getOpenGLView
{
return (PluginGLView *)glView;
}
- (void)dealloc
{
if (fullWindow) {
[fullWindow orderOut:self];
[fullWindow autorelease];
fullWindow = nil;
}
windowFrame = [[self window] frame];
[super dealloc];
}
// forget keyDownEvents
- (void)keyDown:(NSEvent *)theEvent
{
// Not required any more
}
- (void)mouseDown:(NSEvent *)theEvent
{
if ([self fullscreen]) {
[self setFullscreen:NO];
}
}
- (BOOL)fullscreen
{
return (fullWindow!=nil);
}
- (void)setFullscreen:(BOOL)flag
{
NSWindow *window = [self window];
NSScreen *screen = [window screen];
CGDirectDisplayID display = (CGDirectDisplayID)[[[screen deviceDescription] objectForKey:@"NSScreenNumber"] longValue];
NSDisableScreenUpdates();
if (flag) {
if (!CGDisplayIsCaptured(display)) {
CGDisplayCapture(display);
CGDisplayCount count = 10;
CGDirectDisplayID displays[10];
CGGetActiveDisplayList(10, displays, &count);
if (count == 1) {
CGDisplayHideCursor(display);
CGAssociateMouseAndMouseCursorPosition(NO);
}
//[window orderOut:self];
}
int width = CGDisplayPixelsWide(display);
int height = CGDisplayPixelsHigh(display);
// assume square pixel ratio on the monitor
if ((width*3)/4 < height) {
height = (width*3)/4;
} else {
width = (height*4)/3;
}
fullWindow = [[NSWindow alloc] initWithContentRect:NSMakeRect((CGDisplayPixelsWide(display)-width)/2,
(CGDisplayPixelsHigh(display)-height)/2,
width, height)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreRetained
defer:NO
screen:screen];
//[[glView openGLContext] setFullScreen];
[[glView openGLContext] setView:[fullWindow contentView]];
[glView reshape];
//[[glView openGLContext] update];
//[fullWindow setContentView:glView];
[fullWindow setBackgroundColor:[NSColor blackColor]];
[fullWindow setHasShadow:NO];
[fullWindow setDelegate:self];
[fullWindow setLevel:CGShieldingWindowLevel()];
[fullWindow makeKeyAndOrderFront:self];
[[self window] makeKeyAndOrderFront:self];
} else {
CGDisplayRelease(display);
//CGReleaseAllDisplays();
CGAssociateMouseAndMouseCursorPosition(YES);
CGDisplayShowCursor(display);
if (fullWindow) {
[fullWindow orderOut:self];
[fullWindow autorelease];
fullWindow = nil;
[[glView openGLContext] setView:glView];
[glView reshape];
//[window setContentView:glView];
}
[[self window] makeKeyAndOrderFront:self];
}
NSEnableScreenUpdates();
}
- (BOOL)windowShouldZoom:(NSWindow *)sender toFrame:(NSRect)newFrame
{
[self setFullscreen:YES];
return NO;
}
- (NSSize)windowWillResize:(NSWindow *)sender toSize:(NSSize)proposedFrameSize
{
if (!(([sender resizeFlags] & NSShiftKeyMask) == NSShiftKeyMask)) {
NSRect oldSize = [sender frame];
NSRect viewSize = [glView frame];
float xDiff = NSWidth(oldSize) - NSWidth(viewSize);
float yDiff = NSHeight(oldSize) - NSHeight(viewSize);
//if ((proposedFrameSize.height / proposedFrameSize.width) < (3.0/4.0))
// proposedFrameSize.height = ((proposedFrameSize.width - xDiff) * 3.0) / 4.0 + yDiff;
//else
proposedFrameSize.width = ((proposedFrameSize.height - yDiff) * 4.0) / 3.0 + xDiff;
}
return proposedFrameSize;
}
- (void)windowWillMiniaturize:(NSNotification *)aNotification
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"emuWindowWantPause" object:self];
}
- (void)windowDidDeminiaturize:(NSNotification *)aNotification
{
[[NSNotificationCenter defaultCenter] postNotificationName:@"emuWindowWantResume" object:self];
}
//- (void)windowDidBecomeMain:(NSNotification *)aNotification
/*- (void)windowDidBecomeKey:(NSNotification *)aNotification
{
if (iWindowMode==0) {
[self setFullscreen:YES];
}
}*/
- (BOOL)windowShouldClose:(id)sender
{
if (fullWindow) {
return NO;
}
[[NSNotificationCenter defaultCenter] postNotificationName:@"emuWindowDidClose" object:self];
[gameController autorelease];
gameController = nil;
gameWindow = nil;
return YES;
}
@end

View File

@ -0,0 +1,181 @@
/***************************************************************************
drawgl.m
PeopsSoftGPU
Created by Gil Pedersen on Sun April 18 2004.
Copyright (c) 2004 Gil Pedersen.
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. See also the license.txt file for *
* additional informations. *
* *
***************************************************************************/
#import "PluginWindowController.h"
#import "PluginGLView.h"
#include "ExtendedKeys.h"
#include "externals.h"
#include "draw.h"
#include "gpu.h"
#include "menu.h"
////////////////////////////////////////////////////////////////////////////////////
// misc globals
////////////////////////////////////////////////////////////////////////////////////
int iResX;
int iResY;
long lLowerpart;
BOOL bIsFirstFrame = TRUE;
BOOL bCheckMask=FALSE;
unsigned short sSetMask=0;
unsigned long lSetMask=0;
int iDesktopCol=16;
int iShowFPS=0;
int iWinSize;
int iUseScanLines=0;
int iUseNoStretchBlt=0;
int iFastFwd=0;
int iDebugMode=0;
int iFVDisplay=0;
PSXPoint_t ptCursorPoint[8];
unsigned short usCursorActive=0;
char * Xpixels;
char * pCaptionText;
//static PluginWindowController *windowController;
static PluginGLView *glView;
////////////////////////////////////////////////////////////////////////
void DoBufferSwap(void) // SWAP BUFFERS
{
#if 1
[glView swapBuffer];
#else
static long long lastTickCount = -1;
static int skipCount = 0;
long long microTickCount;
long deltaTime;
Microseconds((struct UnsignedWide *)&microTickCount);
deltaTime = (long)(microTickCount - lastTickCount);
if (deltaTime <= (PSXDisplay.PAL ? 1000000/50 : 100000000 / 5994) ||
skipCount >= 3) {
skipCount = 0;
[glView swapBuffer];
} else {
skipCount++;
}
NSLog(@"count: %i", deltaTime);
lastTickCount = microTickCount;
#endif
}
////////////////////////////////////////////////////////////////////////
void DoClearScreenBuffer(void) // CLEAR DX BUFFER
{
// clear the screen, and DON'T flush it
[glView clearBuffer:NO];
}
////////////////////////////////////////////////////////////////////////
void DoClearFrontBuffer(void) // CLEAR DX BUFFER
{
// clear the screen, and flush it
[glView clearBuffer:YES];
}
////////////////////////////////////////////////////////////////////////
unsigned long ulInitDisplay(void) // OPEN GAME WINDOW
{
bUsingTWin=FALSE;
InitMenu();
bIsFirstFrame = FALSE;
if(iShowFPS)
{
//iShowFPS=0;
ulKeybits|=KEY_SHOWFPS;
szDispBuf[0]=0;
BuildDispMenu(0);
}
PluginWindowController *windowController = [PluginWindowController openGameView];
glView = [windowController getOpenGLView];
[[windowController window] setTitle:[NSString stringWithCString:pCaptionText]];
return (unsigned long)[windowController window];
}
////////////////////////////////////////////////////////////////////////
void CloseDisplay(void)
{
if (gameController) {
[gameController close];
[gameController release];
gameController = nil;
gameWindow = nil;
}
}
////////////////////////////////////////////////////////////////////////
void CreatePic(unsigned char * pMem)
{
}
///////////////////////////////////////////////////////////////////////////////////////
void DestroyPic(void)
{
}
///////////////////////////////////////////////////////////////////////////////////////
void DisplayPic(void)
{
}
///////////////////////////////////////////////////////////////////////////////////////
void ShowGpuPic(void)
{
// this is the default implementation...
}
///////////////////////////////////////////////////////////////////////////////////////
void ShowTextGpuPic(void)
{
// this is the default implementation...
}
void HandleKey(int keycode)
{
switch (keycode) {
case GPU_FULLSCREEN_KEY:
[gameController setFullscreen:![gameController fullscreen]];
break;
}
}

View File

@ -61,10 +61,10 @@
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
/*#include <GL/gl.h>
#include <GL/glx.h> */
#ifndef _MACGL
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#endif
#include <math.h>
#include <X11/cursorfont.h>
#include <stdint.h>

View File

@ -15,7 +15,9 @@
* *
***************************************************************************/
#ifndef _MACGL
#include "config.h"
#endif
#define _IN_GPU
@ -49,8 +51,13 @@ const unsigned char version = 1; // do not touch - library for PSEmu 1.x
const unsigned char revision = 1;
const unsigned char build = 17; // increase that with each version
#ifdef _MACGL
static char *libraryName = N_("SoftGL Driver");
static char *libraryInfo = N_("P.E.Op.S. SoftGL Driver V1.17\nCoded by Pete Bernert and the P.E.Op.S. team\n");
#else
static char *libraryName = N_("XVideo Driver");
static char *libraryInfo = N_("P.E.Op.S. Xvideo Driver V1.17\nCoded by Pete Bernert and the P.E.Op.S. team\n");
#endif
static char *PluginAuthor = N_("Pete Bernert and the P.E.Op.S. team");
@ -195,12 +202,14 @@ static char * pGetConfigInfos(int iCfg)
else sprintf(szTxt,"- FPS limit: %.1f\r\n\r\n",fFrameRate);
strcat(pB,szTxt);
//----------------------------------------------------//
#ifndef _MACGL
strcpy(szTxt,"Misc:\r\n- MaintainAspect: ");
if(iMaintainAspect == 0) strcat(szTxt,"disabled");
else
if(iMaintainAspect == 1) strcat(szTxt,"enabled");
strcat(szTxt,"\r\n");
strcat(pB,szTxt);
#endif
sprintf(szTxt,"- Game fixes: %s [%08x]\r\n",szO[iUseFixes],dwCfgFixes);
strcat(pB,szTxt);
//----------------------------------------------------//
@ -646,6 +655,8 @@ void updateDisplayIfChanged(void) // UPDATE DISPLAY IF CHAN
////////////////////////////////////////////////////////////////////////
#ifndef _MACGL
#include "draw.h"
void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WINDOW
@ -743,6 +754,8 @@ void ChangeWindowMode(void) // TOGGLE FULLSCREEN - WI
bDoVSyncUpdate=TRUE;
}
#endif
////////////////////////////////////////////////////////////////////////
// gun cursor func: player=0-7, x=0-511, y=0-255
////////////////////////////////////////////////////////////////////////
@ -796,9 +809,9 @@ void CALLBACK GPUupdateLace(void) // VSYNC
updateDisplay(); // -> update display
}
}
#ifndef _MACGL
if(bChangeWinMode) ChangeWindowMode(); // toggle full - window mode
#endif
bDoVSyncUpdate=FALSE; // vsync done
}