Fixed glaring bug in al_check macro

dev
Shariq Shah 9 years ago
parent 0e8c68a44a
commit 14992ad143
  1. 4
      build/linux/makefile
  2. 1
      orgfile.org
  3. 21
      src/bounding_volumes.c
  4. 3
      src/camera.c
  5. 3
      src/game.c
  6. 8
      src/geometry.c
  7. 33
      src/geometry.h
  8. 20
      src/model.c
  9. 2
      src/sound.h
  10. 21
      src/transform.c
  11. 3
      src/transform.h

@ -11,8 +11,8 @@ OBJS_RELEASE = $(patsubst %.c,.release/%.o,$(SRCS))
OBJS_DEBUG = $(patsubst %.c,.debug/%.o,$(SRCS))
CFLAGS = -Wall -I$(INCLUDE_DIR) -DUSE_GLAD
CFLAGS_DEBUG = -g -DGL_DEBUG_CONTEXT -DAL_DEBUG -std=c99
CFLAGS_RELEASE = -O3
LFLAGS = -lSDL2 -lopenal -lGL -lsndio -lpthread -ldl -lm
CFLAGS_RELEASE = -O2
LFLAGS = -lSDL2 -lpthread -ldl -lm -lopenal -lsndio -lGL
all: release

@ -110,6 +110,7 @@ x Font atlas proper cleanup
- Custom rendering for gui
** TODO Allow passsing base path as commandline argument?
** TODO Better handling incase assets folder is not found?
** TODO OpenAL not working in release builds
** DONE 3d sound using OpenAL
- State "DONE" from "TODO" [2017-03-23 Thu 01:43]
** TODO Ogg format loading and playback

@ -32,23 +32,32 @@ int bv_intersect_frustum_box(vec4* frustum, struct Bounding_Box* box, struct Tra
int bv_intersect_frustum_sphere(vec4* frustum, struct Bounding_Sphere* sphere, struct Transform* transform)
{
int intersect_type = IT_INSIDE;
vec3 center;
vec3_add(&center, &sphere->center, &transform->position);
vec3_mul(&center, &center, &transform->scale);
int intersect_type = IT_INSIDE;
vec3 center;
float radius = sphere->radius;
vec3 abs_pos, abs_scale;
transform_get_absolute_pos(transform, &abs_pos);
transform_get_absolute_scale(transform, &abs_scale);
float max_scale_dimension = fabsf(abs_scale.x);
if(fabsf(abs_scale.y) > max_scale_dimension) max_scale_dimension = fabsf(abs_scale.y);
if(fabsf(abs_scale.z) > max_scale_dimension) max_scale_dimension = fabsf(abs_scale.z);
radius *= max_scale_dimension;
vec3_fill(&center, 0.f, 0.f, 0.f);
vec3_add(&center, &sphere->center, &abs_pos);
//vec3_mul(&center, &center, &transform->scale);
for(int i = 0; i < 6; i++)
{
vec3 plane_normal = {frustum[i].x, frustum[i].y, frustum[i].z};
float distance = frustum[i].w;
float dot = vec3_dot(&plane_normal, &center) + distance;
if(dot < -sphere->radius)
if(dot < -radius)
{
intersect_type = IT_OUTSIDE;
return intersect_type;
}
if(fabsf(dot) < sphere->radius)
if(fabsf(dot) < radius)
{
intersect_type = IT_INTERSECT;
return intersect_type;

@ -13,6 +13,7 @@
#include <assert.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
static struct Camera* camera_list;
static int* empty_indices;
@ -264,7 +265,7 @@ static void update_frustum(struct Camera* camera)
for(int i = 0; i < 6; i++)
{
vec3 plane_xyz = {camera->frustum[i].x, camera->frustum[i].y, camera->frustum[i].z};
float length = vec3_len(&plane_xyz);
float length = fabsf(vec3_len(&plane_xyz));
vec4_scale(&camera->frustum[i], &camera->frustum[i], (1.f / length));
}
}

@ -147,7 +147,8 @@ void scene_setup(void)
int y = rand() % num_suz;
int z = rand() % num_suz;
x++; y++; z++;
struct Entity* suz = scene_add_as_child("Suzanne", NULL, parent_node);
//struct Entity* suz = scene_add_as_child("Suzanne", NULL, parent_node);
struct Entity* suz = scene_add_new("Suzanne", NULL);
struct Model* suz_model = entity_component_add(suz, C_MODEL, "suzanne.pamesh", "Blinn_Phong");
model_set_material_param(suz_model, "diffuse_color", &color);
float spec_str = 80.f;

@ -357,7 +357,7 @@ void geom_render(int index, enum Geometry_Draw_Mode draw_mode)
}
int geom_render_in_frustum(int index,
int geom_render_in_frustum(int index,
vec4* frustum,
struct Transform* transform,
enum Geometry_Draw_Mode draw_mode)
@ -378,3 +378,9 @@ int geom_render_in_frustum(int index,
}
return rendered;
}
struct Bounding_Sphere* geom_bounding_sphere_get(int index)
{
assert(index > -1 && index < array_len(geometry_list));
return &geometry_list[index].bounding_sphere;
}

@ -14,21 +14,22 @@ enum Geometry_Draw_Mode
GDM_NUM_DRAWMODES
};
void geom_init(void);
int geom_create_from_file(const char* name);
int geom_find(const char* filename);
void geom_remove(int index);
void geom_cleanup(void);
void geom_render(int index, enum Geometry_Draw_Mode);
int geom_render_in_frustum(int index,
vec4* frustum,
struct Transform* transform,
enum Geometry_Draw_Mode draw_mode);
int geom_create(const char* name,
vec3* vertices,
vec2* uvs,
vec3* normals,
uint* indices,
vec3* vertex_colors);
void geom_init(void);
int geom_create_from_file(const char* name);
int geom_find(const char* filename);
void geom_remove(int index);
void geom_cleanup(void);
void geom_render(int index, enum Geometry_Draw_Mode);
int geom_render_in_frustum(int index,
vec4* frustum,
struct Transform* transform,
enum Geometry_Draw_Mode draw_mode);
int geom_create(const char* name,
vec3* vertices,
vec2* uvs,
vec3* normals,
uint* indices,
vec3* vertex_colors);
struct Bounding_Sphere* geom_bounding_sphere_get(int index);
#endif

@ -11,6 +11,7 @@
#include "light.h"
#include "editor.h"
#include "variant.h"
#include "bounding_volumes.h"
#include "gl_load.h"
#include <assert.h>
@ -391,6 +392,7 @@ void model_render_all_debug(struct Camera* camera,
const vec4* debug_color)
{
assert(debug_shader > -1);
int geometry = geom_create_from_file("sphere.pamesh");
shader_bind(debug_shader);
{
static mat4 mvp;
@ -400,9 +402,23 @@ void model_render_all_debug(struct Camera* camera,
struct Model* model = &model_list[i];
struct Entity* entity = entity_get(model->node);
struct Transform* transform = entity_component_get(entity, C_TRANSFORM);
int geometry = model->geometry_index;
int geometry_ac = model->geometry_index;
struct Bounding_Sphere* sphere = geom_bounding_sphere_get(geometry_ac);
struct Transform temp_trans;
memcpy(&temp_trans, transform, sizeof(struct Transform));
temp_trans.node = -1;
vec3_scale(&temp_trans.scale, &temp_trans.scale, sphere->radius);
transform_update_transmat(&temp_trans);
struct Entity* parent = entity_get(entity->parent);
if(parent)
{
struct Transform* parent_transform = entity_component_get(parent, C_TRANSFORM);
mat4_mul(&temp_trans.trans_mat, &temp_trans.trans_mat, &parent_transform->trans_mat);
}
mat4_identity(&mvp);
mat4_mul(&mvp, &camera->view_proj_mat, &transform->trans_mat);
//mat4_mul(&mvp, &camera->view_proj_mat, &transform->trans_mat);
mat4_mul(&mvp, &camera->view_proj_mat, &temp_trans.trans_mat);
shader_set_uniform_mat4(debug_shader, "mvp", &mvp);
geom_render(geometry, draw_mode);
}

@ -6,7 +6,7 @@
#ifdef AL_DEBUG
#define al_check(expr) {expr; sound_error_check(__FILE__, __LINE__, #expr);}
#else
#define al_check(expr);
#define al_check(expr) expr;
#endif
struct Sound_Source

@ -48,17 +48,19 @@ int transform_create(int node)
void transform_translate(struct Transform* transform, vec3* amount, enum Transform_Space space)
{
vec3 translation_amount;
vec3_assign(&translation_amount, amount);
if(space == TS_LOCAL)
{
quat_mul_vec3(amount, &transform->rotation, amount);
quat_mul_vec3(&translation_amount, &transform->rotation, &translation_amount);
}
else if(space == TS_PARENT)
{
struct Entity* parent = entity_get_parent(transform->node);
struct Transform* parent_tran = entity_component_get(parent, C_TRANSFORM);
quat_mul_vec3(amount, &parent_tran->rotation, amount);
quat_mul_vec3(&translation_amount, &parent_tran->rotation, &translation_amount);
}
vec3_add(&transform->position, &transform->position, amount);
vec3_add(&transform->position, &transform->position, &translation_amount);
transform_update_transmat(transform);
}
void transform_rotate(struct Transform* transform,
@ -175,7 +177,6 @@ void transform_update_transmat(struct Transform* transform)
transform_update_transmat(child_tran);
}
}
entity_sync_components(entity);
}
}
@ -211,6 +212,18 @@ void transform_get_absolute_pos(struct Transform* transform, vec3* res)
vec3_add(res, res, &transform->position);
}
void transform_get_absolute_scale(struct Transform* transform, vec3* res)
{
struct Entity* entity = entity_get(transform->node);
struct Entity* parent = entity_get(entity->parent);
if(parent)
{
struct Transform* parent_tran = entity_component_get(parent, C_TRANSFORM);
transform_get_absolute_scale(parent_tran, res);
}
vec3_add(res, res, &transform->scale);
}
void transform_get_absolute_rot(struct Transform* transform, quat* res)
{
struct Entity* entity = entity_get(transform->node);

@ -32,9 +32,10 @@ void transform_get_up(struct Transform* transform, vec3* res);
void transform_get_right(struct Transform* transform, vec3* res);
void transform_update_transmat(struct Transform* transform);
void transform_get_absolute_pos(struct Transform* transform, vec3* res);
void transform_get_absolute_rot(struct Transform* transform, quat* res);
void transform_get_absolute_scale(struct Transform* transform, vec3* res);
void transform_get_absolute_lookat(struct Transform* transform, vec3* res);
void transform_get_absolute_up(struct Transform* transform, vec3* res);
void transform_get_absolute_rot(struct Transform* transform, quat* res);
void transform_get_absolute_right(struct Transform* transform, vec3* res);
void transform_get_absolute_forward(struct Transform* transform, vec3* res);

Loading…
Cancel
Save