diff --git a/Machines/Atari2600/Atari2600.cpp b/Machines/Atari2600/Atari2600.cpp index 9a9463b6f..2650539b3 100644 --- a/Machines/Atari2600/Atari2600.cpp +++ b/Machines/Atari2600/Atari2600.cpp @@ -40,7 +40,7 @@ void Machine::setup_output(float aspect_ratio) // "float aOffset = 6.283185308 * (c.y - 3.0 / 16.0) * 1.14285714285714;\n" // "return y + step(0.03125, c.y) * 0.1 * cos((coordinate.x * 2.0 * 3.141592654) - aOffset);\n" "}"); - _crt->set_output_device(Outputs::CRT::Television); + _crt->set_output_device(Outputs::CRT::Monitor); } Machine::~Machine() diff --git a/Outputs/CRT/Internals/CRTOpenGL.cpp b/Outputs/CRT/Internals/CRTOpenGL.cpp index 5b7b07a37..b577d0d23 100644 --- a/Outputs/CRT/Internals/CRTOpenGL.cpp +++ b/Outputs/CRT/Internals/CRTOpenGL.cpp @@ -692,8 +692,20 @@ char *OpenGLOutputBuilder::get_composite_output_vertex_shader() char *OpenGLOutputBuilder::get_rgb_output_fragment_shader() { - return get_output_fragment_shader(_rgb_shader, "uniform usampler2D texID;", + const char *rgb_shader = _rgb_shader; + if(!_rgb_shader) + { + rgb_shader = + "vec3 rgb_sample(usampler2D sampler, vec2 coordinate, vec2 icoordinate)" + "{" + "return texture(sampler, coordinate).rgb / vec3(255.0);" + "}"; + } + + char *result = get_output_fragment_shader(rgb_shader, "uniform usampler2D texID;", "vec3 colour = rgb_sample(texID, srcCoordinatesVarying, iSrcCoordinatesVarying);"); + + return result; } char *OpenGLOutputBuilder::get_composite_output_fragment_shader() @@ -863,8 +875,7 @@ std::unique_ptr OpenGLOutputBuilder::prepare_output_shader(char void OpenGLOutputBuilder::prepare_rgb_output_shader() { - if(_rgb_shader) - rgb_shader_program = prepare_output_shader(get_rgb_output_vertex_shader(), get_rgb_output_fragment_shader(), source_data_texture_unit); + rgb_shader_program = prepare_output_shader(get_rgb_output_vertex_shader(), get_rgb_output_fragment_shader(), source_data_texture_unit); } void OpenGLOutputBuilder::prepare_composite_output_shader()