Browse Source

only error is with textures

IverMartinson 7 months ago
parent
commit
715f0ade8e

BIN
builds/final binaries/librasteriver.so


BIN
builds/final binaries/main.bin


+ 4 - 1
readme.md

@@ -77,4 +77,7 @@ Rasterizer + Iver = RasterIver
 - [ ] add ability to request objects multiple times 
 - [ ] give objects IDs or some way to track them so that you can remove them dynamically
 - [ ] give objects IDs or some way to track them so that you can remove them dynamically
-- [ ] make CUDA version because OpenCL is slow with NVIDIA
+- [ ] make CUDA version because OpenCL is slow with NVIDIA
+- [ ] fix center of perspective being in the wrong spot
+- [ ] make flag for world scale/master scale (scales everything. from origin? from object origins?)
+- [ ] I think calculations for debugging memory usage are outdated/wrong

+ 1 - 0
src/RasterIver/kernels/master_kernel.h

@@ -162,6 +162,7 @@ __kernel void raster_kernel(__global Object* objects, __global float* verticies,
         int transformed_vertex_index = objects[base].modelInfo.transformedVertexOffset;\
         int transformed_normal_index =   objects[base].modelInfo.transformedNormalOffset;\
         \
+        \
         for (int triangle = 0; triangle < triangle_count; triangle++){\
             int triangle_base = (triangle + triangle_index) * 9; \
             \

+ 16 - 16
src/RasterIver/kernels/transformer.h

@@ -162,13 +162,13 @@ __kernel void transformer_kernel(__global Object* objects, __global float* verti
         return;\
         }\
         \
-            rotate_euler(&x0, &y0, &z0, object_r_x, object_r_y, object_r_z);\
-            rotate_euler(&x1, &y1, &z1, object_r_x, object_r_y, object_r_z);\
-            rotate_euler(&x2, &y2, &z2, object_r_x, object_r_y, object_r_z);\
-            \
-            rotate_euler(&n_x0, &n_y0, &n_z0, object_r_x, object_r_y, object_r_z);\
-            rotate_euler(&n_x1, &n_y1, &n_z1, object_r_x, object_r_y, object_r_z);\
-            rotate_euler(&n_x2, &n_y2, &n_z2, object_r_x, object_r_y, object_r_z);\
+        rotate_euler(&x0, &y0, &z0, object_r_x, object_r_y, object_r_z);\
+        rotate_euler(&x1, &y1, &z1, object_r_x, object_r_y, object_r_z);\
+        rotate_euler(&x2, &y2, &z2, object_r_x, object_r_y, object_r_z);\
+        \
+        rotate_euler(&n_x0, &n_y0, &n_z0, object_r_x, object_r_y, object_r_z);\
+        rotate_euler(&n_x1, &n_y1, &n_z1, object_r_x, object_r_y, object_r_z);\
+        rotate_euler(&n_x2, &n_y2, &n_z2, object_r_x, object_r_y, object_r_z);\
         \
         z0 = (z0 * object_s_z + object_z);\
         x0 = (x0 * object_s_x + object_x) / z0 * horizontal_fov_factor;\
@@ -180,15 +180,15 @@ __kernel void transformer_kernel(__global Object* objects, __global float* verti
         y2 = (y2 * object_s_y + object_y) / z2 * horizontal_fov_factor;\
         x2 = (x2 * object_s_x + object_x) / z2 * vertical_fov_factor;\
         \
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + i0 + 0] = x0;\
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + i0 + 1] = y0;\
-        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + i0 + 2] = z0;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + i1 + 0] = x1;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + i1 + 1] = y1;\
-        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + i1 + 2] = z1;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + i2 + 0] = x2;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + i2 + 1] = y2;\
-        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + i2 + 2] = z2;\
+        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 0] = x0;\
+        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 1] = y0;\
+        transformed_verticies[(triangles[triangle_base + 0] + transformed_vertex_index) * 3 + 2] = z0;\
+        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 0] = x1;\
+        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 1] = y1;\
+        transformed_verticies[(triangles[triangle_base + 1] + transformed_vertex_index) * 3 + 2] = z1;\
+        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 0] = x2;\
+        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 1] = y2;\
+        transformed_verticies[(triangles[triangle_base + 2] + transformed_vertex_index) * 3 + 2] = z2;\
         \
         transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 0] = n_x0;\
         transformed_normals[(triangles[triangle_base + 0] + transformed_normal_index) * 3 + 1] = n_y0;\

+ 30 - 30
src/RasterIver/source code/rasteriver.c

@@ -822,30 +822,6 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
         debug(RI_DEBUG_MEDIUM, "Failed to Allocate Texture Info Buffer");
     }
 
-    if (!use_cpu && texture_count > 0){
-        textures_memory_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * textures_size * 4, textures, &error);
-        erchk(error);
-    
-        if (textures_memory_buffer == NULL){
-            debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Textures cl_mem Buffer");
-        }
-
-        texture_info_memory_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * tis * texture_count, texture_info, &error);
-        erchk(error);
-    
-        if (texture_info_memory_buffer == NULL){
-            debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Texture Info cl_mem Buffer");
-        }
-
-        erchk(clEnqueueWriteBuffer(queue, textures_memory_buffer, CL_TRUE, 0, sizeof(unsigned char) * 4 * textures_size, textures, 0, NULL, NULL));
-        erchk(clFinish(queue));
-
-        erchk(clEnqueueWriteBuffer(queue, texture_info_memory_buffer, CL_TRUE, 0, sizeof(int) * tis * texture_count, texture_info, 0, NULL, NULL));
-        erchk(clFinish(queue));
-
-        debug(1, "Wrote Textures Buffer and Texture Info Buffer");
-    }
-
     int value_offset = 0;
     for (int i_current_texture = 0; i_current_texture < texture_count; i_current_texture++){
         char *current_texture_name = texture_names[i_current_texture];
@@ -862,23 +838,47 @@ RI_objects RI_RequestObjects(RI_newObject *RI_ObjectBuffer, int RI_ObjectsToRequ
             textures[2 + value_offset] = 255;
             textures[3 + value_offset] = 128;
         }
-        else {
+        else {        
+            texture_info[i_current_texture * tis] = temp_width;
+            texture_info[i_current_texture * tis + 1] = temp_height;
+            texture_info[i_current_texture * tis + 2] = value_offset;
+
             debug(RI_DEBUG_HIGH, "Texture Info for Texture #%d: width: %d, height: %d, offset: %d", i_current_texture, texture_info[i_current_texture * tis], texture_info[i_current_texture * tis + 1], texture_info[i_current_texture * tis + 2]);
 
             for (int i_current_value = 0; i_current_value < temp_width * temp_height * 4; i_current_value++){
                 textures[i_current_value + value_offset] = temp_texture[i_current_value];
             }
         }
-
-        texture_info[i_current_texture * tis] = temp_width;
-        texture_info[i_current_texture * tis + 1] = temp_height;
-        texture_info[i_current_texture * tis + 2] = value_offset;
-
+        
         value_offset += temp_width * temp_height * 4;
         
         stbi_image_free(temp_texture);
     }
 
+    if (!use_cpu && texture_count > 0){
+        textures_memory_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(unsigned char) * textures_size * 4, textures, &error);
+        erchk(error);
+    
+        if (textures_memory_buffer == NULL){
+            debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Textures cl_mem Buffer");
+        }
+
+        texture_info_memory_buffer = clCreateBuffer(context, CL_MEM_READ_ONLY | CL_MEM_COPY_HOST_PTR, sizeof(int) * tis * texture_count, texture_info, &error);
+        erchk(error);
+    
+        if (texture_info_memory_buffer == NULL){
+            debug(RI_DEBUG_LOW, "clCreateBuffer Failed for Texture Info cl_mem Buffer");
+        }
+
+        erchk(clEnqueueWriteBuffer(queue, textures_memory_buffer, CL_TRUE, 0, sizeof(unsigned char) * 4 * textures_size, textures, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        erchk(clEnqueueWriteBuffer(queue, texture_info_memory_buffer, CL_TRUE, 0, sizeof(int) * tis * texture_count, texture_info, 0, NULL, NULL));
+        erchk(clFinish(queue));
+
+        debug(1, "Wrote Textures Buffer and Texture Info Buffer");
+    }
+
     for (int i = 0; i < face_count * 9; i++){
         triangles[i]--;
     }

+ 1 - 1
src/launch program/main.c

@@ -15,7 +15,7 @@ int main(){
     RI_SetFlag(RI_FLAG_DEBUG_FPS, 0);
     RI_SetFlag(RI_FLAG_SHOW_FPS, 1);
     RI_SetFlag(RI_FLAG_SHOW_FRAME, 0);
-    RI_SetFlag(RI_FLAG_SHOW_BUFFER, RI_BUFFER_NORMAL);
+    RI_SetFlag(RI_FLAG_SHOW_BUFFER, RI_BUFFER_COMPLETE);
     RI_SetFlag(RI_FLAG_CLEAN_POLYGONS, 1);
     RI_SetFlag(RI_FLAG_POPULATE_POLYGONS, 0);
     RI_SetFlag(RI_FLAG_BE_MASTER_RENDERER, 1);