mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-25 03:32:01 +00:00
Attemted further to diminish jumpiness.
This commit is contained in:
parent
8cd5d40e00
commit
3ca58b2a57
@ -82,15 +82,12 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// If we're still before the display will start to be painted, or the address is
|
if(
|
||||||
// less than both the current line address and 0x3000, (the minimum screen mode
|
(
|
||||||
// base address) then there's no way this write can affect the current frame. Sp
|
((_frameCycles >= first_graphics_line * cycles_per_line) && (_frameCycles < (first_graphics_line + 256) * cycles_per_line)) ||
|
||||||
// no need to flush the display. Otherwise, output up until now so that any
|
((_frameCycles >= (first_graphics_line + field_divider_line) * cycles_per_line) && (_frameCycles < (first_graphics_line + 256 + field_divider_line) * cycles_per_line))
|
||||||
// write doesn't have retroactive effect on the video output.
|
)
|
||||||
// if(!(
|
)
|
||||||
// (_fieldCycles < first_graphics_line * cycles_per_line) ||
|
|
||||||
// (address < _startLineAddress && address < 0x3000)
|
|
||||||
// ))
|
|
||||||
update_display();
|
update_display();
|
||||||
|
|
||||||
_ram[address] = *value;
|
_ram[address] = *value;
|
||||||
@ -101,7 +98,6 @@ unsigned int Machine::perform_bus_operation(CPU6502::BusOperation operation, uin
|
|||||||
cycles += 1 + (_frameCycles&1);
|
cycles += 1 + (_frameCycles&1);
|
||||||
if(_screen_mode < 4)
|
if(_screen_mode < 4)
|
||||||
{
|
{
|
||||||
update_display();
|
|
||||||
const int current_line = graphics_line(_frameCycles + (_frameCycles&1));
|
const int current_line = graphics_line(_frameCycles + (_frameCycles&1));
|
||||||
const int current_column = graphics_column(_frameCycles + (_frameCycles&1));
|
const int current_column = graphics_column(_frameCycles + (_frameCycles&1));
|
||||||
if(current_line < 256 && current_column < 80 && !_isBlankLine)
|
if(current_line < 256 && current_column < 80 && !_isBlankLine)
|
||||||
|
@ -48,7 +48,7 @@ const GLsizeiptr InputVertexBufferDataSize = 262080; // a multiple of 6 * Output
|
|||||||
// Runs are divided discretely by vertical syncs in order to put a usable bounds on the uniform used to track
|
// Runs are divided discretely by vertical syncs in order to put a usable bounds on the uniform used to track
|
||||||
// run age; that therefore creates a discrete number of fields that are stored. This number should be the
|
// run age; that therefore creates a discrete number of fields that are stored. This number should be the
|
||||||
// number of historic fields that are required fully to
|
// number of historic fields that are required fully to
|
||||||
const int NumberOfFields = 3;
|
const int NumberOfFields = 4;
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -358,7 +358,7 @@ char *OpenGLOutputBuilder::get_output_vertex_shader()
|
|||||||
|
|
||||||
"srcCoordinatesVarying = vec2(srcCoordinates.x / textureSize.x, (srcCoordinates.y + 0.5) / textureSize.y);"
|
"srcCoordinatesVarying = vec2(srcCoordinates.x / textureSize.x, (srcCoordinates.y + 0.5) / textureSize.y);"
|
||||||
"float age = (timestampBase - timestamp) / ticksPerFrame;"
|
"float age = (timestampBase - timestamp) / ticksPerFrame;"
|
||||||
"vec3 alphas = vec3(10.0 * exp((-age - 0.66) * 2.0), 10.0 * exp(-(age - 0.33) * 2.0), 10.0 * exp(-age * 2.0));"
|
"vec3 alphas = vec3(10.0 * exp((-age - 1.33) * 2.0), 10.0 * exp(-(age - 0.66) * 2.0), 10.0 * exp(-age * 2.0));"
|
||||||
// "alpha = min(10.0 * exp(-age * 2.0), 1.0);"
|
// "alpha = min(10.0 * exp(-age * 2.0), 1.0);"
|
||||||
"alpha = dot(alphas, filterCoefficients);"
|
"alpha = dot(alphas, filterCoefficients);"
|
||||||
|
|
||||||
@ -512,7 +512,7 @@ void OpenGLOutputBuilder::prepare_rgb_output_shader()
|
|||||||
glUniform1f(ticksPerFrameUniform, (GLfloat)(_cycles_per_line * _height_of_display));
|
glUniform1f(ticksPerFrameUniform, (GLfloat)(_cycles_per_line * _height_of_display));
|
||||||
glUniform2f(positionConversionUniform, _horizontal_scan_period, _vertical_scan_period / (unsigned int)_vertical_period_divider);
|
glUniform2f(positionConversionUniform, _horizontal_scan_period, _vertical_scan_period / (unsigned int)_vertical_period_divider);
|
||||||
|
|
||||||
SignalProcessing::FIRFilter filter(3, 3 * 50, 0, 25, SignalProcessing::FIRFilter::DefaultAttenuation);
|
SignalProcessing::FIRFilter filter(3, 6 * 50, 0, 25, SignalProcessing::FIRFilter::DefaultAttenuation);
|
||||||
float coefficients[3];
|
float coefficients[3];
|
||||||
filter.get_coefficients(coefficients);
|
filter.get_coefficients(coefficients);
|
||||||
glUniform3fv(filterCoefficients, 1, coefficients);
|
glUniform3fv(filterCoefficients, 1, coefficients);
|
||||||
|
Loading…
Reference in New Issue
Block a user