Browse Source

scream

perf
alistair 3 years ago
parent
commit
acb2607ba3
  1. 2
      Makefile
  2. 16
      camera.c
  3. 6
      main.c
  4. 37
      vect.c

2
Makefile

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
LINKS = -std=c++20 -lSDL2 -lm -Wall -g -rdynamic -fsanitize=address
LINKS = -std=c++20 -lSDL2 -lm -Wall -g -fsanitize=address -O0
all: colours.o vect.o distfuncs.o camera.o scene.o
g++ main.c colours.o vect.o distfuncs.o camera.o scene.o $(LINKS) -o blackpink

16
camera.c

@ -5,8 +5,8 @@ @@ -5,8 +5,8 @@
#include "distfuncs.h"
#include "camera.h"
#define DRAW_DIST 2550.0
#define MAX_ITERATIONS 2550
#define DRAW_DIST 255.0
#define MAX_ITERATIONS 255
#define EPSILON 0.1
#define NORMAL_EPSILON 0.0001
@ -102,13 +102,13 @@ rotateaxis(struct vec *v, struct vec *k, double a) @@ -102,13 +102,13 @@ rotateaxis(struct vec *v, struct vec *k, double a)
free_vec(p);
}
int vectorisnan(struct vec *v)
bool vectorisnan(struct vec *v)
{
for (int i = 0; i < v->dimension; i++) {
if (v->elements[i] != v->elements[i])
return 1;
if (isnan(v->elements[i]))
return true;
}
return 0;
return false;
}
void
@ -169,6 +169,7 @@ manifoldturn(struct ray *r, struct vec *v, double distance) @@ -169,6 +169,7 @@ manifoldturn(struct ray *r, struct vec *v, double distance)
struct vec *protaxisloc = normalise_vec_ip(reyeet(yaxisold, yaxisnew));
struct vec *temp = copy_vec(v);
rotateaxis(temp, protaxisloc, protamtloc); /* change the direction */
if (!vectorisnan(temp)) {
@ -176,6 +177,7 @@ manifoldturn(struct ray *r, struct vec *v, double distance) @@ -176,6 +177,7 @@ manifoldturn(struct ray *r, struct vec *v, double distance)
v->elements[i] = temp->elements[i];
}
}
free_vec(temp);
free_vec(yaxisnew);
free_vec(yaxisold);
@ -282,7 +284,7 @@ process_pixel(int i, int j) @@ -282,7 +284,7 @@ process_pixel(int i, int j)
{
struct ray r = (struct ray) {
.pos = new_vec(4),
.dir = normalise_vec_ip(new_vec4(i - B_INTERNAL_WIDTH/(2.0), j - B_INTERNAL_HEIGHT/(2.0), 100, 0))
.dir = normalise_vec_ip(new_vec4(i - B_INTERNAL_WIDTH/(2), j - B_INTERNAL_HEIGHT/(2), 100, 0))
};

6
main.c

@ -17,7 +17,7 @@ @@ -17,7 +17,7 @@
#include <sys/types.h>
int keyboardstate[322] = {}; // 322 is the number of SDLK_DOWN events
int exitnow = 0;
static int exitnow = 0;
SDL_Renderer * ren;
Uint32 pixels[B_INTERNAL_HEIGHT][B_INTERNAL_WIDTH];
@ -173,12 +173,12 @@ void setup_camera_scene() @@ -173,12 +173,12 @@ void setup_camera_scene()
const double upper_pos_bound = 5;
//const double upper_pos_bound = 5;
const int num_trees = 4;
int lastelem = 0;
int lastelem = 1;
struct object* scene_objects = (struct object *)malloc((lastelem + 2 * num_trees) * sizeof(struct object));
struct vec *plane_pos = new_vec4(0,2,-5,0);
// scene_objects[0] = new_plane(plane_pos, 1, 1);
scene_objects[0] = new_plane(plane_pos, 1, 1);
for (int i = lastelem; i < lastelem + 2 * num_trees; i+=2) {
struct vec* random_pos = new_random_vec(3, lower_pos_bound, upper_pos_bound);

37
vect.c

@ -5,14 +5,10 @@ @@ -5,14 +5,10 @@
#define MAX_VECTORS 30240
static int exitnow = 0;
static int num_vectors[5] = {};
struct vec5 vec5list[MAX_VECTORS];
struct vec4 vec4list[MAX_VECTORS];
struct vec3 vec3list[MAX_VECTORS];
struct vec2 vec2list[MAX_VECTORS];
struct vec5 vecnlist[5][MAX_VECTORS];
struct vec vecnlist[5][MAX_VECTORS];
/*
struct vec* vecnlist[5] = {(struct vec *)&vec2list,
@ -35,24 +31,24 @@ struct vec *freeveclist[5][MAX_VECTORS]; @@ -35,24 +31,24 @@ struct vec *freeveclist[5][MAX_VECTORS];
struct vec*
new_vec(int num_dimensions)
{
//struct vec* new_vector = calloc(1,sizeof(struct vec));
// deque a free vector
struct vec* new_vector = (struct vec*)malloc(sizeof (struct vec));
/*
char * did;
struct vec* new_vector;
if (num_freevectors[num_dimensions - 2] == 0 && num_vectors[num_dimensions - 2] < MAX_VECTORS) {
new_vector = (struct vec *)&vecnlist[num_dimensions - 2][num_vectors[num_dimensions - 2]];
new_vector = (struct vec *)&(vecnlist[num_dimensions - 2][num_vectors[num_dimensions - 2]]);
num_vectors[num_dimensions - 2]++;
did = "new vec";
} else if (num_freevectors[num_dimensions - 2] > 0){
new_vector = freeveclist[num_dimensions - 2][--num_freevectors[num_dimensions - 2]];
new_vector = freeveclist[num_dimensions - 2][(num_freevectors[num_dimensions - 2]) - 1];
did = "from free store";
} else {
fprintf(stderr, "OUT OF VECTORS %d %d %d\n", num_dimensions, num_vectors[num_dimensions - 2], num_freevectors[num_dimensions - 2]);
exit(0);
exitnow = true;
}
*/
new_vector->dimension = num_dimensions;
new_vector->active = true;
for (int i = 0; i < num_dimensions; i++) {
new_vector->elements[i] = 0;
@ -101,18 +97,22 @@ new_vec_of(int num_dimensions, double value) { @@ -101,18 +97,22 @@ new_vec_of(int num_dimensions, double value) {
void
free_vec(struct vec* a)
{
char *reason;
free(a);
return;
if (a < (struct vec *)vecnlist || a > (struct vec *)(vecnlist + MAX_VECTORS - 1)) {
fprintf(stderr, "WTF BAD VEC %e\n", a);
*(int *)109= 1;
}
if (!a->active) {
fprintf(stderr, "DOUBLE FREE at \n");
*(int *)102= 1;
return;
}
a->active = false;
int ind = a->dimension - 2;
freeveclist[ind][(num_freevectors[ind])++] = a;
freeveclist[ind][num_freevectors[ind]++] = a;
}
/**
@ -122,6 +122,7 @@ struct vec* @@ -122,6 +122,7 @@ struct vec*
copy_vec(struct vec* to_copy)
{
struct vec* new_vector = new_vec(to_copy->dimension);
for (int i = 0; i < to_copy->dimension; i++) {
new_vector->elements[i] = to_copy->elements[i];
}

Loading…
Cancel
Save