X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=main.cpp;h=2790bf8b0455a30c88086a40b538b02a3634d1c3;hb=91c70600f2d0a6a42420ee98949cf182859b798f;hp=8389cad581768dea43cea63d865797332c5161f0;hpb=aa262c3b480ebe6fd166bb887abc3439ca53e7a3;p=movit diff --git a/main.cpp b/main.cpp index 8389cad..2790bf8 100644 --- a/main.cpp +++ b/main.cpp @@ -3,7 +3,6 @@ #define WIDTH 1280 #define HEIGHT 720 -#define BUFFER_OFFSET(i) ((char *)NULL + (i)) #include #include @@ -92,7 +91,7 @@ unsigned char *load_image(const char *filename, unsigned *w, unsigned *h) SDL_PixelFormat *fmt = img->format; SDL_LockSurface(img); unsigned char *src_pixels = (unsigned char *)img->pixels; - unsigned char *dst_pixels = (unsigned char *)malloc(img->w * img->h * 3); + unsigned char *dst_pixels = (unsigned char *)malloc(img->w * img->h * 4); for (int i = 0; i < img->w * img->h; ++i) { unsigned char r, g, b; unsigned int temp; @@ -113,9 +112,10 @@ unsigned char *load_image(const char *filename, unsigned *w, unsigned *h) temp = temp << fmt->Bloss; b = temp; - dst_pixels[i * 3 + 0] = r; - dst_pixels[i * 3 + 1] = g; - dst_pixels[i * 3 + 2] = b; + dst_pixels[i * 4 + 0] = b; + dst_pixels[i * 4 + 1] = g; + dst_pixels[i * 4 + 2] = r; + dst_pixels[i * 4 + 3] = 255; } SDL_UnlockSurface(img); @@ -168,7 +168,7 @@ int main(int argc, char **argv) EffectChain chain(WIDTH, HEIGHT); ImageFormat inout_format; - inout_format.pixel_format = FORMAT_RGB; + inout_format.pixel_format = FORMAT_BGRA; inout_format.color_space = COLORSPACE_sRGB; inout_format.gamma_curve = GAMMA_sRGB; @@ -176,6 +176,7 @@ int main(int argc, char **argv) Effect *lift_gamma_gain_effect = chain.add_effect(EFFECT_LIFT_GAMMA_GAIN); Effect *saturation_effect = chain.add_effect(EFFECT_SATURATION); Effect *vignette_effect = chain.add_effect(EFFECT_VIGNETTE); + //chain.add_effect(EFFECT_MIRROR); chain.add_output(inout_format); chain.finalize(); @@ -258,10 +259,15 @@ int main(int argc, char **argv) update_hsv(lift_gamma_gain_effect, saturation_effect); vignette_effect->set_float("radius", radius); vignette_effect->set_float("inner_radius", inner_radius); + //vignette_effect->set_vec2("center", (float[]){ 0.7f, 0.5f }); chain.render_to_screen(src_img); + glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 1); + check_error(); glReadPixels(0, 0, WIDTH, HEIGHT, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, BUFFER_OFFSET(0)); check_error(); + glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0); + check_error(); draw_hsv_wheel(0.0f, lift_rad, lift_theta, lift_v); draw_hsv_wheel(0.2f, gamma_rad, gamma_theta, gamma_v); @@ -273,6 +279,8 @@ int main(int argc, char **argv) SDL_GL_SwapBuffers(); check_error(); + glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 1); + check_error(); unsigned char *screenbuf = (unsigned char *)glMapBuffer(GL_PIXEL_PACK_BUFFER_ARB, GL_READ_ONLY); check_error(); if (screenshot) { @@ -284,6 +292,8 @@ int main(int argc, char **argv) } glUnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB); check_error(); + glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0); + check_error(); #if 1 #if _POSIX_C_SOURCE >= 199309L