mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-27 16:31:31 +00:00
Proven through deliberate inefficiency: the issues are (i) texture upload; and (ii) buffer wraparound.
This commit is contained in:
parent
759fbd89ca
commit
3684c6404f
@ -40,8 +40,8 @@ const GLsizei IntermediateBufferWidth = 2048;
|
||||
const GLsizei IntermediateBufferHeight = 2048;
|
||||
|
||||
// Some internal buffer sizes
|
||||
const GLsizeiptr OutputVertexBufferDataSize = 59904; // a multiple of 6 * OutputVertexSize
|
||||
const GLsizeiptr SourceVertexBufferDataSize = 87360; // a multiple of 2 * SourceVertexSize
|
||||
const GLsizeiptr OutputVertexBufferDataSize = 5990400; // a multiple of 6 * OutputVertexSize
|
||||
const GLsizeiptr SourceVertexBufferDataSize = 8736000; // a multiple of 2 * SourceVertexSize
|
||||
|
||||
}
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ struct CRTInputBufferBuilder {
|
||||
|
||||
inline uint16_t get_last_write_y_position()
|
||||
{
|
||||
return _write_y_position;
|
||||
return _write_y_position % InputBufferBuilderHeight;
|
||||
}
|
||||
|
||||
inline size_t get_bytes_per_pixel()
|
||||
|
@ -270,14 +270,19 @@ void OpenGLOutputBuilder::draw_frame(unsigned int output_width, unsigned int out
|
||||
}
|
||||
|
||||
// upload new source pixels
|
||||
glActiveTexture(source_data_texture_unit);
|
||||
for(int c = 0; c < number_of_texture_upload_zones; c++)
|
||||
if(number_of_texture_upload_zones)
|
||||
{
|
||||
glTexSubImage2D( GL_TEXTURE_2D, 0,
|
||||
0, texture_upload_zones[c*2],
|
||||
InputBufferBuilderWidth, texture_upload_zones[c*2 + 1],
|
||||
formatForDepth(_buffer_builder->get_bytes_per_pixel()), GL_UNSIGNED_BYTE,
|
||||
(void *)((size_t)texture_upload_zones[c*2] * InputBufferBuilderWidth * _buffer_builder->get_bytes_per_pixel()));
|
||||
glActiveTexture(source_data_texture_unit);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internalFormatForDepth(_buffer_builder->get_bytes_per_pixel()), InputBufferBuilderWidth, InputBufferBuilderHeight, 0, formatForDepth(_buffer_builder->get_bytes_per_pixel()), GL_UNSIGNED_BYTE, (void *)0);
|
||||
// for(int c = 0; c < number_of_texture_upload_zones; c++)
|
||||
// {
|
||||
// glTexSubImage2D( GL_TEXTURE_2D, 0,
|
||||
// 0, texture_upload_zones[c*2],
|
||||
// InputBufferBuilderWidth, texture_upload_zones[c*2 + 1],
|
||||
// formatForDepth(_buffer_builder->get_bytes_per_pixel()), GL_UNSIGNED_BYTE,
|
||||
// (void *)((size_t)texture_upload_zones[c*2] * InputBufferBuilderWidth * _buffer_builder->get_bytes_per_pixel()));
|
||||
// }
|
||||
// glFinish();
|
||||
}
|
||||
|
||||
struct RenderStage {
|
||||
|
Loading…
Reference in New Issue
Block a user