Thomas Harte
207d462dbf
Attempts to provide an implementation of SVideo support.
2018-03-30 12:41:20 -04:00
Thomas Harte
33281b9d89
Introduces S-Video as a video signal type at the interface level.
2018-03-30 10:25:41 -04:00
Thomas Harte
3d0c832a21
Moves all LowpassSpeaker delegate calls outside of critical sections.
2018-03-22 19:01:20 -04:00
Thomas Harte
682c3d8079
Adds new hook for watching audio output rate changes.
2018-03-22 09:23:01 -04:00
Thomas Harte
48737a32a7
Introduces formal setting of the output volume to SampleSource
.
...
Previously every output device was making its own decision. Which is increasingly less sustainable due to the CompoundSource.
2018-03-09 13:23:18 -05:00
Thomas Harte
705d53cc21
Picks a phase for the TMS empirically.
2018-03-03 13:53:00 -05:00
Thomas Harte
3c5a8d9ff3
Adds Super Game Module support for the ColecoVision.
2018-03-03 13:08:33 -05:00
Thomas Harte
fc9e84c72e
Eliminates unsafe optimisation.
...
Also likely to be unhelpful as and when multiple machines are in play.
2018-02-18 22:09:27 -05:00
Thomas Harte
c8a4432c63
Makes an attempt to transfer audio outputs during dynamic analysis.
2018-02-18 15:23:15 -05:00
Thomas Harte
4e720d57b2
With debugging hooks still on display, makes first attempt at dynamic analysis.
2018-02-01 07:53:52 -05:00
Thomas Harte
c12aaea747
Attempts to get as far as running the MultiMachine.
...
In doing so, fixes the long-standing bug that machines that output audio but don't have a listener produce a divide by zero.
2018-01-30 22:23:06 -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
23c34a8c14
Corrects calculation of intermediate buffer width multiplier.
...
Specifically: I had failed to factor in that the multiplied-up input frequency might be less than than the full width of the bitmap.
The Atari and MSX in particular now look much better.
2018-01-15 16:52:40 -05:00
Thomas Harte
93ece2aec7
"Doubles" the bandwidth given to composite signals.
...
Because I suspect it may inadvertently have been halved previously. I'm investigating.
2018-01-14 20:44:53 -05:00
Thomas Harte
3e1d8ea082
Adds is_silent
to SampleSource
plus shortcut processing to CompoundSource
.
2018-01-06 18:50:26 -05:00
Thomas Harte
2d892da225
Introduces the MSX keyboard toggle sample source.
...
In support of which, it also introduces a means of sample source composition.
2017-12-19 21:08:10 -05:00
Thomas Harte
2dc1d4443e
Separates LowpassFilter and SampleSource.
2017-12-18 21:39:23 -05:00
Thomas Harte
ac80d10cd8
Separates the component parts of running an audio stream: task deferral, filtering and generation.
...
Walking towards improving opportunities for composition.
2017-12-17 21:26:06 -05:00
Thomas Harte
2008dec1ed
Adds exceptions for bad enumeration values.
2017-11-24 19:27:49 -05:00
Thomas Harte
b4f3c41aae
Formalises naming of shader inputs and related guarantees.
2017-11-24 18:45:24 -05:00
Matt Godbolt
bded406caa
Initialize all const
members.
...
Without this change, GCC versions >4.8 will error with things like:
```
./CLK/Outputs/CRT/Internals/CRTOpenGL.cpp:154:2:error: uninitialized const member
'Outputs::CRT::OpenGLOutputBuilder::draw_frame(unsigned int, unsigned int, bool)::RenderStage::target'
```
2017-11-24 12:09:10 -06:00
Thomas Harte
8ddc64c82a
Ensures well-defined default speaker clock rate values.
2017-11-21 21:18:58 -05:00
Thomas Harte
e9ddec35d6
Corrects intermediate shader attribute bindings.
2017-11-16 20:19:54 -05:00
Thomas Harte
f00f0353a6
Removes unnecessary temporaries.
2017-11-15 21:48:10 -05:00
Thomas Harte
0a9622435c
Merge branch 'StringStream' of github.com:TomHarte/CLK into StringStream
2017-11-15 21:30:04 -05:00
Thomas Harte
d0f096a20b
Substitutes std::osringstream for C-esque asprintf
.
2017-11-15 21:28:48 -05:00
Thomas Harte
949d0f3928
Substitutes std::osringstream for C-esque asprintf
.
2017-11-15 21:25:01 -05:00
Thomas Harte
fd96e3e657
Eliminates all unused #ifdef GL_NV_texture_barrier code.
2017-11-13 22:39:18 -05:00
Thomas Harte
88551607a6
Ensures the GL error flag is cleared after a potential error-raising call.
2017-11-13 22:31:41 -05:00
Thomas Harte
2a9dccff26
Fixes typo.
2017-11-13 22:28:11 -05:00
Thomas Harte
9bb9cb4a65
Adds a fallback route for the array builder if it can't map a buffer.
2017-11-13 22:27:04 -05:00
Thomas Harte
bf4ed57f68
Updates style of OpenGL::TextureTarget for instance variable names and preference for RAII.
2017-11-13 22:04:13 -05:00
Thomas Harte
70039d22f1
Allows a CRT machine owner to set the target frame buffer for OpenGL output, breaking the assumption that it'll be zero.
2017-11-12 19:29:22 -05:00
Thomas Harte
8713cfa613
Ensured all asprintf return values are checked.
2017-11-12 17:29:20 -05:00
Thomas Harte
aa77be1c10
Introduces missing include.
2017-11-12 17:20:37 -05:00
Thomas Harte
c827d14d97
Corrects various GCC warnings across the 6560, CPC, TIA, Oric video and elsewhere.
2017-11-12 17:17:27 -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
2e12370251
Resolves some of the dangling C-isms remaining in my FIR filter, and introduces filter composition.
2017-11-11 12:30:45 -05:00
Thomas Harte
cb0f58ab7a
Corrects order-of-initialisation errors in the CPC (again), TextureBuilder, TextureTarget, Z80, MFM parser and binary tape player.
2017-11-10 22:57:03 -05:00
Thomas Harte
fabaf4e607
Adds missing include files, corrects bad include paths and eliminates the Clang-specific __undefined
.
2017-11-10 21:56:53 -05:00
Thomas Harte
cb015c83e1
Eliminated C99-style struct initialisations.
2017-11-10 19:14:19 -05:00
Thomas Harte
2203499215
Enables -Wreorder and corrects a few of the more trivial fixes thereby suggested.
2017-11-09 22:14:22 -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
c45d4831ec
Introduces an SConstruct file and corrects those errors and warnings that arise in Ubuntu.
2017-11-08 22:36:41 -05:00
Thomas Harte
6e1d69581c
Eliminates a variety of end-of-line spaces.
2017-11-07 22:54:22 -05:00
Thomas Harte
512e877d06
Ensures proper initialisation of the delegate pointer.
2017-11-05 20:11:18 -05:00
Thomas Harte
218b976dbc
Adds through route for setting a texture bookender, and exploits it from the Electron.
2017-10-23 18:35:37 -04:00
Thomas Harte
513903890e
Corrects definition of Bookender
and provides the default implementation.
2017-10-22 17:24:41 -04:00
Thomas Harte
1157bde453
Sketches interface for a GPU data bookender, to avoid stray errors with packed pixel formats.
2017-10-22 10:48:10 -04:00
Thomas Harte
c13f8e5390
Corrects a couple of cast conversion errors.
2017-10-21 22:42:19 -04: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
b5b6219cb7
Slightly simplifies TextureBuilder arithmetic.
2017-10-19 22:02:00 -04:00
Thomas Harte
ba5f668338
Ensured full CRT instance initialisation.
2017-10-17 22:34:10 -04:00
Thomas Harte
ce78d9d12c
Introduces buffer alignment when writing to textures.
...
To avoid cross-boundary writes and hopefully to eke out a little better performance.
2017-10-17 22:09:48 -04:00
Thomas Harte
edbc60a3fb
Various undefined behaviour fixes.
...
Primarily around uninitialised variables, but also with an attempted use of a negative pointer.
2017-10-17 21:29:19 -04:00
Thomas Harte
c6e6c3fcfb
Resolves all current analyser warnings.
2017-08-24 22:18:44 -04:00
Thomas Harte
131b340d75
Dodges a lambda copy.
2017-08-22 21:55:10 -04:00
Thomas Harte
2d81acb82e
Upped C++ standard to C++14 and added an #if that's intended to use the built-in std::gcd when compiled on C++17 or better. Fixed for new signedness warnings resulting for taking the step to C++14.
2017-08-11 19:18:45 -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
633d8965e2
Removed accidental logging commit.
2017-08-02 07:38:14 -04:00
Thomas Harte
bda9441620
Made an attempt to clock the AY.
2017-08-02 07:20:59 -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
4abd62e62b
Standardises on const [Half]Cycles
as the thing called and returned, rather than const [Half]Cycles &
as it's explicitly defined to be only one int
in size, so using a reference is overly weighty.
2017-07-27 22:05:29 -04:00
Thomas Harte
8361756dc4
Switched definitively to the works-for-now approach of requiring an explicit opt-in where somebody wants to clock a whole-cycle receiver from a half-cycle clock.
2017-07-27 07:40:02 -04:00
Thomas Harte
75d67ee770
Relocated ClockReceiver.hpp as it's a dependency for parts of the static analyser, and therefore needs to be distinct from the actual emulation parts.
2017-07-25 20:20:55 -04:00
Thomas Harte
b7f88e8f61
Filter
is now a ClockReciever
, affecting all sound output devices.
2017-07-24 21:29:13 -04:00
Thomas Harte
92d1dd9a4a
Attempts to eliminate all remaining type variations.
2017-07-21 21:54:05 -04:00
Thomas Harte
be750ee427
Eliminated all dangling implicit signedness conversions.
2017-07-21 21:52:37 -04:00
Thomas Harte
449c33ee8b
Signedness fixes.
2017-07-21 21:28:04 -04:00
Thomas Harte
ef03c84b21
More definitively removed the old sample-offset blending approach to filtering.
2017-07-21 20:58:55 -04:00
Thomas Harte
5b4c5b0cbf
Avoided having two different variables named next_output_run.
2017-07-21 20:46:08 -04:00
Thomas Harte
279f4760d7
Eliminated buffer_size_
as something explicitly stored, and reduced size of delegate call out.
2017-07-16 15:01:39 -04:00
Thomas Harte
f931cd582d
Switched to use of std::vector
in those few remaining places where I was still using a unique_ptr
to a native type and new
ing for myself. So, some of my earliest bits of code.
2017-07-16 13:54:07 -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
a25c2fd6b5
Got more explicit about what the thinking is here re: multiple sources of action.
2017-07-09 17:54:26 -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
2f90f35478
Ensured the same write area can be submitted multiple times — this is actively used if a run of data overlaps a flywheel-suggested sync. Which nullifies the idea of not having a write area in the barrel, at least as soon as any one has been allocated.
2017-07-07 23:37:44 -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
344d267fd2
Introduced sharper chrominance for genuinely black-and-white signals.
2017-07-06 21:38:33 -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
c6d00ec7d1
Switched phase and amplitude varying to a 3d vector; the third component is 1/amplitude if amplitude is non-zero, and zero otherwise. So you can multiply by that to get chrominance, rather than dividing by amplitude. With the direct effect that detected chrominance should automatically be zero if the colour burst didn't exist (i.e. had zero amplitude).
2017-07-06 21:25:38 -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
c2b5a9bb1f
Minor fix: given that phase is now a function of position, stop nudging position.
2017-05-13 21:50:48 -04:00
Thomas Harte
b14c892740
Switched to a safer RAII approach to this lock.
2017-05-10 21:29: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
026b418b4a
Ensured filtered 1:1 audio resampling is applied.
2017-02-28 21:27:38 -05:00
Thomas Harte
d19f26887d
Performed a very naive shuffling of output builder sets onto the OpenGL queue. Which makes the frequency switcher work properly from it's possibly-contextless thread.
2017-02-20 10:39:31 -05:00
Thomas Harte
6cb95b4fc5
Switched to passing around std::string
s rather than char *
s, because they should be easier to capture.
2017-02-20 10:35:33 -05:00
Thomas Harte
d979a822ac
Introduced a deferred task list for the OpenGL thread.
2017-02-19 21:46:07 -05:00
Thomas Harte
fccdce65b9
Switched to lock guards.
2017-02-19 21:45:28 -05:00
Thomas Harte
97cdfea9e9
Resolved spurious static analyser complaint: input_size and output_size aren't supposed to have defined values if input or output is null. But whatever.
2017-02-11 13:36:09 -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
23f3ccd77a
Made a further attempt to prevent overwrites.
2017-02-05 17:47:34 -05:00
Thomas Harte
ebde955356
This needs to be a memmove
as the areas may overlap.
2017-01-29 16:12:48 -05:00
Thomas Harte
7fd02e7f4c
Added an extra flag to avoid potential race condition on is_full_, being reset from the background despite a write area not having been allocated.
2017-01-29 16:11:29 -05:00
Thomas Harte
c2d7e36c8f
Ensured logic for whether composite output is in use is consistent.
2017-01-25 21:25:03 -05:00
Thomas Harte
4d6e78e641
Reinstated temporary Oric-related fix.
2017-01-24 22:16:15 -05:00
Thomas Harte
5761c8267b
[Re-]Eliminated connection between colour subcarrier frequency and monitor output mode.
2017-01-24 20:48:54 -05:00
Thomas Harte
b4159295f6
Switched to using quads for intermediate draws. The specific concern is the flexibility offered in the GL spec as to line drawing algorithms. And even if a driver implements exactly to spec then it should omit the final pixel.
2017-01-11 21:18:41 -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
eeb646868b
Switched off filtering, at least temporarily, to try to ensure that sampling is all where it should be.
2017-01-08 19:53:08 -05:00
Thomas Harte
3d789732a2
Switched back to full buffer clearing. Until I can figure out the source of noise.
2017-01-08 19:50:31 -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
9521718120
Colour phase is multiplied by 255, not 256.
2017-01-08 17:21:26 -05:00
Thomas Harte
28909e33ca
Eliminated phaseCyclesPerTick as implied.
2017-01-08 16:48:02 -05:00
Thomas Harte
79632b1d34
Instituted de-escalating phase-related extensions, definitively to kill rounding error edges.
2017-01-08 16:24:22 -05:00
Thomas Harte
7ad64ff16b
Made further efforts to support throughput via memory barrier.
2017-01-08 14:47:16 -05:00
Thomas Harte
be48c950b4
Started taking steps towards using a texture barrier where possible to reduce all of my framebuffer binds. Some output appears, but it's not correct.
2017-01-08 11:13:20 -05:00
Thomas Harte
0487b8c178
Definitively eliminated the additional y filtering step; if I'm going to work to ensure always four samples per colour cycle, I can put the channel separation coefficients directly into their shaders, cutting down on samples.
2017-01-07 16:02:33 -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
c746a3711f
Temporarily disabled my attempt to be clever with bilinear filtering when applying a lowpass filter. Will need to investigate.
2017-01-04 08:06:18 -05:00
Thomas Harte
aa7774a9a6
Experimental: up the chroma accuracy, just let the luma go straight through. Subject to figuring out how I'm still losing so much precision.
2017-01-03 22:41:34 -05:00
Thomas Harte
a836120945
Restored proper colour separation, but somewhere a massive hit in horizontal resolution is happening — much greater than one would expect from the sample size picked. So investigation to come.
2017-01-03 22:32:07 -05:00
Thomas Harte
7d60df9075
Added the option for both intermediate and output shaders to use only a portion of the input/output texture; made an attempt to pick an appropriate proportion in order to align signal sampling with the colour subcarrier.
2017-01-03 22:16:52 -05:00
Thomas Harte
f2b8b26bc4
Started throwing some comments into my shaders.
2017-01-03 21:16:38 -05:00
Thomas Harte
34d213dec4
Decreased Y resolution, again also hopefully temporarily.
2016-12-10 15:35:38 -05:00
Thomas Harte
81a102d951
Upped intermediate buffer size, at least temporarily, while I look for the source of the interference patterns I'm seeing.
2016-12-10 15:20:10 -05:00
Thomas Harte
0e71802b92
Reduced Oric video to single nibble constants. Removed attempt at asynchronous flush as no longer required.
2016-12-10 14:17:46 -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
33d52bb573
Ensured no over-moving.
2016-12-06 19:02:18 -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
60f9ddfde8
Fixed start test and added incrementation of start locations.
2016-12-06 08:08:57 -05:00
Thomas Harte
f388ba11cc
Missed an initialisation. Fixed!
2016-12-06 07:26:23 -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
0220d33562
Resolved failure of initial state setting, which was causing tests sometimes to fail.
2016-12-03 16:42:10 -05:00
Thomas Harte
c5016a3eaa
Completed flight of 'Outputs' to postfix underscores.
2016-12-03 11:02:34 -05:00
Thomas Harte
7c85cb62e4
Moved underscores, removed indirections where they're not necessary, converted those names that were still looking very Objective-C and moved the GL fence variable into the private area, where it should always have been.
2016-11-21 12:14:52 +08:00
Thomas Harte
bc03e12dc5
Switched to suffix underscores.
2016-11-21 11:57:45 +08:00
Thomas Harte
340607e13e
Switched the flywheel to suffix underscores.
2016-11-21 11:48:31 +08:00
Thomas Harte
e1285028aa
Removed a redundant clear and some dead code.
2016-11-21 11:42:45 +08:00
Thomas Harte
7b38247ab3
Updated outdated comments.
2016-11-21 11:40:13 +08:00
Thomas Harte
d7d0ed378a
Only the final intermediate buffer needs clearing, on reflection.
2016-11-21 11:26:07 +08:00
Thomas Harte
c89345c639
Reduced buffer size.
2016-11-21 11:21:14 +08:00
Thomas Harte
32dbfe947d
With hindsight, the elimination of this might have been overzealous.
2016-11-20 10:53:35 +08:00
Thomas Harte
ef0367d4a4
Corrected typo.
2016-11-20 09:12:43 +08:00
Thomas Harte
5bc165960a
Completed refactoring.
2016-11-20 09:12:06 +08:00
Thomas Harte
fda90c5aef
Documented.
2016-11-20 09:11:24 +08:00
Thomas Harte
c2349ee3f4
This thing has clearly becoma a real class.
2016-11-19 20:12:40 +08:00
Thomas Harte
7857ef774f
Ensured resets genuinely kill outstanding data.
2016-11-19 20:09:38 +08:00
Thomas Harte
a4c7b00ecd
Fixed code that was causing the failing test.
2016-11-19 19:55:30 +08:00
Thomas Harte
f59537bce9
Added a testing hook, but as of yet no tests.
2016-11-17 14:06:16 +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
57f0648742
Fleshed out first implementation of ArrayBuilder
, albeit that I need to implement exhaustion properly, as soon as I think of a sensible way to handle synchronisation.
2016-11-17 10:39:30 +08:00
Thomas Harte
324a1de43d
Started pulling out array construction as a separate task.
2016-11-17 09:20:49 +08:00
Thomas Harte
c04a116a05
Fixed comment.
2016-11-16 23:14:56 +08:00
Thomas Harte
edeafd4d94
Wait, OpenGL textures go the other way.
2016-11-16 23:14:15 +08:00
Thomas Harte
6ac20e0066
Pushed responsibility for submitting texture contents up to the texture builder, simplifying the interface.
2016-11-16 23:13:06 +08:00
Thomas Harte
5c5e44874f
Even better: why include the 'Input' prefix when there's only one?
2016-11-16 22:57:17 +08:00
Thomas Harte
04b2688683
Attempted to reduce allocations.
2016-11-16 13:25:50 +08:00
Thomas Harte
c1a509910d
Documented this interface, albeit that the English could do with a second pass, and very sightly simplified inline with current usage.
2016-11-16 13:15:50 +08:00
Thomas Harte
4d0d5eb919
Renamed the 'input buffer builder' to the 'input texture builder' to be explicit about what sort of buffer, and killed the prefix since it's namespaced. Also switched to std::vector
.
2016-11-16 12:31:32 +08:00
Thomas Harte
4ee4400801
Removed dead code.
2016-11-16 11:57:22 +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
44d3fd6d5b
Fixed mistimed reset of the target output line. Now all that's left is occasional noise.
2016-11-16 11:22:12 +08:00
Thomas Harte
7a737e0790
Both pathways start with a buffer that clears to black. So no need to keep going on about it.
2016-11-16 11:12:08 +08:00
Thomas Harte
f63e849092
Sought completely to eliminate the outgoing concept of 'clearing zones'.
2016-11-16 11:10:34 +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
ccedb6bea6
Introduced an intermediate buffer that collects lines before flushing them to the output buffer.
2016-11-16 10:49:18 +08:00
Thomas Harte
ba2adf8bb1
Normalised on std::vector
rather than std::unique_ptr<uint8_t *>
as (probably?) more idiomatic. Improved structure slightly. Introduced a container for line data, albeit one that isn't yet used.
2016-11-16 10:34:54 +08:00
Thomas Harte
9c550c594a
Moved audio work back into its own thread, but this time it queues up an all happens only upon a flush. Hopefully to resolve synchronisation cost concerns.
2016-11-09 21:17:50 -05:00
Thomas Harte
eccfdabeab
Temporarily disabled thread hop, until I can find a way to batch these things.
2016-11-03 22:52:02 -04:00
Thomas Harte
4258401384
Implemented flush
, added a call to it from the filter speaker's destructor, to ensure no race conditions on accessing the various bits of instance state there and below.
2016-10-19 21:15:04 -04:00
Thomas Harte
c628b7c5c5
This is the real PAL frequency, I think.
2016-10-17 08:05:02 -04:00
Thomas Harte
1f857c619b
Fixed timing issues. Static box of frame achieved!
2016-10-12 21:42:36 -04:00
Thomas Harte
00e3ad9b04
Added a bit more ceiling for lowpass filtering on constrained machines.
2016-10-10 07:51:01 -04:00
Thomas Harte
e53455a936
Not having read the C++ synchronisation primitives before, this async task queue is probably incorrect. But nevertheless, let's have a quick go at employing it — in a hideously thread unsafe fashion — for audio generation. What can possibly go wrong?
2016-10-07 16:56:34 -04:00
Thomas Harte
dab3580111
Experimental: can I afford a lower sampling rate if there's a low-pass filter in effect?
2016-08-22 22:18:05 -04:00
Thomas Harte
1541273785
Moved responsibility for throwing in a low-pass filter up to the Vic, appropriately.
2016-08-21 18:13:31 -04:00
Thomas Harte
c783090980
It turns out that the Vic has a 1.6Khz low-pass filter. So added that.
2016-08-21 12:13:41 -04:00
Thomas Harte
fef316932f
Moved opening bracket appropriately.
2016-07-04 21:14:28 -04:00
Thomas Harte
8db44eed3e
Added a default implementation of Speaker::skip_samples
.
2016-07-04 20:48:27 -04:00
Thomas Harte
2bc87ee095
Merge branch 'master' of github.com:TomHarte/CLK
2016-07-01 16:28:18 -04:00
Thomas Harte
eefd0c17b6
Actually, I guess that to fulfil the contract I can't silently decide not to draw if I'm being told I definitely need to draw.
2016-07-01 16:27:45 -04:00
Thomas Harte
ed8f4d0476
Added some minor additional bits of documentation.
2016-06-30 08:46:29 -04:00
Thomas Harte
4ac619f569
glClientWaitSync
appears to be a busy wait, at least on my machine. But why wait indefinitely anyway?
2016-06-29 21:32:47 -04:00
Thomas Harte
ff53accca0
Demonstrated that issue is coloured borders, made a guess as to buffer exhaustion, upped limits as a temporary fix.
2016-06-29 21:16:34 -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
fcf4b14344
Extended to allow floating-point sampling rates. Which makes sense.
2016-06-13 19:30:41 -04:00
Thomas Harte
2992183aae
Switched to a lookup table for phase, temporarily in YUV colour space, probably. Working on it.
2016-06-12 14:39:17 -04:00
Thomas Harte
68a8851c52
Increased parallelism, allowing a simplification in the GL view.
2016-06-02 22:29:09 -04:00
Thomas Harte
1e0fcbbee8
Made a very basic stab at a couple of the tone generators, added straight-through path for the speaker when input rate exactly equals output rate.
2016-06-01 19:53:16 -04:00
Thomas Harte
5c4f35e13f
Finally started on generalising the C++ stuff so as to be able to be able to get a working audio binding on the OS-specific side without further repetition by factoring an appropriate protocol out from the Electron and sketching out the correct speaker class for the Atari. Added a method to ask it what a good output frequency would be.
2016-05-31 21:23:44 -04:00
Thomas Harte
4ad074fc78
Introduced a four-cycle delay between playfield fetch and display, curing Yar's Revenge. Also disabled barrel roll scanling colouring again. I really need to make my mind up on that.
2016-05-16 19:55:56 -04:00
Thomas Harte
9d92ad659f
Established the basic timing loop, albeit without clocking delays yet.
2016-05-16 08:01:29 -04:00
Thomas Harte
00a2b42080
Made thread-safe.
2016-05-15 15:19:52 -04:00
Thomas Harte
091516e3cb
The semantics might need better exposition but: fixed UniformXfv
calls plus matrix calls, documented new semantics on all setters.
2016-05-15 14:59:59 -04:00
Thomas Harte
328fabcd10
Ensured values
aren't dangling pointers.
2016-05-14 18:15:10 -04:00
Thomas Harte
492dc7ccbf
Made an attempt to queue uniform changes until the next call to bind
. That's to allow usage from other threads.
2016-05-14 18:06:55 -04:00
Thomas Harte
30f335fa35
Switched pervasively to using the named slot uniform setters on Shader
.
2016-05-13 22:08:32 -04:00
Thomas Harte
8d52765f40
Realised why new shaders weren't taking. Very negligibly decreased Atari drawing cost.
2016-05-12 22:22:24 -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
a8ce021136
Fixed comment.
2016-05-10 19:59:03 -04:00
Thomas Harte
0d2d6a452d
Fixed some dangling buffer management issues.
2016-05-10 19:55:34 -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
47ae402f7e
Introduced a shorthand for setting up array attributes.
2016-05-10 19:11:48 -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
309313c470
Update CRTConstants.hpp
...
Lack of data duplication means this storage can be smaller.
2016-05-10 10:49:48 -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
b0f0315f12
Fixed: this now implements 12-byte instancing for output runs.
2016-05-10 07:30:12 -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
daec21d3d8
Found and fixed off-by-one error. Display should now be completely fixed.
2016-05-09 21:14:59 -04:00
Thomas Harte
59d766b325
Rationalised buffer sizes.
2016-05-09 19:17:03 -04:00
Thomas Harte
7e2bd78891
With an eye towards instancing, moved away from circular buffers.
2016-05-09 19:14:30 -04:00
Thomas Harte
ad734f341f
Attempted fully to perfect memove
, albeit that it's not affecting either current machine.
2016-05-09 07:44:05 -04:00
Thomas Harte
8eb058064c
Fixed: ensured that the attempt to plot a misplaced write occurs correctly.
2016-05-09 07:42:26 -04:00
Thomas Harte
e6a7161e87
Made some minor corrections on the copyback of misplaced write data.
2016-05-09 07:39:57 -04:00
Thomas Harte
45af963b9a
Moved more of the circular logic inside getCircularRanges
in order to eliminate one more potential source of error.
2016-05-09 07:34:37 -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
1f02c5df88
Tidied up some further loose ends.
2016-05-08 20:58:18 -04:00
Thomas Harte
7b5982e455
Removed last mentions of 'lateral'.
2016-05-08 20:51:28 -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
1a214a8308
Fence sync tied up. Remaining glitches are likely off-by-one-type errors but we'll see.
2016-05-08 19:45:36 -04:00
Thomas Harte
ef3b91d3aa
Made an attempt to get formal on synchronisation.
2016-05-08 19:42:33 -04:00
Thomas Harte
dd469fe83a
Switched back to normal frame drawing logic and cleaned up the circular range stuff a little, to make it clear that no errors lie there.
2016-05-08 18:50:30 -04:00
Thomas Harte
ccdbec3ffc
Corrected for potential lost lines.
2016-05-08 16:43:11 -04:00
Thomas Harte
a75259ce9f
Removed some dead caveman debugging statements.
2016-05-08 16:18:42 -04:00
Thomas Harte
9b2061be98
Actually, that should probably be 1/outputTextureSize, as the output range is -1 to +1.
2016-05-08 16:09:39 -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
c73751b15a
Reverted deliberately broken segments to produce something mergeable.
2016-05-05 21:27:13 -04:00
Thomas Harte
a74f081aa9
Put lateral lookup table directly into the shader.
2016-05-05 21:21:27 -04:00
Thomas Harte
8284b272ad
Picked appropriate new-world values for various buffers.
2016-05-05 20:00:28 -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
e9a9cfb09f
Fixed off-by-one error on texture upload.
2016-05-05 07:22:49 -04:00
Thomas Harte
f621cc8523
Withdrew the pixel unpack buffer in order to avoid the potential for a paused machine to be undrawable. The cost is at least an extra memcpy per frame; I'm letting the driver worry about the whole process for now.
2016-05-04 21:27:10 -04:00
Thomas Harte
2e7ac0e6db
With a lot of logging also currently ongoing, fixed circular ranges for clearing and when covering an entire buffer.
2016-05-04 21:08:38 -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
3684c6404f
Proven through deliberate inefficiency: the issues are (i) texture upload; and (ii) buffer wraparound.
2016-05-03 22:22:12 -04:00
Thomas Harte
759fbd89ca
Switched pixel unpack buffer back to explicit flushes.
2016-05-03 21:26:09 -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
535d272039
Tweaks here, tweaks there.
2016-05-03 18:15:24 -04:00
Thomas Harte
6d5a1b33ee
Turned the colour up just a little, slightly lowered luminance signal strength.
2016-05-03 07:51:14 -04:00
Thomas Harte
31f1e6d5c0
Introduced a separate stage for luminance filtering.
2016-05-03 07:46:40 -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
4a0e1dc789
Switched to explicit flushing of data.
2016-05-01 22:33:00 -04:00
Thomas Harte
c93bcf9f28
Discovered cause of clears: stale code. Tweaked persistence, again.
2016-05-01 22:28:33 -04:00
Thomas Harte
09ed8eb654
Quelle surprise, failure to find strikes again. Fixed.
2016-05-01 21:07:27 -04:00
Thomas Harte
1b6754c5f8
Shuffled code, realised I wasn't actually binding my shader.
2016-05-01 19:22:24 -04:00
Thomas Harte
69984b54e5
Fixed aspect ratio storage. Adjusted indentation slightly.
2016-05-01 16:49:44 -04:00
Thomas Harte
6982e945fb
Fixed those issues breaking GL state, I hope.
2016-05-01 16:17:52 -04:00
Thomas Harte
4ec4cceb84
Made a first attempt at adding draw-as-a-quad functionality to texture targets.
2016-05-01 13:52:35 -04:00
Thomas Harte
2616d748fe
Introduced bind-if-necessary/unbind semantics for shaders.
2016-05-01 11:07:49 -04:00
Thomas Harte
fe2abbd4ed
Minor adjustments to ensure sampling occurs as intended.
2016-04-30 20:48:09 -04:00
Thomas Harte
16ef09fc2b
Made an attempt intelligently to use bilinear filtering to increase filtering quality with the same number of samples.
2016-04-29 18:37:35 -04:00
Thomas Harte
501ab74eaf
Fixed time multiplier calculation.
2016-04-28 22:12:59 -04:00
Thomas Harte
23ea832f41
Increased brightness in television mode, added a clear if screen resolution changes.
2016-04-28 22:04:47 -04:00
Thomas Harte
3638414b37
Added additional comments.
2016-04-28 21:55:14 -04:00
Thomas Harte
e6c3b148ac
Switched wholeheartedly to the new shader.
2016-04-28 21:45:44 -04:00
Thomas Harte
8538b62ea2
Made an attempt to extract and consolidate the logic behind the intermediate shaders.
2016-04-28 21:04: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
87c778ebb7
Fixed code use of parameter name.
2016-04-27 22:58:53 -04:00
Thomas Harte
494ef6a324
Updated documentation, taking the opportunity to improve a parameter name.
2016-04-27 22:57:40 -04:00
Thomas Harte
7c20fce467
I guess NumberOfFields is done for.
2016-04-27 22:48:37 -04:00
Thomas Harte
8849dc3265
Finished consolidation into OutputShader. With its documentation yet to update.
2016-04-27 22:41:32 -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
f6d58f1ce7
Played in the margins with image retention.
2016-04-26 22:14:12 -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
884755c560
Ensured the GL context is available when switching Atari 2600 output, and that it locks the output.
2016-04-24 20:56:21 -04:00
Thomas Harte
2bd6566768
Oh, of course, I can use GL_CONSTANT_ALPHA so that new colours can be painted at alpha 1.0 while possibly saturating with old colours.
2016-04-24 20:47:24 -04:00
Thomas Harte
d221c712b0
Ensured GL context is active when destructing CRTOpenGL.
2016-04-24 20:34:25 -04:00
Thomas Harte
acab22d95a
Removed any improper talk of YUV. Switched to (cos, -sin) formulation of the quadrature vector, which I now believe to be correct.
2016-04-24 20:27:03 -04:00
Thomas Harte
d393776677
Fixed an incorrect sign.
2016-04-24 19:29:30 -04:00
Thomas Harte
9b2b7a09eb
Ensured that colour space changes take effect.
2016-04-24 19:16:23 -04:00
Thomas Harte
929cfc49cb
Extended window for picking output frequency, attempted to consolidate CRT OpenGL timing uniforms for approprate resetting.
2016-04-24 18:58:31 -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
d0f9a6c2f5
Added a dump-the-input default RGB output shader. Which at least proves that the Atari 2600 is generally still working.
2016-04-24 17:35:25 -04:00
Thomas Harte
775fc270e6
Fixed bug whereby first frame drawn has random collection of data.
2016-04-24 07:00:22 -04:00
Thomas Harte
80a3169674
Started reviving the Atari 2600 emulation. Put new startup sequence into place.
2016-04-24 06:56:08 -04:00
Thomas Harte
bdaf4cee43
Switched to an in-framebuffer approach to phosphor decay, which might be acceptable now that every single pixel is being painted, re-emphasises luminance and stretched sampling period for the two FIR filters as well as decreasing the amount of signal that is retained, subjectively to improve output.
2016-04-24 06:16:41 -04:00
Thomas Harte
c123f3bf74
Fixed run extension, temporarily forced colour amplitude.
2016-04-23 14:16:49 -04:00
Thomas Harte
a4889074b8
Moved final colour space conversion out of the innermost loop.
2016-04-22 21:29:27 -04:00
Thomas Harte
8ff1f82008
Fixed accidental channel duplication.
2016-04-22 19:18:28 -04:00
Thomas Harte
95639f1189
Made attempt to introduce final filtering stage and output.
2016-04-22 19:15:59 -04:00
Thomas Harte
23311d633b
Doubled phosphor life, added comment on required final stage fix for tomorrow.
2016-04-21 23:15:48 -04:00
Thomas Harte
59c07f7ddd
This, at least, is an attempt to decode chrominance, as yet unfiltered, and not commuted to RGB (and possibly packed incorrectly).
2016-04-21 23:01:54 -04:00
Thomas Harte
cc7bf97a9c
This now attempts to filter y.
2016-04-21 22:32:30 -04:00
Thomas Harte
e7ed1224a5
Introduced the second filtering stage, albeit that it presently does nothing whatsoever.
2016-04-21 21:32:36 -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
638b08302b
The initial composite buffer is now genuinely a composite signal.
2016-04-21 19:37:32 -04:00
Thomas Harte
d9a9dffe63
Factored out wraparound buffer addressing where it's otherwise going to get really repetitive; need to look at using the same approach for the glTexSubImage2D step at least but that probably means properly encapsulating the buffer builder's state.
2016-04-20 21:05:32 -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
e2da77fb8b
Clarified constants, ensured monitor mode works from startup.
2016-04-19 22:53:39 -04:00
Thomas Harte
ef83595af3
Fixed: issue was (i) always thinking the entire source run buffer needed to be issued; and (ii) having fixed that, always thinking that the block that needs redrawing doesn't overflow the buffer. Fixed both. 'Television' mode is now working without explicit synchronisation (and with a lot less work).
2016-04-19 22:38:11 -04:00
Thomas Harte
3d7a3ce995
Eliminated some redundant texture binds.
2016-04-19 22:30:05 -04:00
Thomas Harte
145c0b3b71
Smoothed output device changes, killing some dead state. Added an explicit glFinish to suggest that the problem is synchronisation rather than any sort of data or shader error.
2016-04-19 22:21:26 -04:00
Thomas Harte
66f2c10c04
Resolved potential crash if tape requests are made without one inserted. Softened glFinish to glFlush, though I'm still not sure I should strictly need even that.
2016-04-19 21:00:48 -04:00
Thomas Harte
88e237b8de
Standardised indentation and added one extra piece of documentation.
2016-04-19 20:53:55 -04:00
Thomas Harte
20aa9e291d
Attempted to deal with the precision issues causing 'television' output currently to differ from 'monitor' output. Documented TextureTarget while I'm here.
2016-04-19 20:51:34 -04:00
Thomas Harte
6f52ed14d6
Trivially fixed. Appears to confirm an off-by-one error in the television implementation. Which would explain one of the visual phenomena — a repeating corrupted line.
2016-04-19 19:32:52 -04:00
Thomas Harte
b90a487a16
Attempted to enable both monitor and television output paths in the same codebase. The television route seems to be broken. Investigation required.
2016-04-19 19:30:50 -04:00
Thomas Harte
6c9bcfa637
Got rigorous on exceptions, started working towards having a working 'composite' shader at the same time as having a working RGB shader.
2016-04-19 08:05:43 -04:00
Thomas Harte
bcc784bda9
Introduced an interface for specifying attribute bindings, taking the opportunity to document the interface and introduce exceptions.
2016-04-19 07:23:15 -04:00
Thomas Harte
9d39c14752
Nothing of substance different; main current mystery: why do old frames recur and why does other jumpiness occur? Do I need some explicit synchronistion?
2016-04-18 22:18:03 -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
9580dde3ad
Fixed left/right shuffling. Was simply failing to supply the integer version of coordinates.
2016-04-18 21:40:23 -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
bf29c8e2bf
Fixed mismatch in television/monitor selection, ticked view for drawing concurrently, since it can, removed stray space.
2016-04-18 19:01:15 -04:00
Thomas Harte
5980f5e991
Number of taps can be specified explicitly if you desire.
2016-04-17 20:45:57 -04:00
Thomas Harte
499f7ace07
Re-enabled working video output for the Electron for the day and consolidated the rough metric I'm using to pick a number of taps for the audio filter.
2016-04-17 20:43:20 -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
43cae267f9
Shuffled further in an attempt to get as far as having static but incorrectly-interpreted pixel data on screen. It's not currently static. So work to do.
2016-04-17 18:08:05 -04:00
Thomas Harte
a8fbd82a3d
Made an attempt at correctly mapping to eye coordinates.
2016-04-17 17:21:24 -04:00
Thomas Harte
ece51917fa
Added first attempt at performing the first step of television output: mapping from source data to the first of the processing buffers. It's immediately obvious that my eye coordinates are off.
2016-04-17 17:17:59 -04:00
Thomas Harte
abce0ed3c4
Added setup of the source vertex array.
2016-04-17 16:17:23 -04:00
Thomas Harte
6ff9ffba6c
Switching temporarily to an attempt to draw input runs as if RGB: shader compiles, fixed a race condition on out-of-bounds accesses for the source buffer.
2016-04-17 15:51:28 -04:00
Thomas Harte
104f44f27f
Attempted to improve deinterlacing, gave the CRT full control over blend mode, switched back to 2000000Mhz audio.
2016-04-14 22:20:47 -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
6a17c2992d
Introduced a compile-time configurable audio divider, set it arbitrarily to '8' for now. Discovered why my graphics aren't centred and added a TODO.
2016-04-13 22:31:59 -04:00
Thomas Harte
026ce0255f
Source runs are now captured, and that buffer appropriately reset.
2016-04-13 22:20:13 -04:00
Thomas Harte
2ea02ed127
A source array buffer is also now created, mapped, unmapped, etc.
2016-04-13 22:14:18 -04:00
Thomas Harte
04d1b65c93
Reinstated texture target creation, cut them down to merely RGB.
2016-04-12 22:48:47 -04:00
Thomas Harte
4be8053ba9
Updated documentation.
2016-04-12 22:38:49 -04:00
Thomas Harte
4d889d9c7f
Made an attempt slightly to simplify the fragment processor, at both ends.
2016-04-12 22:35:11 -04:00
Thomas Harte
fe8b0ebc7e
Tidied up a little, mostly bumping things out of just-in-time creation that I can just do well in advance.
2016-04-12 22:31:13 -04:00
Thomas Harte
069ec2e889
In search of the cause of performance issues again, excised the per-pixel sin until it can be further evaluated.
2016-04-11 23:13:54 -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
6dbd20ffde
Expanded interface to rgb_sample to eliminate its need to make assumptions about globals, used expanded interface to compact Electron data to two pixels per byte.
2016-04-05 20:32:55 -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
729fddea1c
Switched to integer textures, likely to simplify for most use cases.
2016-04-04 19:39:01 -04:00
Thomas Harte
3ca58b2a57
Attemted further to diminish jumpiness.
2016-03-22 22:07:30 -04:00
Thomas Harte
8cd5d40e00
Made an attempt to reduce the amount of data heading to the GPU.
2016-03-22 21:16:32 -04:00
Thomas Harte
3038704977
Attempted to introduce a lowpass filter to the graphics output, reverted 6502 optimisations as seemingly not working.
2016-03-21 22:01:25 -04:00
Thomas Harte
197cf2a834
Commented out sync; it can probably be implicit.
2016-03-20 21:42:05 -04:00
Thomas Harte
9da7716c72
Attempted to simplify threading, thereby allowing machines to be constructed within a valid GL context, and started adding appropriate GL syncs. Which all oddly drops everything to a negligible FPS. Investigation will follow.
2016-03-19 22:46:17 -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
Thomas Harte
4ac1f959e9
A shortcut here and a shortcut there; this allows me at least to determine whether use of a PBO gains anything.
2016-03-19 17:07:05 -04:00
Thomas Harte
5b37a651ac
Made an attemp to deal with glUnmapBuffer(GL_ARRAY_BUFFER) == GL_FALSE
.
2016-03-18 21:35:52 -04:00
Thomas Harte
0b1c9fb291
Ensured I don't interrupt triangle strips for the purpose of glDrawArrays.
2016-03-18 21:28:53 -04:00
Thomas Harte
620257e29e
Switched to a client wait, as I try to figure out what's going on.
2016-03-18 21:21:35 -04:00
Thomas Harte
2e4af90e2d
Resolved output errors.
2016-03-18 21:19:11 -04:00
Thomas Harte
10bc33464d
I don't think this is quite correct, but it's better.
2016-03-18 21:14:06 -04:00
Thomas Harte
61e880de03
Keeping a buffer permanently bound is apparently illegal. So back to copying in on demand. Which I think still improves on synchronisation, but not much.
2016-03-18 21:11:09 -04:00
Thomas Harte
c8ecfb89d8
Some cleaning.
2016-03-16 22:52:33 -04:00
Thomas Harte
0d27d3bb7f
As messy as it is, this use glMapBufferRange
to avoid explicit buffer submits.
2016-03-16 22:29:22 -04:00
Thomas Harte
ca35a7e222
Ensured that a much greater input rate than output is handled correctly.
2016-03-16 20:38:17 -04:00
Thomas Harte
4cd0aa3416
Completed FIR filter based audio output.
2016-03-15 23:37:35 -04:00
Thomas Harte
726c98446a
Fixed a couple of memory leaks, at least got as far as instantiating a filter.
2016-03-15 21:34:00 -04:00
Thomas Harte
67dffc89e0
Stripped unnecessary includes.
2016-03-13 13:25:34 -04:00
Thomas Harte
7255408313
Experimented with going back to horizontal sync on leading edge; not sure so (temporarily?) disabled.
2016-03-08 22:54:05 -05:00
Thomas Harte
68da673a95
Wrapped this up as explicitly only the Mac thing to do.
2016-03-08 22:53:29 -05:00
Thomas Harte
bf5747f83e
Made an attempt to chop out all the stuff of building up the OpenGL data from the stuff of parsing input.
2016-03-08 22:40:23 -05:00
Thomas Harte
14b2927275
Made further attempts to tidy up; trying to demarcate between public interface and private.
2016-03-08 20:59:16 -05:00
Thomas Harte
c7976dd657
Started trying to clean up my Outputs namespace by moving stuff related to the CRT underneath a separate subnamespace.
2016-03-08 20:49:07 -05:00
Thomas Harte
bb09a5f58c
The attribute locations don't really need to be stored. They can be transient.
2016-03-07 21:42:21 -05:00
Thomas Harte
6dfe877c43
Basic attempts to organise myself into shape for composite output continue.
2016-03-07 21:22:47 -05:00
Thomas Harte
1e5fe2b2c1
Made an attempt to reestablish the Atari 2600 output connection despite various changes (TODO: generalise that stuff), and to start creating the composite shader.
2016-03-07 21:04:04 -05:00
Thomas Harte
2de229152f
Started sketching out shaders to do the first part of the composite conversion.
2016-03-07 19:21:04 -05:00
Thomas Harte
cd9c62acca
Still stepping slowly towards a working composite mode, switched the RGB sampling function to returning a vec4
, which may be of benefit to any machine with a brightness part of an RGB signal, and started edging towards at least having the correct GLSL programs ready for converting composite output.
2016-03-07 19:08:26 -05:00
Thomas Harte
3b6c9c15a1
Switching momentarily back to monitor mode, resolved why I was suddenly getting no output upon creating some texture targets.
2016-03-07 18:55:15 -05:00
Thomas Harte
eefd17ed4c
Fixed sync response in composite scan output generation and stored texture coordinates.
2016-03-05 21:52:22 -05:00
Thomas Harte
6cddb4c9c8
Added a first attempt to generate output scans for composite mode. So this in theory completes the CPU side of composite operations. Though I'm sure problems will reveal themselves.
2016-03-05 21:18:28 -05:00
Thomas Harte
3f39803d32
Switched to triangle strips, to eliminate the need for any temporary storage for the composite output path.
2016-03-05 20:47:11 -05:00
Thomas Harte
23c223e2ed
Started edging towards completing the CPU side of accumulating enough data for composite decoding.
2016-03-05 17:55:18 -05:00
Thomas Harte
5c8db71c64
Corrected some constants, ensured both machines (so far) are setting the output device.
2016-03-05 16:19:10 -05:00
Thomas Harte
70b6d51451
Ever more baby steps back towards composite decoding.
2016-03-05 14:36:12 -05:00
Thomas Harte
2f7626a5e0
Okay, this definitely definitely is supposed to be this way around.
2016-02-28 22:00:05 -05:00
Thomas Harte
3449120c24
Added a note to future self, put the scan edge generator back to the way round it was before.
2016-02-27 22:51:37 -05:00
Thomas Harte
7839d93344
With the provision of an extra hint to the CRT and, finally, the realisation about why my scans weren't exactly joining up, improved output precision.
2016-02-27 22:39:01 -05:00
Thomas Harte
1c6de7692d
Made an attempt to fix tape output interrupts; offloaded raster width and placing conversion to the GPU.
2016-02-27 20:37:41 -05:00
Thomas Harte
db18c85423
Simplified the run builder rather; put a double check of Electron timing in place.
2016-02-25 22:01:42 -05:00
Thomas Harte
1eea28b692
Disabled some debugging parts, added some others, marked some things as inline. Ticking over.
2016-02-22 23:35:42 -05:00
Thomas Harte
4b28e7b974
Switched back to a single array and vertex buffer.
2016-02-21 22:54:55 -05:00
Thomas Harte
574985f9a2
Fixed interlaced timing; switched to a more robust detector for horizontal sync; eliminated some test logging.
2016-02-20 20:29:40 -05:00
Thomas Harte
00f414d757
Made an attempt to reintroduce interlacing and screen modes with gaps. Something's wrong with synchronisation though, so most likely I'm outputting a bad signal.
2016-02-20 17:32:51 -05:00
Thomas Harte
68992a62f9
Switched to a subtler to out-of-band syncs.
2016-02-20 00:16:07 -05:00
Thomas Harte
1954f7bcbd
Got back to a stable image, at least when staying in a mode. Which is what I was trying to fix. Hmmm.
2016-02-19 23:41:09 -05:00
Thomas Harte
570d88a876
Added a simple metric for measuring surprise. Which will hopefully allow me to reimplement PAL/NTSC auto-selection for the Atari 2600.
2016-02-18 23:22:06 -05:00
Thomas Harte
ce3c098c28
Widened beam a little, moved to a linear approximation of age across scans, cut number of stored frames.
2016-02-16 21:48:09 -05:00
Thomas Harte
b261e86c62
Reintroduced lateral as a parameter in CRT drawing, to simulate a rounded raster.
2016-02-16 20:37:04 -05:00
Thomas Harte
a01f90ff3e
Attempted a switch to the real PAL visible area and to something a bit like a real phosphor decay.
2016-02-14 21:57:23 -05:00
Thomas Harte
7580d192d5
Fixes: now setting correct frame time estimate, properly enabling the timestamp attribute, and ensuring that the Electron flushes screen work at least once per host frame update.
2016-02-14 19:28:02 -05:00
Thomas Harte
752db78431
No doubt still imperfect but killed the repeated whole texture uploads.
2016-02-13 23:55:02 -05:00
Thomas Harte
697e50c0cc
Screen output is back, no matter how inefficiently.
2016-02-13 23:50:18 -05:00
Thomas Harte
d0b2d840da
A minor fix to data queuing. Display still absent.
2016-02-13 20:57:41 -05:00
Thomas Harte
eeb0e134fd
Started the transition towards a more natural collection of rolling buffers, with phosphor decay in mind.
2016-02-13 20:52:23 -05:00
Thomas Harte
fd2d5c78f8
Started trying to nudge towards the multistage approach to video decoding.
2016-02-12 22:31:05 -05:00
Thomas Harte
0a09762be6
Fixed output precision compared to the new approach of trusting the flywheel for position, and eliminated fixed-Acorn constants. Also re-enabled the faded previous frame, at least temporarily.
2016-02-12 19:53:49 -05:00
Thomas Harte
1d20a29d97
Made an attempt to switch to the flywheels for both vertical and horizontal sync, and to act more appropriately for out-of-bounds sync requests. Lots of tweaking to do, I fear.
2016-02-11 23:43:08 -05:00
Thomas Harte
c81891ec43
Minor tidying and at least acknowledged the new flywheel encapsulation.
2016-02-11 22:13:38 -05:00
Thomas Harte
a6574d1f96
Made an attempt to factor out and more clearly to document my implementation of flywheel synchronisation.
2016-02-11 22:12:12 -05:00
Thomas Harte
c66409421e
Switched to generating an interlaced output, that apparently being correct. Enabled a poor man's version of phosphor persistence to smooth things out a little. It's not completely unconvincing.
2016-02-10 23:11:25 -05:00
Thomas Harte
b5bcadb8d3
Reinstated clipped CRT output, with more appropriate ownership of the decision.
2016-02-07 22:18:55 -05:00
Thomas Harte
3a689d14cc
Added padding of supplied data to correct for any potential rounding errors when rendering.
2016-02-07 20:29:32 -05:00
Thomas Harte
3a9ea66f8b
Filled in shader class.
2016-02-07 19:21:22 -05:00
Thomas Harte
4d0a218a57
Certainly at least seriously considering a separate holder for the "compile a shader" logic. Otherwise taking steps back towards PAL/NTSC decoding.
2016-02-07 17:32:38 -05:00
Thomas Harte
602327cd9d
Sketched out a quick class for rendering to texture.
2016-02-07 15:42:02 -05:00
thomasharte
2cb12a7513
Allowed overly aggressive allocations to be cleared up after the fact.
2016-02-06 16:07:23 -05:00
Thomas Harte
bf348ccb96
Fixed clearing logic.
2016-02-05 22:47:12 -05:00
Thomas Harte
6ab425deda
There is now a semi-reasonable amount of screen output again.
2016-02-05 21:35:39 -05:00
Thomas Harte
80e7e5e602
Updated to return old behaviour of drawing only upon changes.
2016-02-04 23:05:47 -05:00
Thomas Harte
8bc3f8046d
This endeavours to move everything into the CRT class except the final version of shader building.
2016-02-04 22:57:46 -05:00
Thomas Harte
e0d51408e4
Onward with carrying this through to the bitter end, this at least results in all the appropriate knowledge and call-ins occuring at the CRT.
2016-02-04 22:28:50 -05:00
Thomas Harte
09e11469c3
Simplified further: eliminated delegate. Which means I can go frame-free internally to the CRT at some point, if I want.
2016-02-03 19:11:18 -05:00
Thomas Harte
19393390ac
It's broken now, but this is what I now intend the full public interface of the CRT to be.
2016-02-02 22:41:33 -05:00
Thomas Harte
4554abb755
Made an attempt to be more rigorous in display generation on the Electron, to make sure I deal with mid-line changes to/from blank line mode. Even if it turns out that they generate pixels.
2016-01-29 21:14:13 -05:00
Thomas Harte
adc6838ba0
Continued slow migration of shader ownership to CRT. Attempted to start debugging the tape interface.
2016-01-27 21:35:57 -05:00
Thomas Harte
1819e7b9cc
Started sketching out an appropriate interface to transfer responsibility for shaders to the CRT.
2016-01-23 19:06:32 -05:00
Thomas Harte
ace331d4b4
Got a bit higher level in CRT timing specification. Which internally allows it now to infer the colour clock frequency. Which will be helpful momentarily.
2016-01-23 18:53:20 -05:00
Thomas Harte
a9e26d7808
Introduced a scan's delay, as intended.
2016-01-23 17:49:25 -05:00
Thomas Harte
20cab08f8f
Added a two-slot buffer of scans and a comon dispatch mechanism.
2016-01-23 17:44:34 -05:00
Thomas Harte
0efe4b312c
Disabled my various bits of rate interchange debugging; improved test for when to call update_display due to a RAM write.
2016-01-21 22:16:52 -05:00
Thomas Harte
48ddd3c497
Set about documenting the CRT; while doing so decided to add an optional clock divider for input; having done so decided to try to exploit it with the Electron.
2016-01-21 21:17:47 -05:00
Thomas Harte
4c16d34063
Moved set_tape so that the inline definition of get_next_tape_pulse is visible to it. Also eliminated some dead typedefs.
2016-01-20 08:27:25 -05:00
Thomas Harte
f727582911
Started making first moves towards stripping CSCathodeRayView of its responsibilities. If that can be merely an OpenGL view that presents things, things will be a lot more portable.
2016-01-20 08:21:33 -05:00
Thomas Harte
e65cd4cf06
Some data is marginally reaching the CPU from the tape.
2016-01-19 22:05:34 -05:00
Thomas Harte
ddcc34740b
Added lots of debugging output while I attempt to locate the source of audio scratchiness, also simplified manner of dealing with wraparound within the AudioQueue wrapper.
2016-01-18 13:50:19 -06:00
Thomas Harte
b58e59e2bb
Fixed: now outputting the requested output rate, rather than massively overproducing at the input rate.
2016-01-14 23:12:40 -05:00
Thomas Harte
383b2be4c6
Fixed one off-by-one error.
2016-01-14 21:33:27 -05:00
Thomas Harte
8bd04a6be4
Switched model for filter subclasses. Implemented test square[-ish] wave to check for obvious stream errors. None is clear.
2016-01-14 21:27:02 -05:00
Thomas Harte
38ffcaa262
Here, at last, is _some_ audio output, at least.
2016-01-14 20:33:22 -05:00
Thomas Harte
afde8dac49
Closed the loop such that audio manages to bubble up into Objective-C.
2016-01-13 22:38:59 -05:00
Thomas Harte
439d452e23
Resolved some errors.
2016-01-13 22:11:33 -05:00