1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-12-28 22:30:30 +00:00
Commit Graph

190 Commits

Author SHA1 Message Date
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
34d213dec4 Decreased Y resolution, again also hopefully temporarily. 2016-12-10 15:35:38 -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
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
32dbfe947d With hindsight, the elimination of this might have been overzealous. 2016-11-20 10:53:35 +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
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
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
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
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
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
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
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
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
1d0bcb416d Dropped the size per output run back down to 8 bytes. 2016-05-10 07:47:47 -04:00
Thomas Harte
86dab3a5d6 Quickest first attempt to switch to instancing for the output array. Texture coordinates seem to be off. 2016-05-10 07:23:47 -04:00
Thomas Harte
daec21d3d8 Found and fixed off-by-one error. Display should now be completely fixed. 2016-05-09 21:14:59 -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
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
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
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
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
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
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
6982e945fb Fixed those issues breaking GL state, I hope. 2016-05-01 16:17:52 -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
23ea832f41 Increased brightness in television mode, added a clear if screen resolution changes. 2016-04-28 22:04:47 -04:00
Thomas Harte
e6c3b148ac Switched wholeheartedly to the new shader. 2016-04-28 21:45:44 -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
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
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
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
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