Thomas Harte
396cf72029
Renames OutputType
as DisplayType
and promotes it to a scan target modal.
2018-11-22 14:36:46 -05:00
Thomas Harte
bfe9704829
Reintroduces respect of each machine's nominated visible area.
2018-11-22 13:22:04 -05:00
Thomas Harte
43ee540233
Avoids race condition on .is_first_in_frame
2018-11-21 18:27:04 -05:00
Thomas Harte
38ffc4fdb3
Invalidates the stencil buffer upon buffer resizes.
2018-11-20 19:51:11 -05:00
Thomas Harte
a70991d50e
Eliminates minor gap.
2018-11-19 23:35:12 -05:00
Thomas Harte
4c00456166
Makes first attempt to draw only new lines.
2018-11-19 23:25:26 -05:00
Thomas Harte
26219213d7
Marginally increases scan size.
2018-11-18 23:03:56 -05:00
Thomas Harte
97c5ee6c0a
Corrects stencil buffer creation, and edges towards using it for [guaranteed] full-screen decay.
2018-11-18 22:22:43 -05:00
Thomas Harte
75bc0e451d
Reintroduces the accumulation texture.
...
Disables automatic clearing of the texture target, as the profiler indicates the vector instantiation to be a huge time sink.
2018-11-18 21:39:11 -05:00
Thomas Harte
6496b6313c
Attempts to fix random stray noise lines.
2018-11-17 23:27:25 -05:00
Thomas Harte
8f05560dd7
Corrects right-edge bookending.
2018-11-17 17:46:57 -05:00
Thomas Harte
06c0c64c1a
Shifts intermediate buffer sampling into the middle of each pixel row.
2018-11-17 17:31:32 -05:00
Thomas Harte
c173777d12
Extends TextureTarget so that targets can be created with a one-bit stencil.
2018-11-17 15:51:12 -05:00
Thomas Harte
16dfeb3fc8
Discards empty lines, yet makes some attempt at restoring transparency.
...
The two things conflict more than a little, so work to do.
2018-11-15 21:51:27 -05:00
Thomas Harte
5a31891048
Returns Amstrad CPC output.
...
Which is probably it until I get some more composite processing back in.
2018-11-15 21:32:22 -05:00
Thomas Harte
8b37496447
Restores video output to the Master System.
2018-11-15 21:21:54 -05:00
Thomas Harte
8f6664f0d7
Starts towards picking an input shader based on data type and pipeline.
2018-11-15 21:02:46 -05:00
Thomas Harte
8a699b6072
Kills setup_output
definitively, saving some indirection. set_scan_target
takes its place.
2018-11-14 21:52:57 -05:00
Thomas Harte
87df8b9e85
Makes an attempt at pre-emptive line buffer clearing.
2018-11-14 21:19:14 -05:00
Thomas Harte
91b19c5c70
Adds bookending, and finally kills the TextureBuilder. Farewell.
2018-11-14 20:49:06 -05:00
Thomas Harte
0487580a1a
Corrects initial state of is_drawing_
and expands lines to full display.
2018-11-14 20:10:38 -05:00
Thomas Harte
3dca836571
Ensures no overflow, and adds a couple of const
s.
2018-11-14 20:09:57 -05:00
Thomas Harte
6ba02c44d0
Better binds buffer sizes.
2018-11-13 23:08:51 -05:00
Thomas Harte
bf3ab4e260
Proceeds as drawing to the unprocessed line buffer and drawing from it.
...
Very, very slowly, and without yet clearing.
2018-11-13 21:15:33 -05:00
Thomas Harte
02f9cada43
Communicates the colour subcarrier frequency, and uses it to pick a buffer width.
2018-11-13 18:33:44 -05:00
Thomas Harte
654a19ea15
Switches back to working on the scan shaders.
...
Pixels from the emulated machine are now starting to appear.
2018-11-12 22:52:26 -05:00
Thomas Harte
ecb5504bd1
Switches enable_vertex_attribute_with_pointer
to silent failure (versus glGetError).
2018-11-12 22:51:44 -05:00
Thomas Harte
2adf3d353e
Subtracts retrace periods from output scale.
2018-11-12 20:20:09 -05:00
Thomas Harte
3045e85004
Ensures redraws when resizing; declines to busy wait otherwise.
2018-11-12 20:15:38 -05:00
Thomas Harte
e9d1afd515
Appears to demonstrates that the line buffer is approximately working.
2018-11-12 19:10:48 -05:00
Thomas Harte
833ab7945b
Slow steps towards switching to line output.
2018-11-12 18:56:54 -05:00
Thomas Harte
0af1d668a6
Takes a first step towards generality, and thereby starts submitting lines.
2018-11-12 18:47:55 -05:00
Thomas Harte
0ac62e3805
Flips and properly sizes output scans.
2018-11-12 18:28:09 -05:00
Thomas Harte
938d09f34a
Corrects scan outline generation.
2018-11-12 18:23:45 -05:00
Thomas Harte
dce52d740d
Finally gets some pixels back on screen.
...
For now, just the raw scans, direct to the framebuffer, with no intermediate processing. But it seems to prove that at least some of the proper data is reaching the GPU.
2018-11-11 23:23:42 -05:00
Thomas Harte
3ae333fa84
Edges further towards reviving the shaders.
2018-11-11 21:41:13 -05:00
Thomas Harte
d5af1f3948
Removes some migrated work.
2018-11-11 16:22:14 -05:00
Thomas Harte
0ba3ae53ab
Connects up the necessary recording to use intermediate composite buffers.
2018-11-11 15:20:18 -05:00
Thomas Harte
be12d78c83
Corrects vertical event announcement, and adjusts namespaces for OpenGL primitives.
2018-11-11 15:11:32 -05:00
Thomas Harte
b70227ac1b
Ensures proper write area locations end up in the scans.
2018-11-10 21:10:33 -05:00
Thomas Harte
6d277fecd5
Makes ScanTarget
a little more communicative and orthogonal.
2018-11-10 19:52:57 -05:00
Thomas Harte
491817d85c
Corrects allocation error and begins submitting raw textures.
2018-11-08 23:02:36 -05:00
Thomas Harte
20faf4e477
Adds submission of scans to the GPU.
2018-11-08 22:21:11 -05:00
Thomas Harte
4fe5c7c24e
Conspires to handle multithreading side of things in a lockless fashion.
...
At least on x86-64.
2018-11-08 21:57:28 -05:00
Thomas Harte
36bf640c6f
Acts as if it is going to submit scans, at least.
2018-11-07 22:53:46 -05:00
Thomas Harte
7881e40e0b
Shuffles the OpenGL primitives into their own collection.
2018-11-07 19:11:01 -05:00
Thomas Harte
55da1e9c0f
Simplifies semantics a little and starts accepting a single buffer of pixel data.
2018-11-06 22:23:38 -05:00
Thomas Harte
9799aa0975
Completes documentation and rounds out implementation.
2018-11-04 22:17:33 -05:00
Thomas Harte
1effb97b74
Reintroduces colour phase acquisition from the colour burst.
2018-11-04 21:57:46 -05:00
Thomas Harte
eb28095041
Ensures proper accumulation and reporting of colour phase across lines.
2018-11-04 21:44:22 -05:00
Thomas Harte
014da41471
Ensures scan positions are communicated with a specified range, and switches manner of pixel clock communication.
2018-11-04 21:06:25 -05:00
Thomas Harte
0446e350d3
Resolves sizing of texture coordinates, and improves constness slightly.
2018-11-03 23:51:26 -04:00
Thomas Harte
05fb7db147
Reduces CRT chattiness.
2018-11-03 23:47:41 -04:00
Thomas Harte
f6562de325
Possibly adds enough for the Electron and ZX80 to start outputting dummy lines.
...
Let's see!
2018-11-03 23:40:39 -04:00
Thomas Harte
b40211d2c0
Starts to bend 'CRTMachine' to a world farther from owning the GPU relationship.
2018-11-03 21:54:25 -04:00
Thomas Harte
da4d883321
Adds first, incomplete attempts to talk to a ScanTarget from the CRT.
...
Does away with the hassle of `unsigned` while I'm here; that was a schoolboy error.
2018-11-03 19:58:44 -04:00
Thomas Harte
373820f080
Attempts to establish interface to decouple scan output from generation.
...
Restores some functionality that had dropped out in the interim: diagonal scans, decoupling of scan scaling from timing of the composite subcarrier.
2018-10-30 21:50:35 -04:00
Thomas Harte
4701aa149a
Adds first draft of an interface to separate CRT logic from the GPU-side stuff.
2018-10-29 22:08:17 -04:00
Thomas Harte
7eeefd2602
Ensures LOGs look like statements even in release builds.
2018-10-22 22:37:11 -04:00
Thomas Harte
7c65cfd932
Adds default values for WriteArea
.
2018-10-21 21:18:54 -04:00
Thomas Harte
e582b4c8ca
Eliminates some dangling references to iCoordinate
.
2018-09-13 19:35:15 -04:00
Thomas Harte
a7508bc2ae
Switching explicitly to one pixel per sample eliminates the need for a bookender.
2018-09-12 20:11:17 -04:00
Thomas Harte
a38639d099
Eliminates the concept of an iCoordinate.
...
Real-life precision appears not to support the idea of sub-sample pixel storage.
2018-09-12 20:05:39 -04:00
Thomas Harte
d73d3b4480
Adds a left border to complement the right.
2018-09-09 21:52:48 -04:00
Thomas Harte
6e9cd5cb21
Resolves over-brightness created by over-composition.
2018-09-09 20:30:43 -04:00
Thomas Harte
c73445199c
Eliminates a couple of instances of manual memory management.
2018-09-09 20:29:58 -04:00
Thomas Harte
4c8781c762
Increases documentation slightly.
2018-09-09 17:17:38 -04:00
Thomas Harte
3c33ccd730
Eliminates various blank lines.
2018-07-28 10:52:34 -04:00
Thomas Harte
2832792fed
Corrects improper use of doubles.
2018-07-16 21:55:19 -04:00
Thomas Harte
efa45b9504
Adds a right gutter to clip persistence errors.
...
Also uncovers and corrects a long-standing centring error.
2018-07-16 21:52:31 -04:00
Thomas Harte
c9451a5382
Introduces an object for drawing OpenGL rectangles.
2018-07-14 17:42:23 -04:00
Thomas Harte
00cb4d26b3
Corrects typo.
2018-07-11 19:52:55 -04:00
Thomas Harte
c97c5fa03a
[Re-]recalibrates CRT retrace period and affected view windows.
...
In the hope of moving the CPC closer to the real CTM visible area.
2018-07-05 22:07:18 -04:00
Thomas Harte
5ab4cfee84
Factors out repeated hex-size setting.
2018-06-21 19:27:54 -04:00
Thomas Harte
a9eb0d02c6
Returns sanity to 8272 logging.
2018-06-20 23:02:32 -04:00
Thomas Harte
283ed8dbae
Increases permissible error in scanline length.
2018-06-19 22:24:11 -04:00
Thomas Harte
adca862166
Finally makes an initial pass at logging macros.
2018-06-18 22:37:19 -04:00
Thomas Harte
b899a22c7d
Hides persistent low-part colour channel errors.
2018-06-14 20:40:27 -04:00
Thomas Harte
14a2e470e4
Corrects overbrightness issue with autogeneration of PAL composite from an RGB source.
2018-06-14 18:25:48 -04:00
Thomas Harte
41dcf1de42
Increases blur again just a little more, after consideration of interlaced output.
2018-06-14 18:25:04 -04:00
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
f05ee525cb
Tweaks blurriness downward.
2018-06-14 17:41:17 -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
5d6b5d9f10
Eliminates all emdashes in cross-platform code.
2018-05-13 15:34:31 -04:00
Thomas Harte
0b771ce61a
Removes all instances of the copyright symbol.
2018-05-13 15:19:52 -04:00
Thomas Harte
bd27f61a03
Corrects various impossible-in-real-life compiler warnings.
2018-05-12 18:02:16 -04:00
Thomas Harte
f4097290c2
Made various corrections following a quick for-loop constness audit.
2018-04-30 22:23:57 -04:00
Thomas Harte
074b4c3500
Eliminates repeating cause of misuse.
...
Raises the question as to whether an async task queue should be required at construction; let's see how things look as the project develops.
2018-04-21 15:01:18 -07:00
Thomas Harte
6547560e52
Gives the CRT the ability to move iCoordinate multiplication outside of the fragment loop.
...
That resolves precision issues, as were plaguing the Apple II.
2018-04-18 19:29:03 -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
10f637d2cf
Enhances the CompoundSource so that constituents can have different volumes.
2018-04-07 14:30:02 -04:00
Thomas Harte
5782cab2a0
Minor whitespace fix.
2018-04-05 21:15:25 -04:00
Thomas Harte
ec72fb3baf
Ensures the SVideo shader gets all proper enable_vertex_attribute_with_pointer
s.
2018-04-05 21:12:28 -04:00
Thomas Harte
dbe3c5c3f8
Ensures artificial frequency limits are honoured.
2018-04-05 18:40:07 -04:00
Thomas Harte
d061ea232b
Ensures no attempt to compile an SVideo shader without appropriate source.
2018-04-04 19:01:01 -04:00
Thomas Harte
912791d3d4
Causes the s-video path correctly to function.
2018-03-30 18:24:18 -04:00
Thomas Harte
163a61dd63
Corrects SVideo-as-composite output; the Atari and Vic-20 now both supply svideo.
2018-03-30 13:16:18 -04:00
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