Browse Source

Quick (and dirty) change to be able to use OpenMP for rendering.

Godzil 4 years ago
parent
commit
ed347e304d
2 changed files with 11 additions and 1 deletions
  1. 8 1
      source/CMakeLists.txt
  2. 3 0
      source/camera.cpp

+ 8 - 1
source/CMakeLists.txt

@@ -1,4 +1,9 @@
 # To simplify testing, the app is build in two passes,
+option(USE_OPENMP "Build using OpenMP" OFF)
+
+if (USE_OPENMP)
+  find_package(OpenMP REQUIRED)
+endif()
 
 # First most is build as a library
 add_library(rayonnement STATIC)
@@ -11,7 +16,9 @@ file(GLOB RAY_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/*.cpp ${CMAKE_CURRENT_SOURCE_D
 target_include_directories(rayonnement PUBLIC include pattern)
 target_sources(rayonnement PRIVATE ${RAY_HEADERS} ${RAY_SOURCES})
 target_link_libraries(rayonnement LodePNG)
-
+if (USE_OPENMP)
+  target_link_libraries(rayonnement OpenMP::OpenMP_CXX)
+endif()
 # Second we build the main executable
 add_executable(dorayme main.cpp)
 target_include_directories(rayonnement PUBLIC include ${LODEPNG_INCLUDE_FOLDER})

+ 3 - 0
source/camera.cpp

@@ -12,6 +12,8 @@
 #include <ray.h>
 #include <camera.h>
 
+#include <stdio.h>
+
 Camera::Camera(uint32_t hsize, uint32_t vsize, double fov) : verticalSize(vsize), horizontalSize(hsize), fieldOfView(fov)
 {
     double aspectRatio = (double)hsize / (double)vsize;
@@ -62,6 +64,7 @@ Canvas Camera::render(World world, uint32_t depth)
 
     for(y = 0; y < this->verticalSize; y++)
     {
+        #pragma omp parallel for
         for(x = 0; x < this->horizontalSize; x++)
         {
             Ray r = this->rayForPixel(x, y);