Skip to content

Commit f477dc0

Browse files
committed
Enable compilation with cuda
1 parent ed2a66b commit f477dc0

File tree

9 files changed

+62
-10
lines changed

9 files changed

+62
-10
lines changed

CMakeLists.txt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@ set(CMAKE_CXX_STANDARD 14)
44

55
add_subdirectory(third_party)
66

7+
find_package(CUDA REQUIRED)
8+
79
set(rt_root_dir "ray-tracing-cuda")
810
file(GLOB_RECURSE rt_srcs "${rt_root_dir}/*.cc")
911
add_library(rt STATIC "${rt_srcs}")
10-
target_link_libraries(rt glm)
12+
target_link_libraries(rt glm)
13+
target_include_directories(rt PUBLIC "${rt_root_dir}" "${CUDA_INCLUDE_DIRS}")
Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
struct HitRecord;
44

5+
#include <cuda_runtime.h>
6+
57
#include <memory>
68

79
#include "material.h"
@@ -15,6 +17,6 @@ struct HitRecord {
1517

1618
class Hitable {
1719
public:
18-
virtual bool Hit(const Ray &ray, std::pair<double, double> t_range,
19-
HitRecord *out) const = 0;
20+
__device__ virtual bool Hit(const Ray &ray, std::pair<double, double> t_range,
21+
HitRecord *out) const = 0;
2022
};

ray-tracing-cuda/hitable_list.cc

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#include "hitable_list.h"
2+
3+
using std::pair;
4+
5+
__device__ bool HitableList::Hit(const Ray &ray, pair<double, double> t_range,
6+
HitRecord *out) const {
7+
HitRecord hit_record;
8+
bool ok = false;
9+
for (int i = 0; i < list_len_; i++) {
10+
auto ret = list_[i]->Hit(ray, t_range, &hit_record);
11+
if (!ret) continue;
12+
if (!ok) {
13+
*out = hit_record;
14+
ok = true;
15+
} else {
16+
if (out->t > hit_record.t) {
17+
*out = hit_record;
18+
}
19+
}
20+
}
21+
return ok;
22+
}
23+
24+
void HitableList::Append(Hitable *obj) { list_[list_len_++] = obj; }

ray-tracing-cuda/hitable_list.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
#pragma once
2+
3+
#include <memory>
4+
#include <vector>
5+
6+
#include "hitable.cuh"
7+
8+
class HitableList : public Hitable {
9+
public:
10+
const static int kMaxHitables = 32;
11+
12+
__device__ bool Hit(const Ray &ray, std::pair<double, double> t_range,
13+
HitRecord *out) const override;
14+
15+
void Append(Hitable *obj);
16+
17+
private:
18+
Hitable *list_[kMaxHitables];
19+
int list_len_ = 0;
20+
};

ray-tracing-cuda/main.cu

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
int main() { return 0; }

ray-tracing-cuda/material.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#include "material.h"
22

3-
glm::vec3 Material::Emit(double u, double v, const glm::vec3 &p) const {
3+
__device__ glm::vec3 Material::Emit(double u, double v,
4+
const glm::vec3 &p) const {
45
return glm::vec3(0);
56
}

ray-tracing-cuda/material.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@ class Material;
44

55
#include <glm/glm.hpp>
66

7-
#include "hitable.h"
7+
#include "hitable.cuh"
88
#include "ray.h"
99

1010
class Material {
1111
public:
12-
virtual bool Scatter(const Ray &ray, const HitRecord &record,
13-
std::pair<glm::vec3, Ray> *out) const = 0;
14-
virtual glm::vec3 Emit(double u, double v, const glm::vec3 &p) const;
12+
__device__ virtual bool Scatter(const Ray &ray, const HitRecord &record,
13+
std::pair<glm::vec3, Ray> *out) const = 0;
14+
__device__ virtual glm::vec3 Emit(double u, double v,
15+
const glm::vec3 &p) const;
1516
};

ray-tracing-cuda/sphere.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
#include <utility>
44

5-
#include "hitable.h"
5+
#include "hitable.cuh"
66
#include "material.h"
77

88
class Sphere : public Hitable {

third_party/glm

Submodule glm updated from e1afbc9 to 485700a

0 commit comments

Comments
 (0)