Fixed uninitialized variable.
authorethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 19:39:59 +0000 (19:39 +0000)
committerethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 19:39:59 +0000 (19:39 +0000)
There's a timing issue at play right now that results in a hang sometimes.
Suspected cause is lack of stack space so that a IRQ handler overwrites
global data.

src/CMakeLists.txt
src/ecore/render.c
src/ewrap/main.c

index 7c36ec7..4db3733 100644 (file)
@@ -6,8 +6,8 @@ link_directories($ENV{EPIPHANY_HOME}/tools/host/lib)
 if(${build_ecore})
     set(base ${CMAKE_CURRENT_LIST_DIR}/ecore/)
 
-    add_custom_command(OUTPUT ecore.o DEPENDS ${base}/ecore.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/ecore.c -c -o ecore.o -ffreestanding -nostdlib)
-    add_custom_command(OUTPUT rreq.o DEPENDS ${base}/rreq.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/rreq.c -c -o rreq.o -ffreestanding -nostdlib)
+    add_custom_command(OUTPUT ecore.o DEPENDS ${base}/ecore.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/ecore.c -c -o ecore.o -ffreestanding -nostdlib -Os)
+    add_custom_command(OUTPUT rreq.o DEPENDS ${base}/rreq.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/rreq.c -c -o rreq.o -ffreestanding -nostdlib -Os)
     add_custom_command(OUTPUT render.o DEPENDS ${base}/render.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/render.c -c -o render.o -ffreestanding -nostdlib -Os)
     add_custom_command(OUTPUT vmath.o DEPENDS ${base}/../vmath.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/../vmath.c -c -o vmath.o -ffreestanding -nostdlib -Os)
     add_custom_command(OUTPUT lmath.o DEPENDS ${base}/lmath.c COMMAND e-gcc -Wall -Wextra -std=c99 ${base}/lmath.c -c -o lmath.o -ffreestanding -nostdlib -Os)
index de9e8f9..7833f3f 100644 (file)
@@ -97,7 +97,7 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
     ret.c[0] = ret.c[1] = ret.c[2] = ret.c[3] = 0.0;
 
     shm_mat_t *mat = materials + spheres[min_ind].mat;
-    if(mat->ref > 0 && depth && 0) {
+    if(mat->ref > 0 && depth) {
         vector_t r;
         /* formula: r = d - 2(dn)n */
         mul_vector(&normal, -2 * dot_vectors(&normal, dir), &r);
@@ -120,6 +120,7 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
         ldir.c[0] = lights[i].x - intersection.c[0];
         ldir.c[1] = lights[i].y - intersection.c[1];
         ldir.c[2] = lights[i].z - intersection.c[2];
+        ldir.c[3] = 0.0;
         norm_vector(&ldir);
 
         /* apply ambient */
@@ -138,7 +139,8 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
 
         /* apply diffuse */
         float diffuse = dot_vectors(&ldir, &normal);
-        if(diffuse < 0) diffuse = -diffuse;
+        //if(diffuse < 0) diffuse = -diffuse;
+        if(diffuse < 0) diffuse = 0;
 
         diffuse *= lights[i].d * mat->d;
         ret.c[0] += diffuse * mat->r * lights[i].r;
index 42eaf4a..21784f6 100644 (file)
@@ -25,7 +25,7 @@ int main() {
 
     e_set_host_verbosity(H_D0);
 
-    int r = e_shm_alloc(&mem, "raytrace_shm", 1<<20);
+    int r = e_shm_alloc(&mem, "raytrace_shm", 4<<20);
     if(r != E_OK) r = e_shm_attach(&mem, "raytrace_shm");
     if(r != E_OK) {
         printf("Failed to attach to shared memory!\n");
@@ -60,8 +60,8 @@ int main() {
     // 
     while(shm_region->finished == 0) {}
     printf("Finished init! Filling data...\n");
-    shm_region->width = 0x100;
-    shm_region->height = 0x100;
+    shm_region->width = 0x200;
+    shm_region->height = 0x200;
     shm_region->fb_off = 0x200;
 
 
@@ -110,11 +110,11 @@ int main() {
     shm_region->light_count = 1;
     shm_region->light_off = shm_region->sph_off + sizeof(*sphere)*shm_region->sph_count;
     shm_light_t *light = (void *)((uint8_t*)shm_region + shm_region->light_off);
-    light->x = 1;
+    light->x = 0;
     light->y = 0;
     light->z = 0;
-    light->a = 0.0;
-    light->d = 1.0;
+    light->a = 0.3;
+    light->d = 0.7;
     light->s = 0.0;
     light->r = 1.0;
     light->g = 1.0;