-#ifndef _FLAT_INPUT_H
-#define _FLAT_INPUT_H 1
+#ifndef _MOVIT_FLAT_INPUT_H
+#define _MOVIT_FLAT_INPUT_H 1
+#include <GL/glew.h>
+#include <assert.h>
+#include <string>
+
+#include "effect.h"
+#include "image_format.h"
+#include "init.h"
#include "input.h"
// A FlatInput is the normal, “classic” case of an input, where everything
class FlatInput : public Input {
public:
FlatInput(ImageFormat format, MovitPixelFormat pixel_format, GLenum type, unsigned width, unsigned height);
+ ~FlatInput();
virtual std::string effect_type_id() const { return "FlatInput"; }
// mipmap generation) at that point.
void finalize();
- // TODO: Check that we actually have the required extension.
virtual bool can_output_linear_gamma() const {
- return (type == GL_UNSIGNED_BYTE &&
+ return (movit_srgb_textures_supported &&
+ type == GL_UNSIGNED_BYTE &&
(image_format.gamma_curve == GAMMA_LINEAR ||
image_format.gamma_curve == GAMMA_sRGB));
}
+ virtual AlphaHandling alpha_handling() const {
+ switch (pixel_format) {
+ case FORMAT_RGBA_PREMULTIPLIED_ALPHA:
+ case FORMAT_BGRA_PREMULTIPLIED_ALPHA:
+ return INPUT_AND_OUTPUT_PREMULTIPLIED_ALPHA;
+ case FORMAT_RGBA_POSTMULTIPLIED_ALPHA:
+ case FORMAT_BGRA_POSTMULTIPLIED_ALPHA:
+ return OUTPUT_POSTMULTIPLIED_ALPHA;
+ case FORMAT_RGB:
+ case FORMAT_BGR:
+ case FORMAT_GRAYSCALE:
+ return OUTPUT_BLANK_ALPHA;
+ default:
+ assert(false);
+ }
+ }
std::string output_fragment_shader();
unsigned get_width() const { return width; }
unsigned get_height() const { return height; }
- ColorSpace get_color_space() const { return image_format.color_space; }
+ 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
const void *pixel_data;
};
-#endif // !defined(_FLAT_INPUT_H)
+#endif // !defined(_MOVIT_FLAT_INPUT_H)