X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=main.cpp;h=287e19a681a23e11e515fa42ecd9fd415dbe5d4c;hb=d4542f76df5d26843c68b1467e76722cffd801a1;hp=8389cad581768dea43cea63d865797332c5161f0;hpb=aa262c3b480ebe6fd166bb887abc3439ca53e7a3;p=movit diff --git a/main.cpp b/main.cpp index 8389cad..287e19a 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; @@ -260,8 +260,12 @@ int main(int argc, char **argv) vignette_effect->set_float("inner_radius", inner_radius); 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 +277,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 +290,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