1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-07 04:05:30 +00:00
Commit Graph

383 Commits

Author SHA1 Message Date
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