Thomas Harte
c0c7818d5d
Reintroduces screenshots.
2020-09-14 20:33:05 -04:00
Thomas Harte
ceeadd6a33
Edges up towards reimplementing screenshots.
2020-09-13 22:30:17 -04:00
Thomas Harte
1a2545fdea
Excises dangling references to OpenGLView
, reinstates display link.
2020-09-13 22:11:51 -04:00
Thomas Harte
c5e9a74c88
Uses DisplayMetrics to disable supersampling when too slow.
2020-09-13 21:07:59 -04:00
Thomas Harte
d7972a7b86
Enforces across-the-board supersampling.
...
I'm damned if I can figure out how to talk an MTKView, or Metal in general, into supersampling so as a first effort this does it in software.
2020-09-13 19:30:26 -04:00
Thomas Harte
bcaceff378
Simplifies in-Metal transform logic, loading responsibility for setup onto the CPU.
...
I think I've also finally excised whatever order-of-operations issue I was having with regard to non-4:3 displays.
2020-09-10 20:32:58 -04:00
Thomas Harte
d7b405c6f8
Ensures direct luminance -> 'RGB' video doesn't go down the composition pipeline.
2020-09-10 13:20:40 -04:00
Thomas Harte
edf8cf4dc6
Completes the set of with/without gamma, and ensures correct alpha selection.
...
Also culls some other repetitive TODOs.
2020-09-09 19:28:38 -04:00
Thomas Harte
dfcc8e9822
Switches some of the interpolated fields to half precision.
2020-09-09 18:17:05 -04:00
Thomas Harte
016e96e6f8
Extends usage of half
. Possibly towards its conclusion.
2020-09-09 15:10:19 -04:00
Thomas Harte
e7ce03c418
Attempts to ensure initial finalised line texture state.
...
This was an attempt to remove the vertical line on the left of a composite display. Obviously the cause is not as suspected.
2020-09-09 13:15:21 -04:00
Thomas Harte
3d392dd81d
Completes conversion of composite & S-Video per-pixel processing to 16-bit floats.
2020-09-09 13:02:04 -04:00
Thomas Harte
42d810db7f
Switches per-pixel uniforms to halfs.
2020-09-09 10:53:09 -04:00
Thomas Harte
18571e8351
Also calculates a chroma kernel size, though it isn't used for anything yet.
2020-09-08 20:08:56 -04:00
Thomas Harte
dda1649ab7
Introduces smaller luma kernel functions where useable.
2020-09-08 19:55:37 -04:00
Thomas Harte
c82e0df071
Starts a transition towards half-precision arithmetic.
2020-09-08 19:37:36 -04:00
Thomas Harte
06b7ea5a6e
Strips the luma kernel back to 1d.
2020-09-08 19:15:19 -04:00
Thomas Harte
c49fcb9ec9
Based on further play: one box filter to separate luma/chroma, another to filter chroma, plus a FIR sharpen on luma.
2020-09-08 16:35:05 -04:00
Thomas Harte
0e44d6d214
Experiments with an all-box filter.
2020-09-08 16:19:08 -04:00
Thomas Harte
6adad7fbf5
Starts experimenting again with box filters.
2020-09-07 22:47:49 -04:00
Thomas Harte
de6ed7b615
Corrects phase-linked luminance support.
2020-09-07 20:53:28 -04:00
Thomas Harte
07dcb4dbb1
Starts reintroducing brightness, gamma and transparency for composite and S-Video pipelines.
2020-09-07 18:19:13 -04:00
Thomas Harte
e99896eadc
At least nominates alpha, gamma and brightness to metal.
2020-09-04 16:07:58 -04:00
Thomas Harte
489701afcb
Fixes window resizing.
2020-09-03 21:28:39 -04:00
Thomas Harte
55e576cc57
Ensures unpainted areas in composite displays have a non-asymptotic effect on luminance calculations.
2020-09-03 21:10:30 -04:00
Thomas Harte
6bd8ec9545
Alas, 1.0 seems to be the limit for proper artefact colour.
2020-09-03 20:53:45 -04:00
Thomas Harte
5cd8d86eef
Switches to dynamic generation of the 'sharpness' filter, correcting issues with the Apple II (amongst others).
2020-09-03 20:48:44 -04:00
Thomas Harte
74d0acdaec
Fixes non-RGB colour composite generation.
...
The hard-coded sharpen filter proves to be a really bad fit for the Apple II though.
2020-09-03 19:04:17 -04:00
Thomas Harte
0288a1974b
Tries: separate filters for chroma and luma, plus a post-separation sharpen filter on the latter.
2020-09-03 13:18:21 -04:00
Thomas Harte
6efd8782fe
Tweaks coefficients some more; makes sure that data is never larger than the intermediate buffers.
2020-09-02 20:14:41 -04:00
Thomas Harte
8bab9d5d60
Corrects S-Video and composite generation for RGB[1/2/4] sources.
...
Also toys with a double luminance filter in order to try to sharpen chrominance. But maybe I should be looking at other convolutions entirely?
2020-09-02 19:13:54 -04:00
Thomas Harte
7e58648743
Corrects front-running bug, plays further with colour amplitude.
2020-09-02 15:51:48 -04:00
Thomas Harte
0f0c3e616d
Tweaks some numbers.
...
I'm largely treading water here. Probably time to think about the race.
2020-09-02 08:17:01 -04:00
Thomas Harte
c7ce65ea4c
Attempts fully to restore composite video.
...
Subject to some sort of nasty race condition for the time being.
2020-09-02 08:03:10 -04:00
Thomas Harte
c36247b609
Ensures reuse of offset buffers.
...
There seems to be some sort of epic race condition as the drawing pipeline lags though. Will need to investigate.
2020-09-01 22:11:48 -04:00
Thomas Harte
15296e43a4
Attempts correctly to set up the CPU side of a composite video pipeline, at least.
...
So: I think this is really close, but I'm out of time for the day.
2020-09-01 21:58:33 -04:00
Thomas Harte
f2929230a2
[Experimentally] introduces blending between computed S-Video fragments.
2020-09-01 21:37:36 -04:00
Thomas Harte
bf252b8061
Fixes sizing of buffers to the current output.
2020-09-01 21:33:54 -04:00
Thomas Harte
9e2bf2af7e
Restricts S-Video processing to updated lines.
2020-09-01 21:27:40 -04:00
Thomas Harte
245f2654f0
Shifts S-Video processing into the compute shader.
2020-09-01 20:37:11 -04:00
Thomas Harte
67ca298a72
Forces a no-op compute shader into the S-Video pipeline.
...
The intention is to restrict the area acted over, and to do the S-Video filtering in there. Then I'll just need two such stages for composite.
2020-09-01 18:39:52 -04:00
Thomas Harte
67d4dbf91a
Starts girding for a third pipeline.
2020-08-31 20:01:59 -04:00
Thomas Harte
b344269140
I think I accept the need for intermediate steps now.
...
This allocates storage.
2020-08-30 20:21:01 -04:00
Thomas Harte
bb547610f2
Adds commentary, shrinks some intermediate texture sizes.
2020-08-30 12:06:29 -04:00
Thomas Harte
1e1f007bb7
Possibly convinces myself that no-separation chroma/luma isn't practical.
...
... as appealing as it may be, were filters perfect.
2020-08-29 21:25:49 -04:00
Thomas Harte
c40d858f02
Switches back to angular stuff at input resolution; ensures all S-Video modes work.
...
Now to roll back onto composite. Fingers crossed!
2020-08-29 20:54:46 -04:00
Thomas Harte
3d564d85fd
Proves that per-pixel sine/cos evaluation avoids phase issues.
...
Even in PAL mode. But I'd rather not _require_ this as it kind of negates directly-sampled input.
2020-08-29 18:53:37 -04:00
Thomas Harte
02cea40ffa
Attempts to avoid introducing phase error in scanToComposition.
...
Also brightens S-Video up to RGB levels.
2020-08-25 22:41:37 -04:00
Thomas Harte
e502d336db
Having decided that these things probably need to be separate, starts drilling down on S-Video.
2020-08-25 22:05:19 -04:00
Thomas Harte
807cb99f6d
Composite angles are signed.
2020-08-23 21:39:04 -04:00
Thomas Harte
7ca0362f23
Treads water.
...
Difficult current question: why does the Atari 2600's display change colours as the display tries to achieve horizontal lock? Phase should be unchanged. Ergo something is amiss.
2020-08-23 21:03:26 -04:00
Thomas Harte
56c7bd242a
Marginally tidies.
2020-08-22 16:38:36 -04:00
Thomas Harte
5c6112415a
Sets appropriate clear colour for composition render pass.
2020-08-21 22:41:54 -04:00
Thomas Harte
bf6a0c9fc4
Achieves a return of composite colour for RGB-producing machines.
2020-08-21 22:06:36 -04:00
Thomas Harte
d54b937ab6
Starts trying to do actual composite processing.
2020-08-21 21:11:25 -04:00
Thomas Harte
7c23c32e44
Corrects composition colour phase.
2020-08-20 20:45:45 -04:00
Thomas Harte
4e21d24b5f
Corrects composition colour amplitude.
2020-08-20 20:34:37 -04:00
Thomas Harte
ad6fb85fda
Corrects use of composition buffer.
...
Something is still very obviously amiss in colour processing somewhere down the line, but the correct forms are once again visibly in evidence.
2020-08-20 20:21:28 -04:00
Thomas Harte
5dc39a5d24
Adds the composition render pass.
...
Albeit that something here doesn't work at present.
2020-08-19 21:56:53 -04:00
Thomas Harte
3597f687de
Continues sidling towards composite & S-Video handling.
2020-08-19 21:20:06 -04:00
Thomas Harte
8811506adf
Starts towards building a compound[/composition?] buffer.
...
I now need to discover whether I can use natural integer texture coordinates.
2020-08-17 22:10:02 -04:00
Thomas Harte
11dec6fc0f
Avoids a redundant clear.
2020-08-17 22:09:15 -04:00
Thomas Harte
59c4c8233f
Generalises existing scanToDisplay
to add lineToDisplay
.
2020-08-17 21:15:19 -04:00
Thomas Harte
9da79d2d81
Clarifies scaling logic.
2020-08-17 20:29:46 -04:00
Thomas Harte
27e8a3a1b5
Obeys modals' zoom.
...
Subject to an attempt at factoring aspect ratio differences.
2020-08-16 21:11:43 -04:00
Thomas Harte
745797b596
Introduces a stencil buffer plus the inter-frame clearing it allows.
2020-08-16 16:42:32 -04:00
Thomas Harte
940e9e037e
Adds first_scan
to LineMetadata.
...
Also reorders `Line` fields to match `Scan` fields, just for visual consistency.
2020-08-16 08:59:37 -04:00
Thomas Harte
512c0079a9
Makes thread safe.
2020-08-15 21:52:55 -04:00
Thomas Harte
645c29f853
Adds an intermediate buffer to correct inter-frame smoothing.
...
Also goes someway back to the old scan output scheduling, albeit presently with limited thread safety.
2020-08-15 21:24:10 -04:00
Thomas Harte
e55945674d
Reduces main thread blocking.
2020-08-14 22:16:49 -04:00
Thomas Harte
7ac88536dd
Respects machine aspect ratio.
...
To an extent. Doesn't currently deal with cropping of machines when the window aspect ratio is smaller.
2020-08-14 21:24:25 -04:00
Thomas Harte
230b9fc9e6
Permits multiple simultaneous scan reading ranges.
...
Also updates the OpenGL scan target as per the latest movements of things.
2020-08-12 22:08:41 -04:00
Thomas Harte
27ca782cac
Enables blending; attempts to enable frame preservation.
...
The latter seems to be evidencing a double buffer at play. More investigation required.
On the plus side, the direct route is still well within GPU budget at 4k on my Core M. So a huge improvement there.
2020-08-12 19:34:07 -04:00
Thomas Harte
a136a00a2f
Takes a shot at adding RGB -> S-Video and composite conversion, for all RGB types.
2020-08-11 22:11:50 -04:00
Thomas Harte
4b55df1cb4
Starts upon a macro-oriented means of RGB input function generation.
2020-08-10 22:03:39 -04:00
Thomas Harte
8374a5e579
Adds superficially correct compositeSampleLuminance8Phase8
function.
...
Thereby uncovering a minor error in my decoding of colour phase.
2020-08-10 21:33:59 -04:00
Thomas Harte
525233e10b
Ensures all input data types are parseable in Metal.
...
Though now I need to think a bit more about the best way to compose signal-type conversions, and whether output-type calculations (i.e. gamma, brightness) are applied.
2020-08-10 19:47:47 -04:00
Thomas Harte
eadda6a967
Further strips OpenGL from the macOS target.
2020-08-09 22:17:27 -04:00
Thomas Harte
3d6590af89
Throws out a little more OpenGL.
2020-08-09 22:11:31 -04:00
Thomas Harte
28d933d5d6
Does just enough to get 8-bit RGB and 1-bit luminance machines to display.
...
Assuming an 'RGB' output.
2020-08-09 21:19:07 -04:00
Thomas Harte
a118594c8b
Hacks to make RGB1 visible (in a fashion).
2020-08-09 20:45:51 -04:00
Thomas Harte
93c6105442
Corrects calculation of dirty texture area.
2020-08-09 20:45:14 -04:00
Thomas Harte
57fecdc09e
Ties everything together in an attempt to display RGB scans.
...
I'm actually just getting a mess of pixels, but it's something!
2020-08-09 18:41:15 -04:00
Thomas Harte
f16ad8f71d
Takes a shot at submitting texture changes.
2020-08-09 17:59:52 -04:00
Thomas Harte
e340685a99
Seemingly proves that proper geometry is reaching Metal by drawing scans.
...
No in-buffer accumulation yet, but this is progress. If I can add accumulation and stencil clearing, I'm not doing badly.
2020-08-08 23:11:44 -04:00
Thomas Harte
df89a8771c
Makes an attempt to have the emulator fill the actual GPU buffers.
...
Not that they're drawn from correctly yet. I might first take a run at a new quick-path output route for emulated RGB displays, that just seeks to use the scans directly. No intermediate buffers. Besides probably being a good feature, it'll be a good way to ramp further up with Metal.
2020-08-08 22:49:02 -04:00
Thomas Harte
bdcf266e45
Having learnt a bit more: eliminates Metal attribute
tags, switches to more natural expression of structs.
...
Also thereby eliminates the need for a forced alignas(4) on various structs.
2020-08-08 17:27:32 -04:00
Thomas Harte
edf41b06fd
Eliminates the quad buffer.
...
Vertices can be adduced from vertex ID.
2020-08-08 17:12:49 -04:00
Thomas Harte
38960a08d6
Adds adjustment for display aspect ratio.
...
While also realising that I appear to be getting away without an MTLVertexDescriptor for Scans. Maybe OpenGL has prejudiced me, and they're actually optional for interleaved data?
2020-08-07 22:29:24 -04:00
Thomas Harte
fbda7aab23
Does just enough to get the correct (aspect ratio aside) output of scan outlines.
...
So, up next, can I start streaming these things?
2020-08-07 22:20:01 -04:00
Thomas Harte
c575aa0640
Adds a buffer for scans, and posts two test instances.
2020-08-07 22:03:54 -04:00
Thomas Harte
4421acef34
Gets some uniforms in on the action.
...
With some effort towards scans, but incompletely so.
2020-08-07 21:19:17 -04:00
Thomas Harte
219923bd63
Reduces vertex size, draws a quad.
2020-08-05 21:33:25 -04:00
Thomas Harte
7551782a25
Switches to interleaved vertex data.
...
This more closely relates to what I actually want to do.
2020-08-05 17:27:43 -04:00
Thomas Harte
eff24a8726
My first baby steps in Metal continue; here's a triangle.
2020-08-04 21:49:01 -04:00
Thomas Harte
72df6e52cd
This is possibly at least dispatching an empty command buffer correctly.
2020-08-04 19:44:56 -04:00
Thomas Harte
e235a45abb
Breaks all output.
...
... by switching out NSOpenGLView for MKLView with no drawing infrastructure yet in place.
2020-08-04 18:22:14 -04:00
Thomas Harte
478d081095
Ensures machines take user-friendly default settings.
2020-06-23 23:27:56 -04:00
Thomas Harte
c5cad865d7
Tidies up: arranges initialisers into alphabetical order, shortens some enum references.
2020-06-18 23:34:28 -04:00
Thomas Harte
327b9051c8
Adds necessary layouts for Apple II type selection.
2020-06-18 20:30:50 -04:00
Thomas Harte
48afc54af6
Cuts down unused parameter warnings to just a few that may well indicate implementation errors.
2020-05-30 01:06:43 -04:00
Thomas Harte
267006782f
Starts to add Qt target; resolves many build warnings.
2020-05-30 00:37:06 -04:00
Thomas Harte
f417fa82a4
Splits 'CRTMachine' into three parts: ScanProducer, AudioProducer, TimedMachine.
...
Simultaneously cleans up some of the naming conventions and tries to make things a bit more template-compatible.
2020-04-01 23:19:34 -04:00
Thomas Harte
0e502f6d5c
Ensures the macOS version retains volume.
2020-03-23 00:10:56 -04:00
Thomas Harte
bd1b4b8a9f
Increases volume fade-out speed.
2020-03-22 21:13:55 -04:00
Thomas Harte
38d81c394f
Switches OSAtomics to stdatomics. The former were deprecated by macOS 10.12.
2020-03-22 21:11:04 -04:00
Thomas Harte
72103a4adb
Corrects execution cap for splitAndSync ticks.
2020-03-22 19:25:02 -04:00
Thomas Harte
e6bae261c4
Ensures volume controls appear for mouse-capture machines when not capturing.
2020-03-22 19:06:38 -04:00
Thomas Harte
5edb0c0ee7
Adds animated fade-out to volume control. Bumps macOS version to 10.12.2.
2020-03-22 18:45:24 -04:00
Thomas Harte
442ce403f9
It's a bit jarring, but ensures volume control shows and hides according to mouse cursor.
2020-03-22 16:25:07 -04:00
Thomas Harte
7398cb44e2
Adds a functioning volume control for macOS, it just doesn't know how to hide yet.
2020-03-22 13:24:23 -04:00
Thomas Harte
0c689e85a5
Use screen number for spotting screen changes.
...
NSScreen implements Swift Equatable but doesn't seem officially to implement -isEqual:.
2020-03-21 17:01:57 -04:00
Thomas Harte
5a1bae8a9c
Ensures proper NSScreen comparison, and no never-ending setupDisplayLink loop on exit.
2020-03-20 23:00:16 -04:00
Thomas Harte
9995d776de
Attempts to fix the macOS version, plus some implicit type conversions.
2020-03-18 23:29:09 -04:00
Thomas Harte
f9c8470b20
Ensure targets always nominate a machine.
2020-03-15 00:13:38 -04:00
Thomas Harte
3c70f056ed
Ensure race condition workaround is applied for all CVDisplayLinkStops.
...
This also centralises the workaround, the better for replacing it when I discover a safer alternative.
2020-03-11 22:09:36 -04:00
Thomas Harte
f08d500fd6
Attempts to factor out the latest keyboard logic and hook it in from SDL also.
2020-03-03 22:58:15 -05:00
Thomas Harte
1f41d9c5f5
Further improvement: if in physical mode, but pressing an unrecognised key, attempt to 'type' it.
2020-03-02 22:08:54 -05:00
Thomas Harte
575d0da4d1
Attempts better to describe options.
2020-03-01 21:31:40 -05:00
Thomas Harte
ed18092088
Extends logic for when to fall back on standard keypress logic even in logical mode.
2020-03-01 20:25:12 -05:00
Thomas Harte
560394fead
Ensures keys without symbols are forwarded.
2020-02-29 22:37:15 -05:00
Thomas Harte
32b2026734
Alters shortcut.
2020-02-29 20:01:21 -05:00
Thomas Harte
d5e781e8e1
Adds macOS UI option to use logical keyboard input.
2020-02-29 18:30:58 -05:00
Thomas Harte
4572c86f0f
Adds a third keyboard input mode, which maps to posting things as a typer.
2020-02-29 18:17:39 -05:00
Thomas Harte
91e7400bbb
Avoids double-setting of the OpenGL view.
2020-02-18 22:33:16 -05:00
Thomas Harte
a8d082c7d2
Makes audioQueue atomic to avoid potential data race.
2020-02-18 22:31:24 -05:00
Thomas Harte
43740a4b2f
Adds support for stereo output.
2020-02-16 14:14:10 -05:00
Thomas Harte
f99d672237
The macOS port now selects stereo output if appropriate.
2020-02-16 14:05:50 -05:00
Thomas Harte
49b8e771b5
Adds the messaging that would allow a Speaker to output stereo, semantically.
2020-02-15 13:40:19 -05:00
Thomas Harte
e1892ff370
Resolves crash upon File -> New..., Cancel; also ensures slow performance can't equal no progression.
2020-02-14 23:16:44 -05:00
Thomas Harte
109d072cb6
Avoids trying to paper over huge gaps in running time. Also attempts to improve SDL shutdown reliability.
2020-02-12 23:47:04 -05:00
Thomas Harte
0b0a7e241b
Factors out the stuff of time warping.
2020-02-09 22:11:06 -05:00
Thomas Harte
2ea1e059a8
Softens swings in emulated machine speed.
2020-02-09 16:34:13 -05:00
Thomas Harte
dac217c98c
Defers starting the macOS audio queue, and attempts to restart it upon packet loss.
...
Hopefully forever to vanish permanent audio loss?
2020-02-08 22:08:27 -05:00
Thomas Harte
c26c8992ae
Reintroduces joystick support; eliminates CSBestEffortUpdater.
2020-02-08 21:27:04 -05:00
Thomas Harte
b76a5870b3
Moves drawing into the next timer tick after retrace if sync locked.
...
... which should mean it occurs within 1/600th of a second of announced retrace, which I assume always will be less than the retrace period. So: does the frame buffer update during retrace.
This should completely eliminate tearing for machines that can be synced to the native output rate.
2020-02-08 18:07:13 -05:00
Thomas Harte
7c0f3bb237
Gets to slightly adjusting execution speed and matching up respective vertical syncs.
...
I probably still need to move the ->draw inline.
2020-02-08 18:01:48 -05:00
Thomas Harte
f615d096ca
Switch to obtaining refresh periods ephemerally.
...
Which simplifies the necessary delegate protocol.
2020-02-08 15:03:18 -05:00
Thomas Harte
09132306e4
Removes two temporary debugging steps.
2020-02-06 23:35:23 -05:00
Thomas Harte
f95b07efea
Continues edging towards raster racing and/or time warping.
2020-02-06 23:35:03 -05:00
Thomas Harte
14d976eecb
Starts towards an implementation of time warping.
2020-02-04 23:08:54 -05:00
Thomas Harte
e1cbad0b6d
Ensures new displayLinkDelegates get a nudge with the initial display link.
2020-02-04 23:08:25 -05:00
Thomas Harte
e7410b8ed8
Uses objective clock for updates.
2020-02-04 22:24:54 -05:00
Thomas Harte
01fd1b1a2e
Pulls out ticks as a macro constant.
...
For playing.
2020-02-03 22:44:39 -05:00
Thomas Harte
96769c52f6
Prevents an endless queue of backlogged updates.
2020-02-03 22:08:07 -05:00
Thomas Harte
cf9729c74f
Takes a first shot at running OpenGL work throughout a frame.
...
Rather than en masse at the end. But it seems I've been lazy with my threading. Work to do!
2020-02-03 21:58:29 -05:00
Thomas Harte
0f2783075f
Moves responsibility for timed updates to CSMachine, which gives the CSHighPrecisionTimer a shot.
2020-02-02 21:39:20 -05:00
Thomas Harte
256f4a6679
Fixes -invalidate: cancel the dispatch source, don't just suspend it, and wait until that is done.
2020-02-02 21:29:22 -05:00
Thomas Harte
4766ec55fe
Documents units.
2020-01-28 23:23:51 -05:00
Thomas Harte
7316a3aa88
Merge branch 'master' into FinalOverride
2020-01-26 23:42:25 -05:00