瀏覽代碼

Made Changes to allow compilation on MVSC

Angelo1211 7 年之前
父節點
當前提交
d3af7e1620
共有 5 個文件被更改,包括 41 次插入19 次删除
  1. 10 1
      CMakeLists.txt
  2. 1 1
      include/objParser.h
  3. 26 13
      include/shader.h
  4. 1 1
      src/objParser.cpp
  5. 3 3
      src/softwareRenderer.cpp

+ 10 - 1
CMakeLists.txt

@@ -2,7 +2,16 @@ cmake_minimum_required(VERSION 3.7)
 project(softwareRenderer)
 
 set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/modules")
-set(SDL2_PATH "C:\\vs_dev_lib\\SDL2-2.0.8")
+
+if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
+  set(SDL2_PATH "C:\\vs_dev_lib\\SDL2-2.0.8-MinGW")
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
+  # using Intel C++
+elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC")
+  set(SDL2_PATH "C:\\vs_dev_lib\\SDL2-2.0.8-MSVC")
+endif()
+
+
 find_package(SDL2 REQUIRED)
 find_package(OpenMP REQUIRED)
 include_directories(${SDL2_INCLUDE_DIR} include libs)

+ 1 - 1
include/objParser.h

@@ -15,7 +15,7 @@
 //Just a namespace for functions related to loading data from wavefront OBJ files
 namespace OBJ{
     //Assumes that the path given is valid
-    Mesh& buildMeshFromFile(Mesh &mesh, std::string path);
+    void buildMeshFromFile(Mesh &mesh, std::string path);
 
     //Checks if the path actually contains a valid file
     bool fileExists(std::string &path);

+ 26 - 13
include/shader.h

@@ -379,20 +379,21 @@ struct PBRShader : public IShader {
         const int maxLights = numLights;
 
         //Fresnel, normal distribution function and geometry occlusion 
-        Vector3f F[maxLights];
-        float  NDF[maxLights];
-        float  G[maxLights];
+		Vector3f *F = new Vector3f[maxLights];
+        float  *NDF = new float[maxLights];
+        float    *G = new float[maxLights];
         
         //Storing in array for vectorizing
-        Vector3f radianceLights[maxLights];
-        Vector3f interpLightDir[maxLights];
-        Vector3f halfwayDir[maxLights];
-        float  nDotL[maxLights];
-        Vector3f numerator[maxLights];
-        float  invDenominator[maxLights];
-        Vector3f specular[maxLights];
-        Vector3f kD[maxLights];
-        
+        Vector3f *radianceLights = new Vector3f[maxLights];
+        Vector3f *interpLightDir = new Vector3f[maxLights];
+        Vector3f *halfwayDir     = new Vector3f[maxLights];
+		Vector3f *numerator      = new Vector3f[maxLights];
+		Vector3f *specular       = new Vector3f[maxLights];
+		Vector3f *kD		     = new Vector3f[maxLights];
+
+        float  *nDotL            = new float[maxLights];
+        float  *invDenominator   = new float[maxLights];
+                
         //Interpolating each light direction for every light
         int val;
         for(int i = 0; i < maxLights; ++i ){
@@ -403,7 +404,6 @@ struct PBRShader : public IShader {
         //Per light illumination calculations that can be simdified
         //Currently uses widest SIMD array to perform all light iterations in one trip
         //Which I believe leaves some extra 
-        #pragma omp simd
         for(int light = 0; light < maxLights; ++light ){
             halfwayDir[light] = (interpLightDir[light] + interpViewDir);
             halfwayDir[light] = halfwayDir[light].normalized();
@@ -436,6 +436,19 @@ struct PBRShader : public IShader {
         //Simplistic ambient term
         ambient =  interpCol * (ambientInt * interpAO);
 
+		//Deleting dynamically allocated arrays
+		delete radianceLights;
+		delete interpLightDir;
+		delete halfwayDir;
+		delete numerator;
+		delete specular;
+		delete kD;
+		delete F;
+		delete NDF;
+		delete G;
+		delete nDotL;
+		delete invDenominator;
+
         return ambient + radianceOut;
     }
     

+ 1 - 1
src/objParser.cpp

@@ -6,7 +6,7 @@
 //Headers
 #include "objParser.h"
 
-Mesh& OBJ::buildMeshFromFile(Mesh &mesh, std::string path){
+void OBJ::buildMeshFromFile(Mesh &mesh, std::string path){
 
     //Open file containing vertex data
     std::ifstream file;

+ 3 - 3
src/softwareRenderer.cpp

@@ -56,8 +56,8 @@ void SoftwareRenderer::drawTriangularMesh(Model * currentModel){
     shader.metalT    = currentModel->getMetallic();
 
     //Setting up lighting
-    Vector3f lightPositions[mNumLights];
-    Vector3f lColor[mNumLights];
+    Vector3f *lightPositions = new Vector3f[mNumLights];
+    Vector3f *lColor         = new Vector3f[mNumLights];
     for(int x = 0; x < mNumLights; ++x){
         lColor[x] = mLights[x].color;
         lightPositions[x] = mLights[x].position;
@@ -94,7 +94,7 @@ void SoftwareRenderer::drawTriangularMesh(Model * currentModel){
         Vector3i u = (*tIndices)[j];
 
         //Last setup of shader light variables
-        Vector3f lightDir[mNumLights * 3 ];
+		Vector3f *lightDir = new Vector3f[mNumLights * 3];
         shader.lightDirVal = lightDir;    
 
         //Pack vertex, normal and UV data into triangles