Browse Source

fix leaky memory, fix movement crash with movement

richal-scene-stuff
alistair 4 years ago
parent
commit
8fc2e45a47
  1. 5
      camera.c
  2. 2
      distfuncs.c
  3. 99
      main.c
  4. 1
      main.h

5
camera.c

@ -6,9 +6,9 @@ @@ -6,9 +6,9 @@
#include "camera.h"
#define DRAW_DIST 255.0
#define MAX_ITERATIONS 255
#define MAX_ITERATIONS 25
#define EPSILON 0.1
#define NORMAL_EPSILON 0.01
#define NORMAL_EPSILON 0.0001
double dabs(double yeet) {
if (yeet > 0) {
@ -142,7 +142,6 @@ manifoldstep(struct ray *r, double distance) @@ -142,7 +142,6 @@ manifoldstep(struct ray *r, double distance)
manifoldturn(r, r->dir, distance);
return;
struct vec *yaxisold = estimateNormal(r->pos, &manifold);
/* move the vector foward in euclid */

2
distfuncs.c

@ -165,7 +165,6 @@ struct colour yeet_pho(struct ray *ray, struct object *o) { @@ -165,7 +165,6 @@ struct colour yeet_pho(struct ray *ray, struct object *o) {
}
}
printf("diff %f spec %f val %f\n", diffuse_val, spec_val, intensity);
free_vec(camera_vec);
free_vec(reflection);
free_vec(surf_norm);
@ -205,6 +204,7 @@ struct object new_sphere(double radius) { @@ -205,6 +204,7 @@ struct object new_sphere(double radius) {
*/
/**
* Creates a new struct object with the given parameters. The position passed
* in should be a vec4 as this is converted to a vec3 when the object is added

99
main.c

@ -20,6 +20,7 @@ SDL_Renderer * ren; @@ -20,6 +20,7 @@ SDL_Renderer * ren;
Uint32 pixels[B_INTERNAL_HEIGHT][B_INTERNAL_WIDTH];
struct object scene_object;
struct camera *camera;
struct SDL_Window* make_window(void) {
if (SDL_Init(SDL_INIT_EVERYTHING) != 0) {
@ -33,70 +34,83 @@ struct SDL_Window* make_window(void) { @@ -33,70 +34,83 @@ struct SDL_Window* make_window(void) {
SDL_WINDOW_RESIZABLE);
}
struct camera camera;
void handle_inputs(void)
{
/* this is so broken it leaks memory everywhere and crashes and idek why
* Pressing UP will crash immediately and anything else will crash
* eventually
*
* It also makes the object disappear off into the 4th dimension
*/
struct ray r;
r.dir = new_vec(4);
r.dir = new_vec(4);
r.pos = new_vec(4);
const double dist = 0.1;
double done = 0;
if (keyboardstate[SDL_SCANCODE_UP]) {
struct ray cameraray = {.pos = copy_vec(camera.pos), .dir = camera.z};
manifoldturn(&cameraray, camera.x, 0);
free_vec(cameraray.pos);
cameraray.pos = copy_vec(camera.pos);
manifoldturn(&cameraray, camera.y, 0);
struct ray cameraray = {.pos = copy_vec(camera->pos), .dir = camera->y};
manifoldturn(&cameraray, camera->x, dist);
free_vec(cameraray.pos);
cameraray.pos = camera.pos;
cameraray.pos = copy_vec(camera->pos);
manifoldturn(&cameraray, camera->z, dist);
cameraray.pos = camera->pos;
manifoldstep(&cameraray, dist);
free_vec(cameraray.pos);
done = dist;
}
if (keyboardstate[SDL_SCANCODE_DOWN]) {
struct ray cameraray = {.pos = copy_vec(camera.pos), .dir = camera.z};
manifoldturn(&cameraray, camera.x, dist);
struct ray cameraray = {.pos = copy_vec(camera->pos), .dir = camera->y};
manifoldturn(&cameraray, camera->x, dist);
free_vec(cameraray.pos);
cameraray.pos = copy_vec(camera.pos);
manifoldturn(&cameraray, camera.y, dist);
cameraray.pos = copy_vec(camera->pos);
manifoldturn(&cameraray, camera->z, -dist);
free_vec(cameraray.pos);
cameraray.pos = camera.pos;
cameraray.pos = camera->pos;
manifoldstep(&cameraray, -dist);
done = -dist;
}
if (keyboardstate[SDL_SCANCODE_LEFT]) {
struct ray cameraray = {.pos = copy_vec(camera.pos), .dir = camera.x};
manifoldturn(&cameraray, camera.z, dist);
struct ray cameraray = {.pos = copy_vec(camera->pos), .dir = camera->x};
manifoldturn(&cameraray, camera->z, dist);
free_vec(cameraray.pos);
cameraray.pos = copy_vec(camera.pos);
cameraray.pos = copy_vec(camera->pos);
manifoldturn(&cameraray, camera.y, dist);
manifoldturn(&cameraray, camera->y, dist);
free_vec(cameraray.pos);
cameraray.pos = camera.pos;
cameraray.pos = camera->pos;
manifoldstep(&cameraray, -dist);
done = -dist;
}
if (keyboardstate[SDL_SCANCODE_RIGHT]) {
struct ray cameraray = {.pos = copy_vec(camera.pos), .dir = camera.x};
manifoldturn(&cameraray, camera.z, dist);
struct ray cameraray = {.pos = copy_vec(camera->pos), .dir = camera->x};
manifoldturn(&cameraray, camera->z, dist);
free_vec(cameraray.pos);
cameraray.pos = copy_vec(camera.pos);
cameraray.pos = copy_vec(camera->pos);
manifoldturn(&cameraray, camera.y, dist);
manifoldturn(&cameraray, camera->y, dist);
free_vec(cameraray.pos);
cameraray.pos = camera.pos;
cameraray.pos = camera->pos;
manifoldstep(&cameraray, dist);
done = -dist;
}
r.dir->elements[0] = -1;
if (keyboardstate[SDL_SCANCODE_ESCAPE]) {
exitnow = 1;
}
manifoldstep(&r, 0.1);
if (fabs(done) > 0.00001)
manifoldstep(&r, done);
free_vec(r.dir);
free_vec(r.pos);
return;
};
@ -119,8 +133,8 @@ int input_loop(void *ptr) { @@ -119,8 +133,8 @@ int input_loop(void *ptr) {
break;
}
}
handle_inputs();
SDL_Delay(50);
handle_inputs();
}
return 0;
}
@ -153,23 +167,17 @@ struct colour yeet_whit(struct ray *ray, struct object* obj) { @@ -153,23 +167,17 @@ struct colour yeet_whit(struct ray *ray, struct object* obj) {
void setup_camera_scene()
{
/*
struct object white_sphere = new_sphere(10);
white_sphere.sol.pos.elements[0] = 0.75;
white_sphere.sol.pos.elements[1] = 0;
white_sphere.sol.pos.elements[2] = 7;
white_sphere.sol.dist = sdf_hplane;
*/
struct vec* white_sphere_pos = new_vec3(0.75, 0, 7);
struct object white_sphere = new_object(white_sphere_pos, 0, 1, sdf_hplane, yeet_whit);
struct object white_sphere = new_object(white_sphere_pos, 0, 1, sdf_box, yeet_whit);
camera.pos = new_vec(4);
camera.x = new_vec(4);
camera.y = new_vec(4);
camera.z = new_vec(4);
camera.x->elements[0] = 1;
camera.y->elements[1] = 1;
camera.z->elements[2] = 1;
camera = calloc(1, sizeof(struct camera));
camera->pos = new_vec(4);
camera->x = new_vec(4);
camera->y = new_vec(4);
camera->z = new_vec(4);
camera->x->elements[0] = 1;
camera->y->elements[1] = 1;
camera->z->elements[2] = 1;
struct vec* other_white_sphere_pos = new_vec3(0, 0, 7);
struct object other_white_sphere = new_sphere(other_white_sphere_pos, 10);
@ -180,7 +188,7 @@ void setup_camera_scene() @@ -180,7 +188,7 @@ void setup_camera_scene()
scene_object = new_scene(1, scene_objects);
scene_object.sol.pos.dimension = 4;
scene_object.sol.pos.elements = camera.pos->elements;
scene_object.sol.pos.elements = camera->pos->elements;
}
@ -206,8 +214,8 @@ int main(int argc, char **argv) { @@ -206,8 +214,8 @@ int main(int argc, char **argv) {
SDL_Thread ** threads = calloc(B_NUM_RAYMARCH_THREADS, sizeof(SDL_Thread *));
setup_camera_scene();
SDL_Thread *input_thread = SDL_CreateThread(input_loop, "input", (void *)NULL);
setup_camera_scene();
while (!exitnow) {
/* clear the view */
@ -240,6 +248,9 @@ int main(int argc, char **argv) { @@ -240,6 +248,9 @@ int main(int argc, char **argv) {
printf("\rframerate: %f", elapsed);
// fflush(stdout);
framct++;
if (framct++ > 2) {
}
}
SDL_DestroyTexture(texture);

1
main.h

@ -33,4 +33,5 @@ void sdlb_draw_col_pixel(struct colour col, int x, int y); @@ -33,4 +33,5 @@ void sdlb_draw_col_pixel(struct colour col, int x, int y);
extern struct object scene_object;
extern int keyboardstate[322]; // 322 is the number of SDLK_DOWN events
extern struct camera *camera;
#endif

Loading…
Cancel
Save