mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-26 08:49:37 +00:00
Adds first draft of an interface to separate CRT logic from the GPU-side stuff.
This commit is contained in:
parent
0d051502e2
commit
4701aa149a
@ -27,6 +27,52 @@ class Delegate {
|
||||
virtual void crt_did_end_batch_of_frames(CRT *crt, unsigned int number_of_frames, unsigned int number_of_unexpected_vertical_syncs) = 0;
|
||||
};
|
||||
|
||||
struct ScanTarget {
|
||||
struct Modals {
|
||||
enum class DataType {
|
||||
Luminance1, // 1 byte/pixel; any bit set => white; no bits set => black.
|
||||
Luminance8, // 1 byte/pixel; linear scale.
|
||||
|
||||
Phase4Luminance4, // 1 byte/pixel; top nibble is a phase offset, bottom nibble is luminance.
|
||||
Phase8Luminance8, // 1 bytes/pixel; first is phase, second is luminance.
|
||||
|
||||
Red1Green1Blue1, // 1 byte/pixel; bit 0 is blue on or off, bit 1 is green, bit 2 is red.
|
||||
Red2Green2Blue2, // 1 byte/pixel; bits 0 and 1 are blue, bits 2 and 3 are green, bits 4 and 5 are blue.
|
||||
Red4Green4Blue4, // 2 bytes/pixel; first nibble is red, second is green, third is blue.
|
||||
Red8Green8Blue8, // 4 bytes/pixel; first is red, second is green, third is blue, fourth is vacant.
|
||||
} source_data_type;
|
||||
ColourSpace colour_space;
|
||||
};
|
||||
virtual void set_modals(Modals);
|
||||
|
||||
struct EndPoint {
|
||||
uint32_t data_offset;
|
||||
uint16_t x, y;
|
||||
uint16_t phase;
|
||||
uint8_t amplitude;
|
||||
};
|
||||
EndPoint *get_endpoint_pair();
|
||||
|
||||
/// Finds the first available space of at least @c required_length pixels in size which is suitably aligned
|
||||
/// for writing of @c required_alignment number of pixels at a time.
|
||||
/// Calls must be paired off with calls to @c reduce_previous_allocation_to.
|
||||
/// @returns a pointer to the allocated space if any was available; @c nullptr otherwise.
|
||||
virtual uint8_t *allocate_write_area(std::size_t required_length, std::size_t required_alignment = 1) = 0;
|
||||
|
||||
/// Announces that the owner is finished with the region created by the most recent @c allocate_write_area
|
||||
/// and indicates that its actual final size was @c actual_length.
|
||||
virtual void reduce_previous_allocation_to(std::size_t actual_length) = 0;
|
||||
|
||||
virtual void submit() = 0;
|
||||
virtual void reset() = 0;
|
||||
|
||||
enum class Event {
|
||||
HorizontalSync,
|
||||
VerticalSync
|
||||
};
|
||||
virtual void announce(Event event) = 0;
|
||||
};
|
||||
|
||||
class CRT {
|
||||
private:
|
||||
CRT(unsigned int common_output_divisor, unsigned int buffer_depth);
|
||||
|
Loading…
Reference in New Issue
Block a user