render to image surface

This commit is contained in:
Florian Stecker
2018-08-18 18:27:33 +02:00
parent c3deff6d64
commit 000d8a53b9
3 changed files with 107 additions and 52 deletions

View File

@@ -358,14 +358,8 @@ void drawAttractors(DrawingContext *ctx)
void draw(DrawingContext *ctx)
{
struct timeval current_time;
gettimeofday(&current_time, 0);
double start_time = current_time.tv_sec + current_time.tv_usec*1e-6;
cairo_t *C = ctx->cairo;
updateDimensions(ctx);
cairo_push_group(C);
cairo_set_source_rgb(C, 1, 1, 1);
cairo_paint(C);
@@ -378,7 +372,6 @@ void draw(DrawingContext *ctx)
cairo_set_line_cap(C, CAIRO_LINE_CAP_ROUND);
if(limit_curve_valid) {
if(show_limit) {
int last_inside = 0;
for(int i = 0; i < n_group_elements; i++) {
@@ -421,13 +414,7 @@ void draw(DrawingContext *ctx)
sprintf(buf, "t = %.8f", parameter);
cairo_show_text(C, buf);
cairo_pop_group_to_source(C);
cairo_paint(C);
cairo_surface_flush(cairo_get_target(C));
gettimeofday(&current_time, 0);
double end_time = current_time.tv_sec + current_time.tv_usec*1e-6;
printf("draw() finished in %g seconds\n", end_time - start_time);
}
void setup()
@@ -544,10 +531,10 @@ int processEvent(GraphicsInfo *info, XEvent *ev)
break;
}
draw(info->context);
return STATUS_REDRAW;
}
return 0;
return STATUS_NOTHING;
}
int main()
@@ -586,7 +573,24 @@ int main()
startTimer(info);
while(!checkEvents(info, processEvent, draw)) {
while(1) {
int result = checkEvents(info, processEvent, NULL);
if(result == STATUS_QUIT)
return 0;
else if(result == STATUS_REDRAW) {
struct timeval current_time;
gettimeofday(&current_time, 0);
double start_time = current_time.tv_sec + current_time.tv_usec*1e-6;
updateDimensions(info->context);
draw(info->context);
cairo_set_source_surface(info->front_context, info->buffer_surface, 0, 0);
cairo_paint(info->front_context);
gettimeofday(&current_time, 0);
double end_time = current_time.tv_sec + current_time.tv_usec*1e-6;
printf("drawing finished in %g seconds\n", end_time - start_time);
}
waitUpdateTimer(info);
}