Blame demo/src/benchmark.c

Ivan Mahonin b4b587
Ivan Mahonin b4b587
#include <stdlib.h>
Ivan Mahonin b4b587
Ivan Mahonin b4b587
#include <helianthus.h>
Ivan Mahonin b4b587
Ivan Mahonin b4b587
#include "common.h"
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static const double convexShape[][2] = {
Ivan Mahonin b4b587
	{  0, 10 },
Ivan Mahonin b4b587
	{  0,  3 },
Ivan Mahonin b4b587
	{  8,  0 },
Ivan Mahonin b4b587
	{ 10,  3 },
Ivan Mahonin b4b587
	{ 10, 10 } };
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static const double nonConvexShape[][2] = {
Ivan Mahonin b4b587
	{  0,  0 },
Ivan Mahonin b4b587
	{ 10,  0 },
Ivan Mahonin b4b587
	{ 10,  3 },
Ivan Mahonin b4b587
	{  3,  3 },
Ivan Mahonin b4b587
	{  3,  5 },
Ivan Mahonin b4b587
	{  7,  5 },
Ivan Mahonin b4b587
	{  7,  7 },
Ivan Mahonin b4b587
	{  3,  7 },
Ivan Mahonin b4b587
	{  3, 10 },
Ivan Mahonin b4b587
	{  0, 10 } };
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static int enableConvex = TRUE;
Ivan Mahonin b4b587
static int enableFill = TRUE;
Ivan Mahonin b4b587
static int enableStroke = TRUE;
Ivan Mahonin b4b587
static int enableTexture = TRUE;
Ivan Mahonin b4b587
static int enableStrokeTex = TRUE;
Ivan Mahonin b4b587
static int enableAA = TRUE;
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static Animation anim;
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static unsigned long long frameTimes[20];
Ivan Mahonin b4b587
static int frameIndex;
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static void drawRandom(const double *shape, int count) {
Ivan Mahonin b4b587
	double h = windowGetHeight();
Ivan Mahonin b4b587
	double w = windowGetWidth();
Ivan Mahonin b4b587
	srand(0);
Ivan Mahonin b4b587
	for(int i = 0; i < 1000; ++i) {
Ivan Mahonin b4b587
		double size = 16 + randomFloat()*(h/2 - 16);
Ivan Mahonin b4b587
		double x = randomFloat()*(w - size) + size/2;
Ivan Mahonin b4b587
		double y = randomFloat()*(h - size) + size/2;
Ivan Mahonin b4b587
		double a = randomFloat()*360;
Ivan Mahonin b4b587
		
Ivan Mahonin b4b587
		saveState();
Ivan Mahonin b4b587
		translate(x, y);
Ivan Mahonin b4b587
		zoom(size/10);
Ivan Mahonin b4b587
		rotate(a);
Ivan Mahonin b4b587
		translate(-5, -5);
Ivan Mahonin b4b587
		moveTo(shape[0], shape[1]);
Ivan Mahonin b4b587
		for(int k = 2; k < count; k += 2)
Ivan Mahonin b4b587
			lineTo(shape[k], shape[k+1]);
Ivan Mahonin b4b587
		closePath();
Ivan Mahonin b4b587
		restoreState();
Ivan Mahonin b4b587
	}
Ivan Mahonin b4b587
}
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
static void drawGrid(const double *shape, int count) {
Ivan Mahonin b4b587
	saveState();
Ivan Mahonin b4b587
	const double s = 16;
Ivan Mahonin b4b587
	double angle = windowGetSeconds()*20;
Ivan Mahonin b4b587
	zoom(64/s);
Ivan Mahonin b4b587
	for(int i = 0; i < 8; ++i) {
Ivan Mahonin b4b587
		for(int j = 0; j < 16; ++j) {
Ivan Mahonin b4b587
			saveState();
Ivan Mahonin b4b587
			translate(s/2, s/2);
Ivan Mahonin b4b587
			rotate(angle);
Ivan Mahonin b4b587
			translate(3-s/2, 3-s/2);
Ivan Mahonin b4b587
			moveTo(shape[0], shape[1]);
Ivan Mahonin b4b587
			for(int k = 2; k < count; k += 2)
Ivan Mahonin b4b587
				lineTo(shape[k], shape[k+1]);
Ivan Mahonin b4b587
			closePath();
Ivan Mahonin b4b587
			restoreState();
Ivan Mahonin b4b587
			translate(s, 0);
Ivan Mahonin b4b587
		}
Ivan Mahonin b4b587
		translate(-16*s, s);
Ivan Mahonin b4b587
	}
Ivan Mahonin b4b587
	restoreState();
Ivan Mahonin b4b587
}
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
void benchmarkInit() {
Ivan Mahonin b4b587
	anim = createAnimationEx("data/sprite/bricks-tile.png", TRUE, TRUE, TRUE);
Ivan Mahonin b4b587
}
Ivan Mahonin b4b587
Ivan Mahonin b4b587
Ivan Mahonin b4b587
void benchmarkDraw() {
Ivan Mahonin b4b587
	saveState();
Ivan Mahonin b4b587
	noFill();
Ivan Mahonin b4b587
	noStroke();
Ivan Mahonin b4b587
	disableAntialiasing();
Ivan Mahonin b4b587
	if (enableFill) fill(colorByRGBA(1, 1, 1, 1));
Ivan Mahonin b4b587
	if (enableStroke) stroke(colorByRGBA(0.5, 0.5, 0.5, 1));
Ivan Mahonin b4b587
	if (enableTexture) fillTexture(anim, 0, 0, 16, 16, FALSE);
Ivan Mahonin b4b587
	if (enableStrokeTex) strokeTexture(anim, 0, 0, 16, 16, TRUE);
Ivan Mahonin b4b587
	if (enableAA) enableAntialiasing();
Ivan Mahonin b4b587
	
Ivan Mahonin b4b587
	const double *shape = enableConvex ? *convexShape : *nonConvexShape;
Ivan Mahonin b4b587
	int count = enableConvex ? (int)(sizeof(convexShape)/sizeof(**convexShape))
Ivan Mahonin b4b587
	                         : (int)(sizeof(nonConvexShape)/sizeof(**nonConvexShape));
Ivan Mahonin b4b587
	
Ivan Mahonin b4b587
	drawRandom(shape, count);
Ivan Mahonin b4b587
	drawGrid(shape, count);
Ivan Mahonin b4b587
	restoreState();
Ivan Mahonin b4b587
	
Ivan Mahonin b4b587
	int frameCount = (int)(sizeof(frameTimes)/sizeof(*frameTimes));
Ivan Mahonin b4b587
	unsigned long long t = windowGetMonotonicMilliseconds();
Ivan Mahonin b4b587
	unsigned long long dt = t - frameTimes[frameIndex];
Ivan Mahonin b4b587
	frameTimes[frameIndex] = t;
Ivan Mahonin b4b587
	frameIndex = (frameIndex + 1)%frameCount;
Ivan Mahonin b4b587
	double fps = dt > 0 ? frameCount*1000.0/(double)dt : 0.0;
Ivan Mahonin b4b587
	
Ivan Mahonin b4b587
	saveState();
Ivan Mahonin b4b587
	textFontDefault();
Ivan Mahonin b4b587
	textSize(16);
Ivan Mahonin b4b587
	textf(16, 16, "fps: %6.2f", fps);
Ivan Mahonin b4b587
	text( 16, 48,
Ivan Mahonin b4b587
		"c - convex\n"
Ivan Mahonin b4b587
		"f - fill\n"
Ivan Mahonin b4b587
		"s - stroke\n"
Ivan Mahonin b4b587
		"t - texture\n"
Ivan Mahonin b4b587
		"y - stroke texture\n"
Ivan Mahonin b4b587
		"a - antialiasing" );
Ivan Mahonin b4b587
	restoreState();
Ivan Mahonin b4b587
	
Ivan Mahonin b4b587
	if (keyWentDown("c")) enableConvex = !enableConvex;
Ivan Mahonin b4b587
	if (keyWentDown("f")) enableFill = !enableFill;
Ivan Mahonin b4b587
	if (keyWentDown("s")) enableStroke = !enableStroke;
Ivan Mahonin b4b587
	if (keyWentDown("t")) enableTexture = !enableTexture;
Ivan Mahonin b4b587
	if (keyWentDown("y")) enableStrokeTex = !enableStrokeTex;
Ivan Mahonin b4b587
	if (keyWentDown("a")) enableAA = !enableAA;
Ivan Mahonin b4b587
}
Ivan Mahonin b4b587