Thomas Harte
0c65385c82
Undoes older interpretation of alternating phase.
...
I now understand, hopefully, that it's only the phase of the second colour component that alternates. That has the pointwise effect of reversing the colour signal. Hence the effect of phase errors cancelling themselves out up on successive lines up to a point.
2018-06-14 18:24:32 -04:00
Thomas Harte
35e84ff1a8
Corrects NTSC quadrature phase.
2018-05-31 21:40:46 -04:00
Thomas Harte
7226d8d4f7
Eliminates all instances of µ.
2018-05-13 15:46:14 -04:00
Thomas Harte
0b771ce61a
Removes all instances of the copyright symbol.
2018-05-13 15:19:52 -04:00
Thomas Harte
1c605d58e3
Removes the CRT requirement for an integral relationship between cycles and samples.
2018-04-16 20:00:56 -04:00
Thomas Harte
705d53cc21
Picks a phase for the TMS empirically.
2018-03-03 13:53:00 -05:00
Thomas Harte
9cbd61e709
Replaces CRT quantity assert with test.
...
Primarily to handle television/composite target switches that can unsync the buffers.
2018-01-15 18:37:09 -05:00
Thomas Harte
5aef81cf24
Commutes cross-platform #pragma mark
s to //MARK:
s.
2017-11-12 15:59:11 -05:00
Thomas Harte
2e15fab651
Doubles down on <cX> over <X.h> for C includes, and usage of the namespace for those types and functions.
2017-11-11 15:28:40 -05:00
Thomas Harte
c0055a5a5f
Further builds up SConstruct, correcting many missed imports and a couple of improper uses of C99 in C++ code.
2017-11-09 22:04:49 -05:00
Thomas Harte
ad9df4bb90
Commutes uint8_t *
, uint16_t *
, uint32_t *
, size_t
, off_t
and long
to functional-style casts.
2017-10-21 22:30:15 -04:00
Thomas Harte
e983854e71
Converts all uint8_t
and uint16_t
casts to the functional style.
2017-10-21 21:50:53 -04:00
Thomas Harte
ec999446e8
Commutes int
and unsigned
casts to the functional style.
2017-10-21 21:00:40 -04:00
Thomas Harte
5e3e91373a
Switches all unsigned int
and double
casts to functional style.
2017-10-21 19:49:04 -04:00
Thomas Harte
ba5f668338
Ensured full CRT instance initialisation.
2017-10-17 22:34:10 -04:00
Thomas Harte
62eadbb51a
Adjusted gamma ratio to be the correct way around. The PAL midrange should be slightly darker now.
2017-08-10 15:36:27 -04:00
Thomas Harte
ad8c8166bc
Built in gamma conversion for all machines, assuming an output of 2.8 for PAL, 2.2 for NTSC.
2017-08-10 15:17:08 -04:00
Thomas Harte
55fd9122d0
Slightly relaxed vertical sync testing.
2017-07-30 21:19:42 -04:00
Thomas Harte
0bf4fdc9af
Simplified slightly.
2017-07-29 21:37:59 -04:00
Thomas Harte
ed8c73eb14
Ensured lengthy constant sync can't appear to be two sync pulses, regardless of other interruption.
2017-07-29 18:25:04 -04:00
Thomas Harte
3528a7f78b
Made an attempt at triggering vertical sync the expected number of time after it begins, regardless of total length.
2017-07-29 17:33:52 -04:00
Thomas Harte
54bcc40192
With an eye towards being more accurate as to vertical sync recognition: acknowledged that the detection period varies between PAL and NTSC.
2017-07-29 14:53:53 -04:00
Thomas Harte
be750ee427
Eliminated all dangling implicit signedness conversions.
2017-07-21 21:52:37 -04:00
Thomas Harte
5b4c5b0cbf
Avoided having two different variables named next_output_run.
2017-07-21 20:46:08 -04:00
Thomas Harte
8ccec37a4b
Eliminated a further potential cause of texture/geometry mismatch: the texture retain succeeded but then there wasn't room for geometry.
2017-07-09 19:11:38 -04:00
Thomas Harte
ee1a9a4781
Eliminates attempts cleverly to shuffle unsubmitted runs, because no mechanism exists to stop them overwriting previously-submitted-but-not-yet-flushed runs. Which implies that the buffer must be fully circular. The cost of which is sometimes having to make two calls to glTexSubImage2D
. Also added some TODOs, and a means for reporting when a retain_latest
is ineffective, in which situation it would be inappropriate to attempt to generate correlated geometry
2017-07-09 17:50:22 -04:00
Thomas Harte
12f7e1b804
Enshrined a default colour burst amplitude. Which now everybody relies on. The 102 figure is derived from the burst apparently being 40 IRE.
2017-07-07 23:35:14 -04:00
Thomas Harte
c7fa2ed11a
It makes more sense not to retain the previous texture builder run until vertex storage is confirmed.
2017-07-07 23:21:25 -04:00
Thomas Harte
bfbe12b94b
Made an attempt further to tie geometry and texture generation fully together, removing the assumption that the caller will achieve one-to-one calling.
2017-07-07 22:25:05 -04:00
Thomas Harte
ab1374f801
Added an assert on an assumed buffer size alignment.
2017-07-06 21:46:24 -04:00
Thomas Harte
4211389ac7
Connected machine-supplied colour burst amplitude to shader, discarding hard-coded value. Net effect: the colour component is now discarded for the ZX80 and 81.
2017-07-06 21:29:08 -04:00
Thomas Harte
a5075d9eb5
Formalised the reasoning behind the colour phase fix-up and made it an opt-in per-caller value. Only the Oric currently needs to opt in.
2017-05-16 20:31:39 -04:00
Thomas Harte
e01f3f06c8
Completed curly bracket movement.
2017-03-26 14:34:47 -04:00
Thomas Harte
e63229a5e5
Pulled vertical sync detection entirely outside the loop, and gave it greater perspective.
2017-03-06 19:15:33 -05:00
Thomas Harte
ad73379d1c
Took vertical sync detection logic entirely out of the loop.
2017-03-05 20:17:55 -05:00
Thomas Harte
4751615623
Fixed NTSC colour cycle count, and hence the 2600's reported line lengths and phase offset.
2017-03-04 17:31:39 -05:00
Thomas Harte
a3fcd15980
Loosened sync charge level requirement.
2017-03-01 22:16:56 -05:00
Thomas Harte
fcf8cafb5d
Sought to ensure that communicating a colour burst in multiple parts doesn't ruin the phase.
2017-02-06 18:27:44 -05:00
Thomas Harte
4d6e78e641
Reinstated temporary Oric-related fix.
2017-01-24 22:16:15 -05:00
Thomas Harte
d0a93409e6
Made an attempt to simplify in-shader phase calculation, now that output position is a direct multiple of phase.
2017-01-11 08:18:00 -05:00
Thomas Harte
4c3669f210
Reduced precision of input phase, but I'm not necessarily persuaded by it as a move. However it's clear that something is off in that whole area. But if phase is locked by output position, do I need to retain this level of complexity? Also ensured that intermediate buffers prior to the final are sampled using the nearest sampling mode, also to reduce precision errors.
2017-01-10 22:08:07 -05:00
Thomas Harte
d2a7d39749
Ensured the output lock isn't held while talking to the delegate.
2017-01-08 19:49:21 -05:00
Thomas Harte
5740015f56
Temporarily disabled composite processing to show the pure stream. Fixed both automatic calculations of phase — per line and, at input, per pixel.
2017-01-07 12:38:00 -05:00
Thomas Harte
c84004bfa3
Fixed: colour_cycle_numerator_ doesn't need to be multiplied by the time multiplier because it'll get that for free from the calculation of next_run_length.
2017-01-06 21:36:19 -05:00
Thomas Harte
a549fd1ecc
Introduced the ability simply to piggy-back off the CRT's natural phase for the colour burst, thereby eliminating a couple of redundant independent attempts in the Oric and Electron.
2016-12-10 13:42:34 -05:00
Thomas Harte
5216dda675
Added some brief extra exposition to the texture builder, cut all internal tex_x/y and source_divider stuff from the CRT.
2016-12-06 19:08:55 -05:00
Thomas Harte
4ff33254e1
Sought to shift locking back up to the CRT. And to be a bit more RAII-ish.
2016-12-06 18:48:30 -05:00
Thomas Harte
0fee8096c1
Made an attempt to shuffle the texture builder to a similar flush/submit pattern as the input builder. Don't care about thread safety yet, as it's obvious I'm going to need to move that back up to the CRT.
2016-12-06 07:24:07 -05:00
Thomas Harte
0edc043378
Started introducing an extra layer of indirection so as to be able to bind the texture builder to the same flush and submit patern as the array builder.
2016-12-03 20:47:19 -05:00
Thomas Harte
cb3c837e30
Simplified interface by baking in last-minute-only updates.
2016-12-03 18:19:12 -05:00
Thomas Harte
5bc165960a
Completed refactoring.
2016-11-20 09:12:06 +08:00
Thomas Harte
aca1fa0577
Returned some video output. Enough significantly to reduce my paranoia.
2016-11-17 13:37:53 +08:00
Thomas Harte
1f91d29434
Progressed to usage of an array builder and a texture builder up to the point of a successful build.
2016-11-17 12:26:04 +08:00
Thomas Harte
0f3b02edb7
Switched to postfix underscores and gave this class ownership of a texture builder and an array builder, though it presently uses neither.
2016-11-17 11:00:11 +08:00
Thomas Harte
6cb4950db4
Improved run-off area.
2016-11-16 11:53:15 +08:00
Thomas Harte
9ee11d7765
At the expense of API simplicity, at least for now, resolved the most glaring cause of dirty lines.
2016-11-16 11:34:05 +08:00
Thomas Harte
294adde344
Eliminated zoned clearing, in favour of a complete buffer clear on each load and attempted to reduce locking. But imperfectly.
2016-11-16 10:59:12 +08:00
Thomas Harte
c628b7c5c5
This is the real PAL frequency, I think.
2016-10-17 08:05:02 -04:00
Thomas Harte
2bd71e7e9b
.reset
is the more normal way to reassign a unique_ptr
.
2016-06-23 20:52:44 -04:00
Thomas Harte
c18cc4c8f5
It appears the Vic's output is sine-ish, after all. Also adjusted centre of display, simultaneously adding some validation on that.
2016-06-14 07:29:35 -04:00
Thomas Harte
6d65bc9b3a
Permitted a wider error window on vertical sync, tidied things up a little and started trying to move towards full implementation of the OpenGL contract.
2016-05-11 22:11:01 -04:00
Thomas Harte
4b3c4082d2
These functions appear correctly to model the NTSC and PAL palettes; the CRT's attempt to switch function doesn't work properly yet though.
2016-05-11 21:07:18 -04:00
Thomas Harte
b6d2c8cb63
Switched to instaced drawing for source[/intermediate] runs too, reducing that data transfer footprint by 50%.
2016-05-10 19:50:12 -04:00
Thomas Harte
7369139f7e
Realised that phase time can fit inside a single byte, since it's always (well) within the first quarter of the line — and if it somehow weren't (?) then taking it modulo the frequency would do.
2016-05-10 19:14:57 -04:00
Thomas Harte
257420b0f7
Fixed potential output error if buffer top were hit; clarified buffer size constants.
2016-05-10 19:04:03 -04:00
Thomas Harte
1d0bcb416d
Dropped the size per output run back down to 8 bytes.
2016-05-10 07:47:47 -04:00
Thomas Harte
86dab3a5d6
Quickest first attempt to switch to instancing for the output array. Texture coordinates seem to be off.
2016-05-10 07:23:47 -04:00
Thomas Harte
cec9ad0dc6
Switched to a more rational interface, ensured output_level
will work when eventually needed, and that neither it nor output_data
attempts a recursive lock.
2016-05-09 07:02:12 -04:00
Thomas Harte
a82fa31370
Switched back to broad locking for CRT updates. To eliminate one more thing.
2016-05-09 06:58:26 -04:00
Thomas Harte
47302de23a
Switched to simpler storage for _image
.
2016-05-08 21:11:56 -04:00
Thomas Harte
986019f9f9
Fixed error that could lead to split output run vertex writes.
2016-05-08 20:30:59 -04:00
Thomas Harte
9485ef2c8c
At last a genuine bug fixed: was nudging the wrong amount in intermediate shaders.
2016-05-08 16:07:36 -04:00
Thomas Harte
8e4ab37719
Things are back pretty much to where they were, but offset is eliminated as an input.
2016-05-07 18:37:18 -04:00
Thomas Harte
284b310074
Attempted to implement end-of-buffer tests for all stages.
2016-05-05 19:52:05 -04:00
Thomas Harte
87df57195d
Started on an attempt not to treat the various buffers as free to loop within, starting with the input texture.
2016-05-04 07:39:45 -04:00
Thomas Harte
2541711061
Made attempts (i) to flush buffers before unmapping them; and (ii) to bring texture uploads within the new orthodoxy.
2016-05-03 20:56:47 -04:00
Thomas Harte
fc1a67c157
Lateral is no longer written per vertex. It's a fixed list.
2016-05-03 18:45:55 -04:00
Thomas Harte
29e7c96e4c
Brought monitor mode inside the pipeline and added an intermediate filter.
2016-05-02 21:05:58 -04:00
Thomas Harte
501ab74eaf
Fixed time multiplier calculation.
2016-04-28 22:12:59 -04:00
Thomas Harte
ef3647f6cf
Being bold: per-scan timing isn't coming back, I think, so started completely removing it.
2016-04-27 23:00:43 -04:00
Thomas Harte
496d979aca
Made a decision to clean up by creating per-shader classes. Well, more or less. First thing to be factored out: the output shader.
2016-04-27 22:29:54 -04:00
Thomas Harte
416c944f02
Experimental: let's try accumulating history directly in the framebuffer.
2016-04-26 21:41:39 -04:00
Thomas Harte
6c567d166a
Fixed colour burst acceptance, switched to an integral single byte streaming of Atari colours.
2016-04-25 20:56:15 -04:00
Thomas Harte
9b64f64db7
Attempted to normalise some style decisions.`
2016-04-24 22:32:24 -04:00
Thomas Harte
082003ed0a
Reintroduced the CRT delegate and the 2600's automatic region switching. Albeit that the CRT itself doesn't adjust properly to new timings yet.
2016-04-24 18:36:22 -04:00
Thomas Harte
23ce032ba1
Started edging towards the necessary flexibility for the other two intermediate shaders.
2016-04-21 20:21:34 -04:00
Thomas Harte
4b9985626d
Started commuting alpha to direction. The incoming amplitude is now honoured.
2016-04-21 19:53:41 -04:00
Thomas Harte
8232ed765e
Eliminated use of zero-alpha runs to clear new lines in the intermediate buffer in favour of a scissored glClear. It's just an easier way to scale the current approach to three intermediate buffers.
2016-04-20 20:44:25 -04:00
Thomas Harte
cf55a0c423
Fixed: composite output y is now incremented upon the start of retrace, that causing it to have different values at either edge of scans.
2016-04-18 21:49:45 -04:00
Thomas Harte
d5bac2f04f
Spotted error was in texture target all along. This now gets as far as showing something a lot like the correct display, but precision is way off. Way off.
2016-04-18 21:32:48 -04:00
Thomas Harte
9ede284eb6
Added blanking source runs, ensuring the rolling buffer is appropriately cleared.
2016-04-17 20:34:52 -04:00
Thomas Harte
323f1a24db
Introduced blackout period solution to vertical sync confusing horizontal sync. Need to find out whether it's accurate.
2016-04-14 20:30:45 -04:00
Thomas Harte
d100c755b7
The final line runs on a diagonal. Leave room for that.
2016-04-11 23:13:14 -04:00
Thomas Harte
7276a06cc0
Added a helper to calculate a visible rect based on output timings, used it to scale the Electron output up to the full window size.
2016-04-11 21:47:23 -04:00
Thomas Harte
e45fe43801
Removed some dead caveman debugging.
2016-04-10 23:02:34 -04:00
Thomas Harte
bdb99ba92f
Corrections back towards composite output: fixed misnamed constant, ensured the CRT doesn't write nonsense to the output buffer, ensured it grows three vertices at a time rather than six when desired. Net effect should be that the output stage is working again, with the input processing remaining to fill in.
2016-04-10 22:56:52 -04:00
Thomas Harte
8701366277
Switched horizontal sync detection back to differential, switched the Electron to an XOR-style sync output (believed to be accurate, but I need to check), fixed some latent issues around vertical sync detection.
2016-04-10 21:34:40 -04:00
Thomas Harte
fc5530b513
Realising I've managed to confuse input and output, started shift to 'source' for what 'input' was.
2016-04-10 15:58:43 -04:00
Thomas Harte
c0cd1ed89e
Made an attempt to consolidate timestamp bases to a single vector and hence to lump all geometry into one or two calls, with no repetitive setting of a uniform. I'm not sure the result is correct yet.
2016-04-04 21:57:27 -04:00
Thomas Harte
aa8a192c7e
Simplified API down to their being a single texture with a specified depth.
2016-03-19 17:37:55 -04:00