- // Flip upside-down to compensate for different origin.
- for (unsigned y = 0; y < height / 2; ++y) {
- unsigned flip_y = height - y - 1;
- for (unsigned x = 0; x < width; ++x) {
- std::swap(out_data[y * width + x], out_data[flip_y * width + x]);
- }
+ if (format == GL_RGBA) {
+ width *= 4;
+ }
+
+ vertical_flip(out_data, width, height);
+}
+
+void EffectChainTester::run(unsigned char *out_data, GLenum format, Colorspace color_space, GammaCurve gamma_curve)
+{
+ if (!finalized) {
+ finalize_chain(color_space, gamma_curve);
+ }
+
+ chain.render_to_fbo(fbo, width, height);
+
+ glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+ glReadPixels(0, 0, width, height, format, GL_UNSIGNED_BYTE, out_data);
+
+ if (format == GL_RGBA) {
+ width *= 4;