diff --git a/Outputs/CRT/CRT.cpp b/Outputs/CRT/CRT.cpp index 5a6b617f1..76df84488 100644 --- a/Outputs/CRT/CRT.cpp +++ b/Outputs/CRT/CRT.cpp @@ -29,7 +29,7 @@ void CRT::set_new_timing(unsigned int cycles_per_line, unsigned int height_of_di // for horizontal retrace and 500 to 750 µs for vertical retrace in NTSC and PAL TV." time_multiplier_ = IntermediateBufferWidth / cycles_per_line; - phase_denominator_ = cycles_per_line * colour_cycle_denominator; + phase_denominator_ = cycles_per_line * colour_cycle_denominator * time_multiplier_; phase_numerator_ = 0; colour_cycle_numerator_ = colour_cycle_numerator; phase_alternates_ = should_alternate; diff --git a/Outputs/CRT/Internals/CRTOpenGL.cpp b/Outputs/CRT/Internals/CRTOpenGL.cpp index 48bc65d6a..06067ad8a 100644 --- a/Outputs/CRT/Internals/CRTOpenGL.cpp +++ b/Outputs/CRT/Internals/CRTOpenGL.cpp @@ -132,9 +132,9 @@ void OpenGLOutputBuilder::draw_frame(unsigned int output_width, unsigned int out RenderStage composite_render_stages[] = { {&composite_texture_, composite_input_shader_program_.get(), {0.0, 0.0, 0.0}}, - {&separated_texture_, composite_separation_filter_program_.get(), {0.0, 0.5, 0.5}}, - {&filtered_y_texture_, composite_y_filter_shader_program_.get(), {0.0, 0.5, 0.5}}, - {&filtered_texture_, composite_chrominance_filter_shader_program_.get(), {0.0, 0.0, 0.0}}, +// {&separated_texture_, composite_separation_filter_program_.get(), {0.0, 0.5, 0.5}}, +// {&filtered_y_texture_, composite_y_filter_shader_program_.get(), {0.0, 0.5, 0.5}}, +// {&filtered_texture_, composite_chrominance_filter_shader_program_.get(), {0.0, 0.0, 0.0}}, {nullptr} }; @@ -295,7 +295,7 @@ void OpenGLOutputBuilder::prepare_source_vertex_array() void OpenGLOutputBuilder::prepare_output_shader() { output_shader_program_ = OpenGL::OutputShader::make_shader("", "texture(texID, srcCoordinatesVarying).rgb", false); - output_shader_program_->set_source_texture_unit(filtered_texture_unit); + output_shader_program_->set_source_texture_unit(composite_texture_unit);//filtered_texture_unit); } void OpenGLOutputBuilder::prepare_output_vertex_array() @@ -367,6 +367,10 @@ void OpenGLOutputBuilder::set_colour_space_uniforms() void OpenGLOutputBuilder::set_timing_uniforms() { + const float colour_subcarrier_frequency = (float)colour_cycle_numerator_ / (float)colour_cycle_denominator_; + const float output_width = ((float)colour_cycle_numerator_ * 4.0f) / (float)(colour_cycle_denominator_ * IntermediateBufferWidth); + const float sample_cycles_per_line = cycles_per_line_ / output_width; + OpenGL::IntermediateShader *intermediate_shaders[] = { composite_input_shader_program_.get(), composite_separation_filter_program_.get(), @@ -374,17 +378,13 @@ void OpenGLOutputBuilder::set_timing_uniforms() composite_chrominance_filter_shader_program_.get() }; bool extends = false; - float phaseCyclesPerTick = (float)colour_cycle_numerator_ / (float)(colour_cycle_denominator_ * cycles_per_line_); + float phase_cycles_per_tick = 0.25f; for(int c = 0; c < 3; c++) { - if(intermediate_shaders[c]) intermediate_shaders[c]->set_phase_cycles_per_sample(phaseCyclesPerTick, extends); + if(intermediate_shaders[c]) intermediate_shaders[c]->set_phase_cycles_per_sample(phase_cycles_per_tick, extends); extends = true; } - float colour_subcarrier_frequency = (float)colour_cycle_numerator_ / (float)colour_cycle_denominator_; - float output_width = ((float)colour_cycle_numerator_ * 4.0f) / (float)(colour_cycle_denominator_ * IntermediateBufferWidth); - float sample_cycles_per_line = cycles_per_line_ / output_width; - if(composite_separation_filter_program_) { composite_separation_filter_program_->set_width_scalers(output_width, output_width);