#define WIDTH 1280
#define HEIGHT 720
-#define BUFFER_OFFSET(i) ((char *)NULL + (i))
#include <string.h>
#include <math.h>
#include <time.h>
+#include <sys/time.h>
#include <assert.h>
#include <string>
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);
- for (unsigned i = 0; i < img->w * img->h; ++i) {
+ 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 = 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);
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;
make_hsv_wheel_texture();
- struct timespec start, now;
int frame = 0, screenshot = 0;
+#if _POSIX_C_SOURCE >= 199309L
+ struct timespec start, now;
clock_gettime(CLOCK_MONOTONIC, &start);
+#else
+ struct timeval start, now;
+ gettimeofday(&start, NULL);
+#endif
while (!quit) {
SDL_Event event;
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);
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) {
}
glUnmapBuffer(GL_PIXEL_PACK_BUFFER_ARB);
check_error();
+ glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, 0);
+ check_error();
#if 1
+#if _POSIX_C_SOURCE >= 199309L
clock_gettime(CLOCK_MONOTONIC, &now);
double elapsed = now.tv_sec - start.tv_sec +
1e-9 * (now.tv_nsec - start.tv_nsec);
+#else
+ gettimeofday(&now, NULL);
+ double elapsed = now.tv_sec - start.tv_sec +
+ 1e-6 * (now.tv_usec - start.tv_usec);
+#endif
printf("%d frames in %.3f seconds = %.1f fps (%.1f ms/frame)\n",
frame, elapsed, frame / elapsed,
1e3 * elapsed / frame);