mirror of
https://github.com/mitch030504/AstroQuest-Frame.git
synced 2026-10-17 17:01:09 +02:00
On top of the shadps4-arm64 core imported in the previous commit: - PlayStation VR emulation: headset, tracker, reprojection, camera and social screen; the player's seat and view reset; head velocity for head-butts; field of view settings - Sound: a native Ngs2 engine (samplers, submixers, effects), the Audio3d spatializer, virtual surround for headset speakers, microphone pass-through; libSceJson2; libSceFiber on FEX - Fixes for CUSA12392 under emulation: real-time step, pace and resolution governor, larger render sizes on the PC, save loading at start - Renderer: geometry shaders fed with fans/polygons/loops, cube-array layers of light probes, sample-count mismatches on Adreno, timeline semaphore hang, FXAA in place of the MSAA resolve, sharpening, VR frame export - quest-host: the Quest app (OpenXR host that runs the glibc core as a child process, frames through AHardwareBuffers, DualSense mapping, hand-tracked controller placement, KGSL shim) - PC: in-process OpenXR host (Virtual Desktop or any OpenXR runtime), Touch controllers as the gamepad, launcher with a settings window; vendored OpenXR SDK 1.1.63 - Builds keep the build machine's folders out of the binaries (-ffile-prefix-map); machine settings (Python, headset serial, signing key) live in git-ignored tools/*.local files - tools: build, packaging and test scripts for Windows and the headset - README with installation, license (GPL-2.0-or-later), third-party notices and thanks No game files are part of the repository; .gitignore only lets listed paths in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
43 lines
1.6 KiB
Python
43 lines
1.6 KiB
Python
"""Cuts the same region out of several pictures and puts the cuts side by side, enlarged without
|
|
smoothing, to compare what a setting does to the picture.
|
|
|
|
python tools/crop.py <out.png> <x,y,w,h as fractions of the picture> <zoom> <picture> [<picture> ...]
|
|
|
|
A picture may be given as <label>=<path>. The region is in fractions (0..1) so that pictures of
|
|
different sizes show the same part of the scene; each cut is brought to the size of the first
|
|
picture's cut times the zoom (nearest neighbour for the first, so its pixels stay pixels, and for
|
|
the others too when their size is the same).
|
|
"""
|
|
import sys
|
|
|
|
from PIL import Image, ImageDraw
|
|
|
|
|
|
def main():
|
|
out = sys.argv[1]
|
|
fx, fy, fw, fh = (float(v) for v in sys.argv[2].split(','))
|
|
zoom = float(sys.argv[3])
|
|
cuts = []
|
|
size = None
|
|
for item in sys.argv[4:]:
|
|
label, _, path = item.rpartition('=')
|
|
picture = Image.open(path).convert('RGB')
|
|
w, h = picture.size
|
|
box = (round(fx * w), round(fy * h), round((fx + fw) * w), round((fy + fh) * h))
|
|
cut = picture.crop(box)
|
|
if size is None:
|
|
size = (round(cut.size[0] * zoom), round(cut.size[1] * zoom))
|
|
cut = cut.resize(size, Image.NEAREST)
|
|
cuts.append((label or path.split('/')[-1][:24], cut))
|
|
sheet = Image.new('RGB', (size[0] * len(cuts) + 4 * (len(cuts) - 1), size[1] + 18), 'black')
|
|
draw = ImageDraw.Draw(sheet)
|
|
for i, (label, cut) in enumerate(cuts):
|
|
x = i * (size[0] + 4)
|
|
sheet.paste(cut, (x, 18))
|
|
draw.text((x + 3, 3), label, fill='white')
|
|
sheet.save(out)
|
|
print(out, sheet.size)
|
|
|
|
|
|
main()
|