mirror of
https://github.com/TomHarte/CLK.git
synced 2025-02-04 14:30:19 +00:00
Ensures proper write area locations end up in the scans.
This commit is contained in:
parent
6d277fecd5
commit
b70227ac1b
@ -100,12 +100,21 @@ Outputs::Display::ScanTarget::Scan *ScanTarget::begin_scan() {
|
||||
write_pointers_.scan_buffer = next_write_pointer;
|
||||
|
||||
// Fill in extra OpenGL-specific details.
|
||||
// result->data_y = write_pointers_.write_area;
|
||||
result->composite_y = 0;
|
||||
result->composite_y = 0; // TODO.
|
||||
|
||||
vended_scan_ = result;
|
||||
return static_cast<Outputs::Display::ScanTarget::Scan *>(result);
|
||||
}
|
||||
|
||||
void ScanTarget::end_scan() {
|
||||
if(vended_scan_) {
|
||||
vended_scan_->data_y = TextureAddressGetY(vended_write_area_pointer_);
|
||||
vended_scan_->end_points[0].data_offset += TextureAddressGetX(vended_write_area_pointer_);
|
||||
vended_scan_->end_points[1].data_offset += TextureAddressGetX(vended_write_area_pointer_);
|
||||
}
|
||||
vended_scan_ = nullptr;
|
||||
}
|
||||
|
||||
uint8_t *ScanTarget::begin_data(size_t required_length, size_t required_alignment) {
|
||||
if(allocation_has_failed_) return nullptr;
|
||||
|
||||
@ -138,7 +147,7 @@ uint8_t *ScanTarget::begin_data(size_t required_length, size_t required_alignmen
|
||||
}
|
||||
|
||||
// Everything checks out, return the pointer.
|
||||
write_pointers_.write_area = TextureAddress(aligned_start_x, output_y);
|
||||
vended_write_area_pointer_ = write_pointers_.write_area = TextureAddress(aligned_start_x, output_y);
|
||||
return &write_area_texture_[size_t(write_pointers_.write_area) * data_type_size_];
|
||||
|
||||
// Note state at exit:
|
||||
|
@ -30,6 +30,7 @@ class ScanTarget: public Outputs::Display::ScanTarget {
|
||||
// Outputs::Display::ScanTarget overrides.
|
||||
void set_modals(Modals) override;
|
||||
Scan *begin_scan() override;
|
||||
void end_scan() override;
|
||||
uint8_t *begin_data(size_t required_length, size_t required_alignment) override;
|
||||
void end_data(size_t actual_length) override;
|
||||
void submit() override;
|
||||
@ -74,6 +75,10 @@ class ScanTarget: public Outputs::Display::ScanTarget {
|
||||
GLuint write_area_texture_name_ = 0;
|
||||
bool texture_exists_ = false;
|
||||
|
||||
// Ephemeral information for the begin/end functions.
|
||||
Scan *vended_scan_ = nullptr;
|
||||
int vended_write_area_pointer_ = 0;
|
||||
|
||||
// Track allocation failures.
|
||||
bool allocation_has_failed_ = false;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user