Reflection works now. master
authorethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 20:18:27 +0000 (20:18 +0000)
committerethereal <ethereal@ethv.net>
Wed, 24 Jun 2015 20:18:27 +0000 (20:18 +0000)
src/ecore/render.c
src/ecore/render.h
src/ecore/rreq.c
src/ewrap/main.c

index 55708d4..2450fec 100644 (file)
@@ -4,7 +4,6 @@
 
 uint32_t render_start, render_end;
 uint8_t in_buffer[0x2000];
-void *in_buffer_ptr = in_buffer;
 
 shm_region_t *buf_region;
 shm_sph_t *spheres;
@@ -49,6 +48,7 @@ int sphere_intersect(shm_sph_t *sph, vector_t *ray, vector_t *dir,
 }
 
 int find_closest(vector_t *ray, vector_t *dir, float *min_i, int *min_ind) {
+    *min_i = 0;
     *min_ind = -1;
     for(int i = 0; i < buf_region->sph_count; i ++) {
         float intersect = 0;
@@ -96,7 +96,7 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
         add_vectors(&r, dir, &r);
         norm_vector(&r);
 
-        set_vector(&r, 0.0, 0.0, -1.0, 0.0);
+        //set_vector(&r, 1.0, 0.0, 0.0, 0.0);
 
         /*vector_t rloc;
         mul_vector(&r, 1e-2, &rloc);
@@ -160,7 +160,7 @@ vector_t trace(vector_t *ray, vector_t *dir, int depth) {
 }
 
 void render_range() {
-    buf_region = in_buffer_ptr;
+    buf_region = (void *)&in_buffer[0];
     spheres = (void *)(in_buffer + buf_region->sph_off);
     materials = (void *)(in_buffer + buf_region->mat_off);
     lights = (void *)(in_buffer + buf_region->light_off);
@@ -181,7 +181,7 @@ void render_range() {
     /* Calculate camera plane basis vectors. */
     vector_t cam_basisx, cam_basisy;
     float aratio = (float)buf_region->width / (float)buf_region->height;
-    set_vector(&cam_basisx, -aratio, 0.0, 0.0, 0.0);
+    set_vector(&cam_basisx, aratio, 0.0, 0.0, 0.0);
     rotate_vector(&cam_rot, &cam_basisx, &cam_basisx);
     set_vector(&cam_basisy, 0.0, -1.0, 0.0, 0.0);
     rotate_vector(&cam_rot, &cam_basisy, &cam_basisy);
@@ -205,7 +205,7 @@ void render_range() {
         }
 
         /* Begin trace */
-        vector_t col = trace(&cam_pos, &ray_dir, 2);
+        vector_t col = trace(&cam_pos, &ray_dir, 3);
 
         /* Write back result into framebuffer. */
         write_render_result(
index 1db873f..110b7b9 100644 (file)
@@ -4,7 +4,7 @@
 #include <stdint.h>
 
 extern uint32_t render_start, render_end;
-extern void *in_buffer_ptr;
+extern uint8_t in_buffer[0x2000];
 extern uint32_t *out_buffer_ptr;
 
 void render_range();
index c3114a0..ce38605 100644 (file)
@@ -54,7 +54,7 @@ void handle_range_request(int id) {
         tdesc->count = (1 << 16) | (shm_region->data_end>>2);
         tdesc->outer_stride = 0;
         tdesc->src_addr = (void *)shm_region;
-        tdesc->dst_addr = e_get_global_address(target_r, target_c, in_buffer_ptr);
+        tdesc->dst_addr = e_get_global_address(target_r, target_c, (void *)&in_buffer[0]);
         // initiate DMA
         uint32_t value = E_DMA_STARTUP | ((uint32_t)&dma_desc << 16);
         *(uint32_t *)e_get_global_address(target_r, target_c,
index 9dd0e0c..50a0c03 100644 (file)
@@ -81,7 +81,7 @@ int main() {
     material->shininess = 1.0;
     material->sr = material->sg = material->sb = 1.0;
     material->a = material->s = material->d = 1.0;
-    material->ref = 0.1;
+    material->ref = 1.0;
 
     material ++;
     material->r = material->b = 0.0;
@@ -89,19 +89,19 @@ int main() {
     material->shininess = 1.0;
     material->sr = material->sg = material->sb = 1.0;
     material->a = material->s = material->d = 1.0;
-    material->ref = 0.1;
+    material->ref = 1.0;
 
     shm_region->sph_count = 2;
     shm_region->sph_off = shm_region->mat_off + sizeof(*material)*shm_region->mat_count;
     shm_sph_t *sphere = (void *)((uint8_t*)shm_region + shm_region->sph_off);
-    sphere->x = 0.5;
+    sphere->x = -0.5;
     sphere->y = 0.0;
     sphere->z = 3.1;
     sphere->r = 0.5;
     sphere->mat = 0;
 
     sphere ++;
-    sphere->x = -0.5;
+    sphere->x = 0.5;
     sphere->y = 0.0;
     sphere->z = 3.1;
     sphere->r = 0.5;
@@ -121,6 +121,7 @@ int main() {
     light->b = 1.0;
 
     shm_region->data_end = shm_region->light_off + sizeof(*light)*shm_region->light_count;
+    shm_region->fb_off = shm_region->data_end + 4;
     printf("data_end: %lx\n", shm_region->data_end);
     /*
     const uint32_t in_buffer_address = 0x52e0;
@@ -151,7 +152,7 @@ int main() {
     
     fprintf(fp, "P3 %lu %lu 255\n", shm_region->width, shm_region->height);
     for(int i = 0; i < shm_region->width * shm_region->height; i ++) {
-        uint32_t res = *((uint32_t *)shm_region + 0x200/4 + i);
+        uint32_t res = *((uint32_t *)shm_region + shm_region->fb_off/4 + i);
         fprintf(fp, "%lu %lu %lu  ", res & 0xfe, (res >> 8) & 0xff, (res >> 16) & 0xff);
         if(((i+1) % shm_region->width) == 0) fprintf(fp, "\n");
     }