mirror of
https://github.com/TomHarte/CLK.git
synced 2024-12-02 02:49:28 +00:00
Undoes hard-coding of target framebuffer and display gamma.
This commit is contained in:
parent
6c49953115
commit
ef0dbc2a41
@ -60,7 +60,9 @@ template <typename T> void ScanTarget::allocate_buffer(const T &array, GLuint &b
|
|||||||
glBindBuffer(GL_ARRAY_BUFFER, buffer_name);
|
glBindBuffer(GL_ARRAY_BUFFER, buffer_name);
|
||||||
}
|
}
|
||||||
|
|
||||||
ScanTarget::ScanTarget() :
|
ScanTarget::ScanTarget(GLuint target_framebuffer, float output_gamma) :
|
||||||
|
target_framebuffer_(target_framebuffer),
|
||||||
|
output_gamma_(output_gamma),
|
||||||
unprocessed_line_texture_(LineBufferWidth, LineBufferHeight, UnprocessedLineBufferTextureUnit, GL_NEAREST, false),
|
unprocessed_line_texture_(LineBufferWidth, LineBufferHeight, UnprocessedLineBufferTextureUnit, GL_NEAREST, false),
|
||||||
full_display_rectangle_(-1.0f, -1.0f, 2.0f, 2.0f) {
|
full_display_rectangle_(-1.0f, -1.0f, 2.0f, 2.0f) {
|
||||||
|
|
||||||
@ -285,8 +287,8 @@ void ScanTarget::setup_pipeline() {
|
|||||||
// lose any detail when combining the input.
|
// lose any detail when combining the input.
|
||||||
processing_width_ = modals_.cycles_per_line / modals_.clocks_per_pixel_greatest_common_divisor;
|
processing_width_ = modals_.cycles_per_line / modals_.clocks_per_pixel_greatest_common_divisor;
|
||||||
|
|
||||||
// Establish an output shader. TODO: don't hard-code gamma.
|
// Establish an output shader.
|
||||||
output_shader_ = conversion_shader(modals_.input_data_type, modals_.display_type, modals_.composite_colour_space, 2.2f / modals_.intended_gamma, modals_.brightness);
|
output_shader_ = conversion_shader(modals_.input_data_type, modals_.display_type, modals_.composite_colour_space, output_gamma_ / modals_.intended_gamma, modals_.brightness);
|
||||||
glBindVertexArray(line_vertex_array_);
|
glBindVertexArray(line_vertex_array_);
|
||||||
glBindBuffer(GL_ARRAY_BUFFER, line_buffer_name_);
|
glBindBuffer(GL_ARRAY_BUFFER, line_buffer_name_);
|
||||||
enable_vertex_attributes(ShaderType::Conversion, *output_shader_);
|
enable_vertex_attributes(ShaderType::Conversion, *output_shader_);
|
||||||
@ -540,8 +542,8 @@ void ScanTarget::draw(bool synchronous, int output_width, int output_height) {
|
|||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Copy the accumulatiion texture to the target (TODO: don't assume framebuffer 0).
|
// Copy the accumulatiion texture to the target.
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, target_framebuffer_);
|
||||||
glViewport(0, 0, (GLsizei)output_width, (GLsizei)output_height);
|
glViewport(0, 0, (GLsizei)output_width, (GLsizei)output_height);
|
||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
@ -35,7 +35,7 @@ namespace OpenGL {
|
|||||||
*/
|
*/
|
||||||
class ScanTarget: public Outputs::Display::ScanTarget {
|
class ScanTarget: public Outputs::Display::ScanTarget {
|
||||||
public:
|
public:
|
||||||
ScanTarget();
|
ScanTarget(GLuint target_framebuffer = 0, float output_gamma = 2.2f);
|
||||||
~ScanTarget();
|
~ScanTarget();
|
||||||
void draw(bool synchronous, int output_width, int output_height);
|
void draw(bool synchronous, int output_width, int output_height);
|
||||||
|
|
||||||
@ -46,6 +46,9 @@ class ScanTarget: public Outputs::Display::ScanTarget {
|
|||||||
static constexpr int LineBufferWidth = 2048;
|
static constexpr int LineBufferWidth = 2048;
|
||||||
static constexpr int LineBufferHeight = 2048;
|
static constexpr int LineBufferHeight = 2048;
|
||||||
|
|
||||||
|
const GLuint target_framebuffer_;
|
||||||
|
const float output_gamma_;
|
||||||
|
|
||||||
// Outputs::Display::ScanTarget overrides.
|
// Outputs::Display::ScanTarget overrides.
|
||||||
void set_modals(Modals) override;
|
void set_modals(Modals) override;
|
||||||
Scan *begin_scan() override;
|
Scan *begin_scan() override;
|
||||||
|
Loading…
Reference in New Issue
Block a user