float radius = 0.3f;
float inner_radius = 0.3f;
+float blur_radius = 3.0f;
void update_hsv(Effect *lift_gamma_gain_effect, Effect *saturation_effect)
{
radius = (xf / 0.2f);
} else if (yf >= 0.70f && yf < 0.72f && xf < 0.2f) {
inner_radius = (xf / 0.2f);
+ } else if (yf >= 0.75f && yf < 0.77f && xf < 0.2f) {
+ blur_radius = (xf / 0.2f) * 100.0f;
}
}
exit(1);
}
- // Convert to RGB.
- 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 * 4);
- for (int i = 0; i < img->w * img->h; ++i) {
- unsigned char r, g, b;
- unsigned int temp;
- unsigned int pixel = *(unsigned int *)(src_pixels + i * fmt->BytesPerPixel);
-
- temp = pixel & fmt->Rmask;
- temp = temp >> fmt->Rshift;
- temp = temp << fmt->Rloss;
- r = temp;
-
- temp = pixel & fmt->Gmask;
- temp = temp >> fmt->Gshift;
- temp = temp << fmt->Gloss;
- g = temp;
-
- temp = pixel & fmt->Bmask;
- temp = temp >> fmt->Bshift;
- temp = temp << fmt->Bloss;
- b = temp;
-
- 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);
+ SDL_PixelFormat rgba_fmt;
+ rgba_fmt.palette = NULL;
+ rgba_fmt.BitsPerPixel = 32;
+ rgba_fmt.BytesPerPixel = 8;
+ rgba_fmt.Rloss = rgba_fmt.Gloss = rgba_fmt.Bloss = rgba_fmt.Aloss = 0;
+
+ // NOTE: Assumes little endian.
+ rgba_fmt.Rmask = 0x00ff0000;
+ rgba_fmt.Gmask = 0x0000ff00;
+ rgba_fmt.Bmask = 0x000000ff;
+ rgba_fmt.Amask = 0xff000000;
+
+ rgba_fmt.Rshift = 16;
+ rgba_fmt.Gshift = 8;
+ rgba_fmt.Bshift = 0;
+ rgba_fmt.Ashift = 24;
+
+ rgba_fmt.colorkey = 0;
+ rgba_fmt.alpha = 255;
+
+ SDL_Surface *converted = SDL_ConvertSurface(img, &rgba_fmt, SDL_SWSURFACE);
*w = img->w;
*h = img->h;
SDL_FreeSurface(img);
- return dst_pixels;
+ return (unsigned char *)converted->pixels;
}
void write_ppm(const char *filename, unsigned char *screenbuf)
Effect *saturation_effect = chain.add_effect(EFFECT_SATURATION);
Effect *blur_effect = chain.add_effect(EFFECT_BLUR);
Effect *vignette_effect = chain.add_effect(EFFECT_VIGNETTE);
+ //Effect *sandbox_effect = chain.add_effect(EFFECT_SANDBOX);
+ //sandbox_effect->set_float("parm", 42.0f);
//chain.add_effect(EFFECT_MIRROR);
chain.add_output(inout_format);
chain.finalize();
vignette_effect->set_float("radius", radius);
vignette_effect->set_float("inner_radius", inner_radius);
//vignette_effect->set_vec2("center", (float[]){ 0.7f, 0.5f });
+
+ blur_effect->set_float("radius", blur_radius);
+
chain.render_to_screen(src_img);
glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 1);
draw_saturation_bar(0.6f, saturation / 4.0f);
draw_saturation_bar(0.65f, radius);
draw_saturation_bar(0.70f, inner_radius);
+ draw_saturation_bar(0.75f, blur_radius / 100.0f);
SDL_GL_SwapBuffers();
check_error();