1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-19 08:31:11 +00:00

Sketches interface for a GPU data bookender, to avoid stray errors with packed pixel formats.

This commit is contained in:
Thomas Harte 2017-10-22 10:48:10 -04:00
parent 46345c6a3e
commit 1157bde453

View File

@ -98,6 +98,21 @@ class TextureBuilder {
/// allocated, indicating their final resting locations and their lengths. /// allocated, indicating their final resting locations and their lengths.
void flush(const std::function<void(const std::vector<WriteArea> &write_areas, size_t count)> &); void flush(const std::function<void(const std::vector<WriteArea> &write_areas, size_t count)> &);
/// A Bookender helps to paper over precision errors when rendering; its job is to provide single-sample
/// extensions that duplicate the left and right edges of a written area. By default the texture builder will
/// simply copy the appropriate number of bytes per pixel, but if the client is using a packed pixel format
/// then that may be incorrect, e.g. if each sample is a byte but contains two pixels, each in a single nibble,
/// then the correct duplication might be a byte composed of copies of the two top nibbles as the left bookend,
/// and one composed of copies of the two bottom nibbles on the right.
struct Bookender {
/// Writes to left_bookend the sample that should appear as a continuation before the left_value;
/// writes to right_bookend the sample that should appear as a continuation after right_value.
void add_bookends(uint8_t *const left_value, uint8_t *const right_value, uint8_t *left_bookend, uint8_t *right_bookend);
};
/// Sets the current bookender. Will be called synchronously within the builder-writing thread.
void set_bookender(Bookender *bookender);
private: private:
// the buffer size // the buffer size
size_t bytes_per_pixel_; size_t bytes_per_pixel_;