diff --git a/Machines/Electron/Electron.cpp b/Machines/Electron/Electron.cpp index c436187c6..828700589 100644 --- a/Machines/Electron/Electron.cpp +++ b/Machines/Electron/Electron.cpp @@ -244,3 +244,12 @@ inline void Machine::update_display() } } } + +const char *Machine::get_signal_decoder() +{ + return + "vec4 sample(vec2 coordinate)\n" + "{\n" + "return vec4(1.0, 1.0, 0.0, 1.0);\n" + "}"; +} diff --git a/Machines/Electron/Electron.hpp b/Machines/Electron/Electron.hpp index 68d3eae93..6c683b181 100644 --- a/Machines/Electron/Electron.hpp +++ b/Machines/Electron/Electron.hpp @@ -49,6 +49,7 @@ class Machine: public CPU6502::Processor { void set_rom(ROMSlot slot, size_t length, const uint8_t *data); Outputs::CRT *get_crt() { return _crt; } + const char *get_signal_decoder(); private: uint8_t _os[16384], _basic[16384], _ram[32768]; diff --git a/OSBindings/Mac/Clock Signal/Views/CSCathodeRayView.m b/OSBindings/Mac/Clock Signal/Views/CSCathodeRayView.m index bbbaa3628..582f1d008 100644 --- a/OSBindings/Mac/Clock Signal/Views/CSCathodeRayView.m +++ b/OSBindings/Mac/Clock Signal/Views/CSCathodeRayView.m @@ -261,6 +261,7 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt - (void)setSignalDecoder:(nonnull NSString *)signalDecoder type:(CSCathodeRayViewSignalType)type { + _signalType = type; _signalDecoder = [signalDecoder copy]; OSAtomicIncrement32(&_signalDecoderGeneration); } @@ -343,6 +344,7 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt "uniform float alpha;\n" "\n" "%@\n" + "%%@\n" "\n" "void main(void)\n" "{\n" @@ -354,9 +356,7 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt "in float phase;\n" "\n" "// for conversion from i and q are in the range [-0.5, 0.5] (so i needs to be multiplied by 1.1914 and q by 1.0452)\n" - "const mat3 yiqToRGB = mat3(1.0, 1.0, 1.0, 1.1389784, -0.3240608, -1.3176884, 0.6490692, -0.6762444, 1.7799756);\n" - "\n" - "\%@\n"; + "const mat3 yiqToRGB = mat3(1.0, 1.0, 1.0, 1.1389784, -0.3240608, -1.3176884, 0.6490692, -0.6762444, 1.7799756);\n"; NSString *const ntscFragmentShaderBody = @"vec4 angles = vec4(phase) + vec4(-2.35619449019234, -0.78539816339745, 0.78539816339745, 2.35619449019234);\n" @@ -379,7 +379,7 @@ static CVReturn DisplayLinkCallback(CVDisplayLinkRef displayLink, const CVTimeSt @""; NSString *const rgbFragmentShaderBody = - @"fragColour = texture(srcCoordinatesVarying, srcCoordinatesVarying);//sin(lateralVarying));\n"; + @"fragColour = texture(shadowMaskTexID, shadowMaskCoordinates) * sample(srcCoordinatesVarying);//sin(lateralVarying));\n"; switch(_signalType) { diff --git a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm index 5f72d1145..c800f98ab 100644 --- a/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm +++ b/OSBindings/Mac/Clock Signal/Wrappers/CSElectron.mm @@ -31,4 +31,9 @@ _electron.get_crt()->set_delegate(delegate); } +- (void)setView:(CSCathodeRayView *)view { + [super setView:view]; + [view setSignalDecoder:[NSString stringWithUTF8String:_electron.get_signal_decoder()] type:CSCathodeRayViewSignalTypeRGB]; +} + @end