summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Compute/Queue.hpp7
-rw-r--r--src/GFX/Binder.hpp4
-rw-r--r--src/GFX/Camera.cpp10
-rw-r--r--src/GFX/Camera.hpp4
-rw-r--r--src/GFX/Image/PPMParser.cpp7
-rw-r--r--src/GFX/Image/PPMParser.hpp4
-rw-r--r--src/GFX/Image/RawImage.cpp24
-rw-r--r--src/GFX/Image/RawImage.hpp11
-rw-r--r--src/GFX/Mesh.hpp13
-rw-r--r--src/GFX/Mouse.hpp1
-rw-r--r--src/GFX/Shading/Program.hpp2
-rw-r--r--src/GFX/Shading/Shader.cpp4
-rw-r--r--src/GFX/Shading/Uniform.cpp4
-rw-r--r--src/GFX/Shading/Uniform.hpp7
-rw-r--r--src/GFX/Texture.cpp4
-rw-r--r--src/GFX/Texture.hpp6
-rw-r--r--src/GFX/Window.cpp14
-rw-r--r--src/GFX/Window.hpp7
-rw-r--r--src/Math/Grid.hpp3
-rw-r--r--src/Math/Interpolation.cpp3
-rw-r--r--src/Math/Interpolation.hpp3
-rw-r--r--src/Math/MVP.cpp2
-rw-r--r--src/Math/Matrix.hpp14
-rw-r--r--src/Math/Perlin.cpp2
-rw-r--r--src/Math/Random.cpp2
-rw-r--r--src/Math/Rotation.hpp9
-rw-r--r--src/Math/Trig.hpp2
-rw-r--r--src/Math/Vector.hpp10
-rw-r--r--src/Util/ImageViewer.cpp8
-rw-r--r--src/Util/ImageViewer.hpp10
-rw-r--r--src/Util/Sampler.hpp36
-rw-r--r--src/World/Chunk.cpp2
-rw-r--r--src/World/Chunk.hpp2
-rw-r--r--src/World/ChunkIndex.hpp4
-rw-r--r--src/World/Generation/ChunkMeshing.cpp10
-rw-r--r--src/World/Generation/ChunkMeshing.hpp2
-rw-r--r--src/World/Generation/Generator.cpp15
-rw-r--r--src/World/Generation/Generator.hpp5
-rw-r--r--src/World/World.cpp10
-rw-r--r--src/World/World.hpp4
-rw-r--r--src/main.cpp18
41 files changed, 120 insertions, 189 deletions
diff --git a/src/Compute/Queue.hpp b/src/Compute/Queue.hpp
index 53acc2d..77aed7f 100644
--- a/src/Compute/Queue.hpp
+++ b/src/Compute/Queue.hpp
@@ -3,7 +3,6 @@
#include <functional>
#include <sys/types.h>
#include <mutex>
-#include <utility>
#include <vector>
#include <queue>
#include <thread>
@@ -15,10 +14,10 @@ class Queue {
public:
explicit Queue(uint workers) : m_control(std::make_shared<Control>()) {
for (uint w = 0; w < workers; w++) {
- std::thread thread{[=]() { Queue::run_thread(m_control); }};
+ std::thread thread{[=]{ Queue::run_thread(m_control); }};
thread.detach();
}
- };
+ }
void add(I id, float priority, std::function<X()> execute) {
std::scoped_lock work_lock(m_control->work.mutex);
@@ -34,7 +33,7 @@ public:
std::vector<Result> done_results;
std::scoped_lock result_lock(m_control->results.mutex);
- for (auto r : m_control->results.results) {
+ for (auto &r : m_control->results.results) {
done_results.push_back(r);
}
m_control->results.results.clear();
diff --git a/src/GFX/Binder.hpp b/src/GFX/Binder.hpp
index 92faebe..773518d 100644
--- a/src/GFX/Binder.hpp
+++ b/src/GFX/Binder.hpp
@@ -21,7 +21,7 @@ private:
) : m_vao(vao),
m_vertex_count(vertex_count),
m_has_indices(vertex_count > 0),
- m_attribute_count(attribute_count) {};
+ m_attribute_count(attribute_count) {}
uint32_t m_vao;
size_t m_vertex_count;
@@ -33,7 +33,7 @@ private:
class Binder {
public:
- Binder() = default;;
+ Binder() = default;
static BindableMesh load(const Mesh& mesh);
diff --git a/src/GFX/Camera.cpp b/src/GFX/Camera.cpp
index 6b25347..dbc3444 100644
--- a/src/GFX/Camera.cpp
+++ b/src/GFX/Camera.cpp
@@ -2,7 +2,7 @@
namespace MC::GFX {
-Vector<3> Camera::position() {
+Vector<3> Camera::position() const {
return m_position;
}
@@ -10,18 +10,18 @@ void Camera::set_position(Vector<3> position) {
m_position = position;
}
-void Camera::move(Vector<3> vector) {
- m_position = m_position + vector;
+void Camera::move(Vector<3> by) {
+ m_position = m_position + by;
}
void Camera::move_relative(Vector<3> by) {
auto rotation = Matrix<4, 4>::rotation(m_angles);
auto result = rotation.transpose() * Vector<4>{by.x(), by.y(), by.z(), 1.0f};
- move(result.elements);
+ move(Vector<3>{result.elements});
}
-Rotation Camera::angles() {
+Rotation Camera::angles() const {
return m_angles;
}
diff --git a/src/GFX/Camera.hpp b/src/GFX/Camera.hpp
index 77a210f..2109749 100644
--- a/src/GFX/Camera.hpp
+++ b/src/GFX/Camera.hpp
@@ -8,12 +8,12 @@ class Camera {
public:
Camera() = default;
- Vector<3> position();
+ Vector<3> position() const;
void set_position(Vector<3> position);
void move(Vector<3> by);
void move_relative(Vector<3> by);
- Rotation angles();
+ Rotation angles() const;
void set_angles(Rotation angles);
void rotate(Rotation by);
diff --git a/src/GFX/Image/PPMParser.cpp b/src/GFX/Image/PPMParser.cpp
index cf1bf77..f002db8 100644
--- a/src/GFX/Image/PPMParser.cpp
+++ b/src/GFX/Image/PPMParser.cpp
@@ -66,7 +66,7 @@ RawImage::Pixel PPMParser::parse_pixel(uint8_t max_color) {
throw std::runtime_error("Sample can not be greater than Maxval.");
}
- auto map_to_range = [=](uint64_t s) -> uint8_t { return (s * 255) / max_color; };
+ auto map_to_range = [=](uint64_t s) -> uint8_t { return s * 255 / max_color; };
RawImage::Pixel pixel{};
pixel.r = map_to_range(r_sample);
@@ -120,9 +120,8 @@ std::string_view PPMParser::chomp_part() {
}
void PPMParser::skip_whitespace() {
- uint8_t c;
while (!is_eof()) {
- c = m_source[m_cursor];
+ uint8_t c = m_source[m_cursor];
if (c == '#') {
skip_comment();
continue;
@@ -147,7 +146,7 @@ void PPMParser::skip_comment() {
}
}
-bool PPMParser::is_eof() {
+bool PPMParser::is_eof() const {
return m_cursor >= m_source.size();
}
diff --git a/src/GFX/Image/PPMParser.hpp b/src/GFX/Image/PPMParser.hpp
index 3909cee..07ff3c2 100644
--- a/src/GFX/Image/PPMParser.hpp
+++ b/src/GFX/Image/PPMParser.hpp
@@ -8,7 +8,7 @@ namespace MC::GFX::Image {
class PPMParser {
public:
- explicit PPMParser(std::string_view source) : m_source(source) {};
+ explicit PPMParser(std::string_view source) : m_source(source) {}
RawImage parse();
private:
@@ -35,7 +35,7 @@ private:
void skip_whitespace();
void skip_comment();
- bool is_eof();
+ bool is_eof() const;
std::string_view m_source;
uint64_t m_cursor = 0;
diff --git a/src/GFX/Image/RawImage.cpp b/src/GFX/Image/RawImage.cpp
index 1222fab..6cb06b2 100644
--- a/src/GFX/Image/RawImage.cpp
+++ b/src/GFX/Image/RawImage.cpp
@@ -1,21 +1,9 @@
#include "RawImage.hpp"
+#include <sstream>
namespace MC::GFX::Image {
-RawImage::RawImage(Util::Sampler<2, float>& sampler, uint32_t width, uint32_t height)
- : m_pixels(), m_width(width), m_height(height)
-{
- m_pixels.reserve(width * height);
- for (int y = 0; y < height; y++) {
- for (int x = 0; x < width; x++) {
- auto result = sampler.sample({(float)x, (float)y});
- auto intensity = (uint8_t)(result * 255);
- add({intensity, intensity, intensity});
- }
- }
-}
-
-void RawImage::add(RawImage::Pixel pixel) {
+void RawImage::add(Pixel pixel) {
m_pixels.push_back(pixel);
}
@@ -35,18 +23,14 @@ uint32_t RawImage::height() const {
return m_height;
}
-uint8_t RawImage::channels() const {
- return m_channels;
-}
-
std::string RawImage::string() const {
std::stringstream str{};
bool comma = false;
str << "[";
- for (const auto& pixel : m_pixels) {
+ for (const auto [r, g, b] : m_pixels) {
if (comma) { str << ", "; }
- str << "{r=" << (uint)pixel.r << ", g=" << (uint)pixel.g << ", b=" << (uint)pixel.r << "}";
+ str << "{r=" << (uint)r << ", g=" << (uint)g << ", b=" << (uint)r << "}";
comma = true;
}
str << "]";
diff --git a/src/GFX/Image/RawImage.hpp b/src/GFX/Image/RawImage.hpp
index 8a837e6..be3c83a 100644
--- a/src/GFX/Image/RawImage.hpp
+++ b/src/GFX/Image/RawImage.hpp
@@ -4,21 +4,17 @@
#include <cstddef>
#include <string>
#include <vector>
-#include "../../Util/Sampler.hpp"
namespace MC::GFX::Image {
class RawImage {
public:
- RawImage() : m_pixels(), m_width(0), m_height(0) {};
+ RawImage() : m_width(0), m_height(0) {}
- RawImage(uint32_t width, uint32_t height)
- : m_pixels(), m_width(width), m_height(height) {
+ RawImage(uint32_t width, uint32_t height) : m_width(width), m_height(height) {
m_pixels.reserve(width * height);
}
- RawImage(Util::Sampler<2, float>& sampler, uint32_t width, uint32_t height);
-
struct Pixel {
uint8_t r, g, b;
};
@@ -30,14 +26,11 @@ public:
uint32_t width() const;
uint32_t height() const;
- uint8_t channels() const;
std::string string() const;
private:
std::vector<Pixel> m_pixels;
-
uint32_t m_width, m_height;
- uint8_t m_channels = 3;
};
}
diff --git a/src/GFX/Mesh.hpp b/src/GFX/Mesh.hpp
index 1d14ba2..ec21e53 100644
--- a/src/GFX/Mesh.hpp
+++ b/src/GFX/Mesh.hpp
@@ -17,18 +17,18 @@ public:
attribute_size(S),
type_size(sizeof(T)) {
data = copy(v.data(), v.size() * S * type_size);
- };
+ }
Attribute(
const Attribute& other
) : data(copy(other.data, other.data_size * other.attribute_size * other.type_size)),
data_size(other.data_size),
attribute_size(other.attribute_size),
- type_size(other.type_size) {};
+ type_size(other.type_size) {}
static void* copy(void* ptr, uint32_t size) {
auto* buffer = new uint8_t[size];
- std::copy((uint8_t*)ptr, (uint8_t*)ptr + size, buffer);
+ std::copy_n((uint8_t*)ptr, size, buffer);
return buffer;
}
@@ -42,12 +42,11 @@ public:
std::vector<Attribute> attributes,
std::vector<uint32_t> indices
) : m_attributes(std::move(attributes)),
- m_indices(std::move(indices)) {};
+ m_indices(std::move(indices)) {}
- Mesh(
+ explicit Mesh(
std::vector<Attribute> attributes
- ) : m_attributes(std::move(attributes)),
- m_indices() {};
+ ) : m_attributes(std::move(attributes)) {}
const std::vector<uint32_t>& indices() const;
const std::vector<Attribute>& attributes() const;
diff --git a/src/GFX/Mouse.hpp b/src/GFX/Mouse.hpp
index 3ed57a2..1e2111e 100644
--- a/src/GFX/Mouse.hpp
+++ b/src/GFX/Mouse.hpp
@@ -1,6 +1,5 @@
#pragma once
-#include <cstdint>
#include <GLFW/glfw3.h>
#include "../Math/Vector.hpp"
diff --git a/src/GFX/Shading/Program.hpp b/src/GFX/Shading/Program.hpp
index 6b28de0..8a50617 100644
--- a/src/GFX/Shading/Program.hpp
+++ b/src/GFX/Shading/Program.hpp
@@ -1,9 +1,7 @@
#pragma once
#include <string>
-#include <vector>
#include "Shader.hpp"
-#include "../../Math/Common.hpp"
#include "Uniform.hpp"
namespace MC::GFX::Shading {
diff --git a/src/GFX/Shading/Shader.cpp b/src/GFX/Shading/Shader.cpp
index f1502c2..6dfac34 100644
--- a/src/GFX/Shading/Shader.cpp
+++ b/src/GFX/Shading/Shader.cpp
@@ -4,8 +4,8 @@
namespace MC::GFX::Shading {
-Shader::Shader(Shader::Type type, const char* source) {
- uint32_t gl_type;
+Shader::Shader(Type type, const char* source) {
+ uint32_t gl_type = 0;
switch (type) {
case Type::Vertex:
gl_type = GL_VERTEX_SHADER;
diff --git a/src/GFX/Shading/Uniform.cpp b/src/GFX/Shading/Uniform.cpp
index 9448574..71786ef 100644
--- a/src/GFX/Shading/Uniform.cpp
+++ b/src/GFX/Shading/Uniform.cpp
@@ -3,11 +3,11 @@
namespace MC::GFX::Shading {
-void Uniform::set(Matrix<4, 4> value) const {
+void Uniform::set(const Matrix<4, 4>& value) const {
glUniformMatrix4fv(m_index, 1, GL_TRUE, value.elements);
}
-void Uniform::set(Vector<3> value) const {
+void Uniform::set(const Vector<3>& value) const {
glUniform3f(m_index, value.x(), value.y(), value.z());
}
diff --git a/src/GFX/Shading/Uniform.hpp b/src/GFX/Shading/Uniform.hpp
index 3c14315..a270e65 100644
--- a/src/GFX/Shading/Uniform.hpp
+++ b/src/GFX/Shading/Uniform.hpp
@@ -2,7 +2,6 @@
#include <cstdint>
#include <string>
-#include <utility>
#include "../../Math/Common.hpp"
namespace MC::GFX::Shading {
@@ -10,10 +9,10 @@ namespace MC::GFX::Shading {
class Uniform {
public:
Uniform(std::string name, uint32_t index)
- : m_name(std::move(name)), m_index(index) {};
+ : m_name(std::move(name)), m_index(index) {}
- void set(Matrix<4, 4> value) const;
- void set(Vector<3> value) const;
+ void set(const Matrix<4, 4>& value) const;
+ void set(const Vector<3>& value) const;
private:
std::string m_name;
diff --git a/src/GFX/Texture.cpp b/src/GFX/Texture.cpp
index ef48631..64151a5 100644
--- a/src/GFX/Texture.cpp
+++ b/src/GFX/Texture.cpp
@@ -23,11 +23,11 @@ Texture::Texture(const Image::RawImage& image) {
glBindTexture(GL_TEXTURE_2D, 0);
}
-void Texture::bind() {
+void Texture::bind() const {
glBindTexture(GL_TEXTURE_2D, m_texture);
}
-void Texture::unbind() {
+void Texture::unbind() const {
glBindTexture(GL_TEXTURE_2D, 0);
}
} \ No newline at end of file
diff --git a/src/GFX/Texture.hpp b/src/GFX/Texture.hpp
index ff86634..2981b2c 100644
--- a/src/GFX/Texture.hpp
+++ b/src/GFX/Texture.hpp
@@ -8,10 +8,10 @@ class Texture {
public:
explicit Texture(const Image::RawImage& image);
- void bind();
- void unbind();
+ void bind() const;
+ void unbind() const;
private:
- uint32_t m_texture;
+ uint32_t m_texture = 0;
};
} \ No newline at end of file
diff --git a/src/GFX/Window.cpp b/src/GFX/Window.cpp
index 0a1828c..ea1fde4 100644
--- a/src/GFX/Window.cpp
+++ b/src/GFX/Window.cpp
@@ -23,11 +23,11 @@ Window::~Window() {
glfwDestroyWindow(m_window);
}
-bool Window::should_close() {
+bool Window::should_close() const {
return glfwWindowShouldClose(m_window);
}
-GLFWwindow* Window::get() {
+GLFWwindow* Window::get() const {
return m_window;
}
@@ -39,8 +39,12 @@ Vector<2> Window::mouse_delta() {
return m_mouse.update(m_window);
}
-bool Window::key(int key, int type) {
- return (glfwGetKey(m_window, key) == type);
+bool Window::key(int key, int type) const {
+ return glfwGetKey(m_window, key) == type;
+}
+
+bool Window::mouse(int key, int type) const {
+ return glfwGetMouseButton(m_window, key) == type;
}
void Window::start_frame() {
@@ -49,7 +53,7 @@ void Window::start_frame() {
}
void Window::on_size_change(void (callback)(GLFWwindow*, int, int)) {
- glfwSetFramebufferSizeCallback(m_window, static_cast<GLFWframebuffersizefun>(callback));
+ glfwSetFramebufferSizeCallback(m_window, callback);
}
} \ No newline at end of file
diff --git a/src/GFX/Window.hpp b/src/GFX/Window.hpp
index 63e8446..966925c 100644
--- a/src/GFX/Window.hpp
+++ b/src/GFX/Window.hpp
@@ -12,7 +12,7 @@ public:
Window(const char* title, uint32_t width, uint32_t height);
~Window();
- GLFWwindow* get();
+ GLFWwindow* get() const;
void on_size_change(void (* callback)(GLFWwindow*, int, int));
@@ -20,8 +20,9 @@ public:
void start_frame();
Vector<2> mouse_delta();
- bool key(int key, int type);
- bool should_close();
+ bool key(int key, int type) const;
+ bool mouse(int key, int type) const;
+ bool should_close() const;
private:
GLFWwindow* m_window;
Mouse m_mouse;
diff --git a/src/Math/Grid.hpp b/src/Math/Grid.hpp
index 1c1a7ca..e9907a0 100644
--- a/src/Math/Grid.hpp
+++ b/src/Math/Grid.hpp
@@ -1,7 +1,6 @@
#pragma once
-#include "Common.hpp"
-#include "Matrix.hpp"
+#include "Vector.hpp"
namespace Math {
diff --git a/src/Math/Interpolation.cpp b/src/Math/Interpolation.cpp
index a1e6b69..d5b2564 100644
--- a/src/Math/Interpolation.cpp
+++ b/src/Math/Interpolation.cpp
@@ -1,5 +1,4 @@
#include "Interpolation.hpp"
-#include <functional>
#include "Common.hpp"
namespace Math {
@@ -15,7 +14,7 @@ float bilinear_interpolation(Matrix<2, 2> val, GridCellBoundaries cell, Vector<2
return linear_interpolation({r1, r2}, cell.y1, cell.y2, pos.y());
}
-float trilinear_interpolation(Matrix<2, 2> val_front, Matrix<2, 2> val_back, CubeCellBoundaries cell, Vector<3> pos) {
+float trilinear_interpolation(Matrix<2, 2> val_front, Matrix<2, 2> val_back, const CubeCellBoundaries& cell, Vector<3> pos) {
auto r1 = bilinear_interpolation(val_front, cell.grid_cell(), {pos.x(), pos.y()});
auto r2 = bilinear_interpolation(val_back, cell.grid_cell(), {pos.x(), pos.y()});
diff --git a/src/Math/Interpolation.hpp b/src/Math/Interpolation.hpp
index 9eaf604..eaaa67d 100644
--- a/src/Math/Interpolation.hpp
+++ b/src/Math/Interpolation.hpp
@@ -1,6 +1,5 @@
#pragma once
-#include <functional>
#include "Common.hpp"
#include "Grid.hpp"
@@ -8,6 +7,6 @@ namespace Math {
float linear_interpolation(Vector<2> val, float left, float right, float pos);
float bilinear_interpolation(Matrix<2, 2> val, GridCellBoundaries cell, Vector<2> pos);
-float trilinear_interpolation(Matrix<2, 2> val_front, Matrix<2, 2> val_back, CubeCellBoundaries cell, Vector<3> pos);
+float trilinear_interpolation(Matrix<2, 2> val_front, Matrix<2, 2> val_back, const CubeCellBoundaries& cell, Vector<3> pos);
} \ No newline at end of file
diff --git a/src/Math/MVP.cpp b/src/Math/MVP.cpp
index dd5b5e7..de771d3 100644
--- a/src/Math/MVP.cpp
+++ b/src/Math/MVP.cpp
@@ -19,7 +19,7 @@ Matrix<4, 4> view(Vector<3> position, Rotation angles) {
}
Matrix<4, 4> perspective_projection(float aspect, float fov, float near, float far) {
- auto fov_radians = Math::radians(fov);
+ auto fov_radians = radians(fov);
float x_scale = 1.0f / (tan(fov_radians / 2.0f) * aspect);
float y_scale = 1.0f / tan(fov_radians / 2.0f);
diff --git a/src/Math/Matrix.hpp b/src/Math/Matrix.hpp
index d467f72..56663e0 100644
--- a/src/Math/Matrix.hpp
+++ b/src/Math/Matrix.hpp
@@ -7,18 +7,18 @@
template <size_t R, size_t C, typename T = float>
struct Matrix {
- Matrix() : elements{} {};
+ Matrix() : elements{} {}
explicit Matrix(const T scalar) {
std::fill(elements, elements + R * C, scalar);
- };
+ }
- template<typename ...Args, typename std::enable_if_t<sizeof...(Args) == R * C, int> = 0>
- Matrix(Args... args): elements{ args... } {};
+ template<typename ...Args, std::enable_if_t<sizeof...(Args) == R * C, int> = 0>
+ Matrix(Args... args): elements{ args... } {}
explicit Matrix(const T values[R * C]) {
std::copy(values, values + R * C, elements);
- };
+ }
static Matrix<R, R, T> identity() {
Matrix<R, R, T> result{};
@@ -68,7 +68,7 @@ struct Matrix {
}
Vector<C, T> row(size_t index) const {
- return { &elements[index * C] };
+ return Vector<C, T>{ &elements[index * C] };
}
Vector<R, T> col(size_t index) const {
@@ -124,7 +124,7 @@ struct Matrix {
Vector<R, T> operator*(const Vector<R, T> vector) const {
Matrix<R, 1, T> matrix(vector.elements);
matrix = this->operator*(matrix);
- return { matrix.elements };
+ return Vector<R, T>{ matrix.elements };
}
const T& operator()(const size_t x, const size_t y) const {
diff --git a/src/Math/Perlin.cpp b/src/Math/Perlin.cpp
index e0982cb..5614bb6 100644
--- a/src/Math/Perlin.cpp
+++ b/src/Math/Perlin.cpp
@@ -9,7 +9,7 @@ float ease(float t) {
}
uint8_t hash(uint8_t x) {
- auto rot = (x * 5) % 8;
+ auto rot = x * 5 % 8;
return x << rot | x >> (8 - rot);
}
diff --git a/src/Math/Random.cpp b/src/Math/Random.cpp
index e35cda7..aa0ff55 100644
--- a/src/Math/Random.cpp
+++ b/src/Math/Random.cpp
@@ -18,7 +18,7 @@ float to_float(uint8_t u) {
}
uint8_t hash(uint8_t x) {
- auto o = ((x ^ 0xAA) * 5);
+ auto o = (x ^ 0xAA) * 5;
auto rot = o % 8;
return o << rot | o >> (8 - rot);
}
diff --git a/src/Math/Rotation.hpp b/src/Math/Rotation.hpp
index 0c5c606..a3420ed 100644
--- a/src/Math/Rotation.hpp
+++ b/src/Math/Rotation.hpp
@@ -4,16 +4,15 @@
#include "Vector.hpp"
struct Rotation {
-public:
- Rotation() : vector{} {};
+ Rotation() = default;
- Rotation(Vector<3> vector) : vector{ wrap(vector) } {};
+ Rotation(Vector<3> vector) : vector{ wrap(vector) } {}
- Rotation(float angles[3]) : Rotation(angles[0], angles[1], angles[2]) {};
+ explicit Rotation(float angles[3]) : Rotation(angles[0], angles[1], angles[2]) {}
Rotation(float pitch, float yaw, float roll) {
vector = wrap({pitch, yaw, roll });
- };
+ }
Rotation operator+(Rotation other) const {
return wrap(vector + other.vector);
diff --git a/src/Math/Trig.hpp b/src/Math/Trig.hpp
index 2a415f5..00489a9 100644
--- a/src/Math/Trig.hpp
+++ b/src/Math/Trig.hpp
@@ -6,7 +6,7 @@ namespace Math {
template<typename T>
T radians(T degrees) {
- return (degrees * PI) / 180.0f;
+ return degrees * PI / 180.0f;
}
template<typename T>
diff --git a/src/Math/Vector.hpp b/src/Math/Vector.hpp
index 54207f0..2d87c4b 100644
--- a/src/Math/Vector.hpp
+++ b/src/Math/Vector.hpp
@@ -7,18 +7,18 @@
template <size_t S, typename T = float>
struct Vector {
- Vector(): elements{} {};
+ Vector(): elements{} {}
template<typename ...Args, std::enable_if_t<sizeof...(Args) == S, int> = 0>
- Vector(Args... args) : elements{ args... } {};
+ Vector(Args... args) : elements{ args... } {}
- Vector(const T values[S]) {
+ explicit Vector(const T values[S]) {
std::copy(values, values + S, elements);
- };
+ }
explicit Vector(const T scalar) {
std::fill(elements, elements + S, scalar);
- };
+ }
Vector(const Vector<S - 1, T> vector, const T scalar) {
std::copy(vector.elements, vector.elements + S - 1, elements);
diff --git a/src/Util/ImageViewer.cpp b/src/Util/ImageViewer.cpp
index 7fd5867..f94ccd0 100644
--- a/src/Util/ImageViewer.cpp
+++ b/src/Util/ImageViewer.cpp
@@ -5,12 +5,12 @@
namespace MC::Util {
ImageViewer::ImageViewer(
- GFX::Image::RawImage& image,
+ const GFX::Image::RawImage& image,
float window_aspect
) : m_texture(image),
m_program(
- {GFX::Shading::Shader::Type::Vertex, ImageViewer::vertex},
- {GFX::Shading::Shader::Type::Fragment, ImageViewer::fragment}
+ {GFX::Shading::Shader::Type::Vertex, vertex},
+ {GFX::Shading::Shader::Type::Fragment, fragment}
),
m_mesh(GFX::Binder::load(create_mesh(window_aspect, image.width(), image.height()))) {
m_program.bind();
@@ -25,7 +25,7 @@ ImageViewer::ImageViewer(
m_program.unbind();
}
-void ImageViewer::render() {
+void ImageViewer::render() const {
m_program.bind();
m_texture.bind();
m_mesh.bind();
diff --git a/src/Util/ImageViewer.hpp b/src/Util/ImageViewer.hpp
index 2e4efe3..59c0bf3 100644
--- a/src/Util/ImageViewer.hpp
+++ b/src/Util/ImageViewer.hpp
@@ -10,18 +10,18 @@ namespace MC::Util {
class ImageViewer {
public:
- explicit ImageViewer(GFX::Image::RawImage& image, float window_aspect);
+ explicit ImageViewer(const GFX::Image::RawImage& image, float window_aspect);
- void render();
+ void render() const;
private:
static GFX::Mesh create_mesh(float window_aspect, uint32_t image_width, uint32_t image_height);
static const char* vertex;
static const char* fragment;
- MC::GFX::BindableMesh m_mesh;
- MC::GFX::Shading::Program m_program;
- MC::GFX::Texture m_texture;
+ GFX::BindableMesh m_mesh;
+ GFX::Shading::Program m_program;
+ GFX::Texture m_texture;
};
} \ No newline at end of file
diff --git a/src/Util/Sampler.hpp b/src/Util/Sampler.hpp
deleted file mode 100644
index 3a4ff4f..0000000
--- a/src/Util/Sampler.hpp
+++ /dev/null
@@ -1,36 +0,0 @@
-#pragma once
-
-#include <functional>
-#include "../Math/Vector.hpp"
-#include "../Math/Grid.hpp"
-
-namespace MC::Util {
-
-template<size_t D, typename T>
-class Sampler {
- using Pos = Vector<D>;
- using Sample = std::function<T(Pos)>;
- using Interpolate = std::function<T(Pos, Sample)>;
-public:
- Sampler(
- Sample sample,
- Pos offset = {},
- float scale = 1.0f,
- Interpolate interpolate = nearest_interpolation
- ) : m_sample([=](Sampler::Pos pos) -> T {
- return interpolate(pos, [=](Sampler::Pos p) -> T { return sample(p * scale + offset); });
- }) {}
-
- T sample(Pos at) {
- return m_sample(at);
- }
-
- static T nearest_interpolation(Pos pos, Sample sample) {
- return sample(pos);
- }
-
-private:
- Sample m_sample;
-};
-
-} \ No newline at end of file
diff --git a/src/World/Chunk.cpp b/src/World/Chunk.cpp
index b75516f..079575a 100644
--- a/src/World/Chunk.cpp
+++ b/src/World/Chunk.cpp
@@ -15,7 +15,7 @@ bool Chunk::is_empty(uint32_t x, uint32_t y, uint32_t z) const {
return get(x, y, z).empty();
}
-Vector<3> Chunk::position() {
+Vector<3> Chunk::position() const {
return m_position;
}
diff --git a/src/World/Chunk.hpp b/src/World/Chunk.hpp
index 8780700..b3eb06f 100644
--- a/src/World/Chunk.hpp
+++ b/src/World/Chunk.hpp
@@ -39,7 +39,7 @@ public:
void set_details(const Details& details) { m_details = details; }
Details& details(){ return m_details; }
- Vector<3> position();
+ Vector<3> position() const;
static bool is_valid_position(uint32_t x, uint32_t y, uint32_t z);
private:
diff --git a/src/World/ChunkIndex.hpp b/src/World/ChunkIndex.hpp
index 4701581..ef61f24 100644
--- a/src/World/ChunkIndex.hpp
+++ b/src/World/ChunkIndex.hpp
@@ -1,8 +1,6 @@
#pragma once
#include <cstdint>
-#include <cstdlib>
-#include <functional>
namespace MC::World {
@@ -27,6 +25,6 @@ template<> struct std::equal_to<MC::World::ChunkIndex> {
template<> struct std::hash<MC::World::ChunkIndex> {
size_t operator()(const MC::World::ChunkIndex& i) const noexcept {
- return ((int64_t)i.x << 32) | i.y;
+ return (int64_t)i.x << 32 | i.y;
}
}; \ No newline at end of file
diff --git a/src/World/Generation/ChunkMeshing.cpp b/src/World/Generation/ChunkMeshing.cpp
index 54abc85..0494da4 100644
--- a/src/World/Generation/ChunkMeshing.cpp
+++ b/src/World/Generation/ChunkMeshing.cpp
@@ -83,7 +83,7 @@ std::array<Vector<3>, 4> face_normals(BlockSide side) {
return {normal, normal, normal, normal};
}
-bool is_face_visible(Chunk& chunk, ChunkMeshing::ChunkNeighbors neighbors, uint32_t x, uint32_t y, uint32_t z, BlockSide side) {
+bool is_face_visible(Chunk& chunk, const ChunkMeshing::ChunkNeighbors& neighbors, uint32_t x, uint32_t y, uint32_t z, BlockSide side) {
Vector<3, int32_t> offset{};
switch (side) {
case BlockSide::Front:
@@ -128,15 +128,15 @@ bool is_face_visible(Chunk& chunk, ChunkMeshing::ChunkNeighbors neighbors, uint3
chunk_to_ask = &chunk;
}
- auto neighbor = chunk_to_ask->get(neighbor_pos.x(), neighbor_pos.y(), neighbor_pos.z());
- if (neighbor.type == BlockType::Air) {
+ auto [neighbor] = chunk_to_ask->get(neighbor_pos.x(), neighbor_pos.y(), neighbor_pos.z());
+ if (neighbor == BlockType::Air) {
return true;
}
return false;
}
-GFX::Mesh ChunkMeshing::create_mesh_for_chunk(Chunk& chunk, ChunkMeshing::ChunkNeighbors neighbors) {
+GFX::Mesh ChunkMeshing::create_mesh_for_chunk(Chunk& chunk, const ChunkNeighbors& neighbors) {
std::vector<Vector<3>> positions{};
std::vector<Vector<3>> normals{};
std::vector<Vector<2>> tex_coords{};
@@ -174,7 +174,7 @@ GFX::Mesh ChunkMeshing::create_mesh_for_chunk(Chunk& chunk, ChunkMeshing::ChunkN
}
}
- return {
+ return GFX::Mesh{
{positions, normals, tex_coords},
indices,
};
diff --git a/src/World/Generation/ChunkMeshing.hpp b/src/World/Generation/ChunkMeshing.hpp
index a4fed25..6ec77af 100644
--- a/src/World/Generation/ChunkMeshing.hpp
+++ b/src/World/Generation/ChunkMeshing.hpp
@@ -6,6 +6,6 @@
namespace MC::World::Generation::ChunkMeshing {
struct ChunkNeighbors { Chunk &north, &east, &south, &west; };
-GFX::Mesh create_mesh_for_chunk(Chunk& chunk, ChunkNeighbors neighbors);
+GFX::Mesh create_mesh_for_chunk(Chunk& chunk, const ChunkNeighbors& neighbors);
}
diff --git a/src/World/Generation/Generator.cpp b/src/World/Generation/Generator.cpp
index af3c54d..19a3dc8 100644
--- a/src/World/Generation/Generator.cpp
+++ b/src/World/Generation/Generator.cpp
@@ -9,11 +9,11 @@ Chunk Generator::generate(int64_t chunk_x, int64_t chunk_y) {
auto landmass_map = generate_landmass_map(chunk_x, chunk_y);
auto hill_map = generate_hill_map(chunk_x, chunk_y);
- auto height_map = generate_height_map(landmass_map, hill_map, chunk_x, chunk_y);
+ auto height_map = generate_height_map(landmass_map, hill_map);
auto temperature_map = generate_temperature_map(chunk_x, chunk_y);
auto humidity_map = generate_humidity_map(chunk_x, chunk_y);
- auto biome_map = generate_biome_map(landmass_map, hill_map, temperature_map, humidity_map, chunk_x, chunk_y);
+ auto biome_map = generate_biome_map(landmass_map, hill_map, temperature_map, humidity_map);
auto terrain_map = generate_terrain(height_map, chunk_x, chunk_y);
decorate_soil(chunk, biome_map, terrain_map);
@@ -38,7 +38,7 @@ Generator::Map2D<float> Generator::name(int64_t chunk_x, int64_t chunk_y) {
SIMPLE_MAP_GENERATOR(generate_landmass_map, get_landmass)
SIMPLE_MAP_GENERATOR(generate_hill_map, get_hill)
-Generator::Map2D<float> Generator::generate_height_map(Map2D<float>& landmass_map, Map2D<float>& hill_map, int64_t chunk_x, int64_t chunk_y) {
+Generator::Map2D<float> Generator::generate_height_map(Map2D<float>& landmass_map, Map2D<float>& hill_map) {
Map2D<float> height_map{};
for (uint x = 0; x < Chunk::Width; x++) {
@@ -63,8 +63,7 @@ SIMPLE_MAP_GENERATOR(generate_humidity_map, get_humidity)
Generator::Map2D<BiomeType> Generator::generate_biome_map(
Map2D<float>& landmass_map, Map2D<float>& hill_map,
- Map2D<float>& temperature_map, Map2D<float>& humidity_map,
- int64_t chunk_x, int64_t chunk_y
+ Map2D<float>& temperature_map, Map2D<float>& humidity_map
) {
Map2D<BiomeType> biome_map{};
@@ -187,9 +186,9 @@ void Generator::decorate_soil(Chunk& chunk, Map2D<BiomeType>& biome_map, Map3D<b
}
}
-#define CURVE_START(y) constexpr auto lerp = Math::linear_interpolation; float _py = y; float _px = 0.0f;
-#define CURVE_POINT(x, y) if (v < x) return lerp({_py, y}, _px, x, v); _py = y; _px = x
-#define CURVE_END(y) return lerp({_py, y}, _px, 1.0f, v);
+#define CURVE_START(y) constexpr auto lerp = Math::linear_interpolation; float _py = (y); float _px = 0.0f;
+#define CURVE_POINT(x, y) if (v < (x)) return lerp({_py, (y)}, _px, (x), v); _py = y; _px = (x)
+#define CURVE_END(y) return lerp({_py, (y)}, _px, 1.0f, v);
float Generator::get_landmass(Vector<2> pos) const {
auto v = m_landmass_noise.at(pos);
diff --git a/src/World/Generation/Generator.hpp b/src/World/Generation/Generator.hpp
index 464e36f..c18de45 100644
--- a/src/World/Generation/Generator.hpp
+++ b/src/World/Generation/Generator.hpp
@@ -20,15 +20,14 @@ private:
Map2D<float> generate_landmass_map(int64_t chunk_x, int64_t chunk_y);
Map2D<float> generate_hill_map(int64_t chunk_x, int64_t chunk_y);
- Map2D<float> generate_height_map(Map2D<float>& landmass_map, Map2D<float>& hill_map, int64_t chunk_x, int64_t chunk_y);
+ Map2D<float> generate_height_map(Map2D<float>& landmass_map, Map2D<float>& hill_map);
Map2D<float> generate_temperature_map(int64_t chunk_x, int64_t chunk_y);
Map2D<float> generate_humidity_map(int64_t chunk_x, int64_t chunk_y);
Map2D<BiomeType> generate_biome_map(
Map2D<float>& landmass_map, Map2D<float>& hill_map,
- Map2D<float>& temperature_map, Map2D<float>& humidity_map,
- int64_t chunk_x, int64_t chunk_y
+ Map2D<float>& temperature_map, Map2D<float>& humidity_map
);
Map3D<bool> generate_terrain(Map2D<float>& height_map, int64_t chunk_x, int64_t chunk_y);
diff --git a/src/World/World.cpp b/src/World/World.cpp
index 6e8489a..7570d8c 100644
--- a/src/World/World.cpp
+++ b/src/World/World.cpp
@@ -45,7 +45,7 @@ Chunk* World::get_chunk_for_position(Vector<3> position) {
return nullptr;
}
-void World::process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new_chunks, Vector<3> player) {
+void World::process_chunk_visibility_updates(const std::unordered_set<ChunkIndex>& new_chunks, const Vector<3> player) {
for (auto new_index: new_chunks) {
auto& data = get(new_index);
if (data.status == ChunkStatus::Empty) {
@@ -55,7 +55,7 @@ void World::process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new
}
}
-std::unordered_set<ChunkIndex> World::get_visible_chunk_indices(Vector<3> position) const {
+std::unordered_set<ChunkIndex> World::get_visible_chunk_indices(const Vector<3> position) const {
int32_t center_x = std::round(position.x() / Chunk::Width);
int32_t center_y = std::round(position.z() / Chunk::Width);
@@ -119,8 +119,8 @@ void World::try_to_create_mesh_for_chunk(ChunkData& data) {
auto south = get({index.x, index.y + 1});
auto west = get({index.x - 1, index.y});
- auto no_terrain = [](ChunkData& data){
- return !data.chunk.has_value();
+ auto no_terrain = [](const ChunkData& d){
+ return !d.chunk.has_value();
};
if (no_terrain(north) || no_terrain(east) || no_terrain(south) || no_terrain(west)) {
@@ -140,7 +140,7 @@ void World::log_chunk_time(uint64_t chunk_time_ms) {
m_statistics.average_chunk_time_ms += ((float)chunk_time_ms - m_statistics.average_chunk_time_ms) / m_statistics.chunk_time_sample_count;
}
-float World::get_average_chunk_time() {
+float World::get_average_chunk_time() const {
return m_statistics.average_chunk_time_ms;
}
diff --git a/src/World/World.hpp b/src/World/World.hpp
index ae8b37f..bc008b3 100644
--- a/src/World/World.hpp
+++ b/src/World/World.hpp
@@ -32,11 +32,11 @@ public:
std::vector<ChunkData*> get_visible_chunks(Vector<3> position);
Chunk* get_chunk_for_position(Vector<3> position);
- float get_average_chunk_time();
+ float get_average_chunk_time() const;
private:
std::unordered_set<ChunkIndex> get_visible_chunk_indices(Vector<3> position) const;
std::unordered_set<ChunkIndex> load_finished_chunks_from_queue();
- void process_chunk_visibility_updates(std::unordered_set<ChunkIndex>& new_chunks, Vector<3> player);
+ void process_chunk_visibility_updates(const std::unordered_set<ChunkIndex>& new_chunks, Vector<3> player);
void request_generation(ChunkIndex index, float priority);
void try_to_create_mesh_for_chunk(ChunkData& data);
diff --git a/src/main.cpp b/src/main.cpp
index a264f3e..0995b5b 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -13,17 +13,17 @@
#define APP_NAME "Meowcraft"
-#define WINDOW_WIDTH 1000
-#define WINDOW_HEIGHT 800
-#define ASPECT static_cast<float>(WINDOW_WIDTH) / WINDOW_HEIGHT
+#define WINDOW_WIDTH 800
+#define WINDOW_HEIGHT 600
+#define ASPECT (static_cast<float>(WINDOW_WIDTH) / WINDOW_HEIGHT)
#define FOV 90
void run();
-void render(MC::GFX::BindableMesh&, MC::GFX::Texture&);
+void render(const MC::GFX::BindableMesh&, const MC::GFX::Texture&);
void process_input(MC::GFX::Window&, MC::GFX::Camera&);
void setup_gl();
-void fix_macos_render(MC::GFX::Window&);
+void fix_macos_render(const MC::GFX::Window&);
int main() {
glfwInit();
@@ -45,7 +45,7 @@ void run() {
setup_gl();
glViewport(0, 0, WINDOW_WIDTH, WINDOW_HEIGHT);
- window.on_size_change([](GLFWwindow* window, int w, int h) {
+ window.on_size_change([](GLFWwindow* _, int w, int h) {
glViewport(0, 0, w, h);
});
@@ -112,7 +112,7 @@ void run() {
}
}
-void render(MC::GFX::BindableMesh& mesh, MC::GFX::Texture& texture) {
+void render(const MC::GFX::BindableMesh& mesh, const MC::GFX::Texture& texture) {
texture.bind();
mesh.bind();
glDrawElements(GL_TRIANGLES, mesh.size(), GL_UNSIGNED_INT, nullptr);
@@ -127,7 +127,7 @@ void process_input(MC::GFX::Window& window, MC::GFX::Camera& camera) {
auto r = window.mouse_delta();
- auto key = [&](int key) -> float { return window.key(key, GLFW_PRESS); };
+ auto key = [&](int k) -> float { return window.key(k, GLFW_PRESS); };
float x = key(GLFW_KEY_D) - key(GLFW_KEY_A);
float y = key(GLFW_KEY_SPACE) - key(GLFW_KEY_LEFT_SHIFT);
@@ -150,7 +150,7 @@ void setup_gl() {
}
}
-void fix_macos_render(MC::GFX::Window& window) {
+void fix_macos_render(const MC::GFX::Window& window) {
static bool moved = false;
if(!moved) {