// comes from a single 2D array with chunky pixels.
class FlatInput : public Input {
public:
- FlatInput(ImageFormat format, unsigned width, unsigned height);
+ FlatInput(ImageFormat format, MovitPixelFormat pixel_format, unsigned width, unsigned height);
+
+ virtual std::string effect_type_id() const { return "FlatInput"; }
// Create the texture itself. We cannot do this in the constructor,
// because we don't necessarily know all the settings (sRGB texture,
// mipmap generation) at that point.
void finalize();
+ // TODO: Check that we actually have the required extension.
+ virtual bool can_output_linear_gamma() const {
+ return (image_format.gamma_curve == GAMMA_LINEAR ||
+ image_format.gamma_curve == GAMMA_sRGB);
+ }
+
std::string output_fragment_shader();
// Uploads the texture if it has changed since last time.
void set_gl_state(GLuint glsl_program_num, const std::string& prefix, unsigned *sampler_num);
- ColorSpace get_color_space() { return image_format.color_space; }
- GammaCurve get_gamma_curve() { return image_format.gamma_curve; }
+ ColorSpace get_color_space() const { return image_format.color_space; }
+ GammaCurve get_gamma_curve() const { return image_format.gamma_curve; }
// Tells the input where to fetch the actual pixel data. Note that if you change
// this data, you must either call set_pixel_data() again (using the same pointer
private:
ImageFormat image_format;
+ MovitPixelFormat pixel_format;
GLenum format;
GLuint pbo, texture_num;
bool needs_update, finalized;
- int use_srgb_texture_format, needs_mipmaps;
+ int output_linear_gamma, needs_mipmaps;
unsigned width, height, pitch, bytes_per_pixel;
const unsigned char *pixel_data;
};