From 5a1d67d1797a3db874e44500e13237d676843185 Mon Sep 17 00:00:00 2001 From: vimene Date: Sun, 26 Nov 2023 08:43:14 +0100 Subject: added namespaces, made every function in engine.cpp static and added warnings' flags --- src/fb/chfb.cpp | 30 ++++++++++++++++-------------- src/fb/chfb.h | 8 ++++++-- src/fb/pixfb.cpp | 30 ++++++++++++++++-------------- src/fb/pixfb.h | 8 ++++++-- 4 files changed, 44 insertions(+), 32 deletions(-) (limited to 'src/fb') diff --git a/src/fb/chfb.cpp b/src/fb/chfb.cpp index e2355df..82b8f86 100644 --- a/src/fb/chfb.cpp +++ b/src/fb/chfb.cpp @@ -7,6 +7,8 @@ #include "o3d/tri_vertex.h" #include "o3d/vertex_data.h" +using namespace engine::fb; + CharacterFrameBuffer::CharacterFrameBuffer(unsigned int w, unsigned int h) { resize(w, h); } @@ -37,12 +39,12 @@ void CharacterFrameBuffer::clear() { face_ind = -1; } -void CharacterFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { - std::array sorted_vs = { &triangle.vertex1, &triangle.vertex2, &triangle.vertex3 }; +void CharacterFrameBuffer::_draw_cropped_triangle(engine::o3d::TriangleVertex3 triangle) { + std::array sorted_vs = { &triangle.vertex1, &triangle.vertex2, &triangle.vertex3 }; #define SWAP_IF_LT(X,Y) ({\ if (sorted_vs[X]->point.y < sorted_vs[Y]->point.y) {\ - Vertex3* temp = sorted_vs[X];\ + engine::o3d::Vertex3* temp = sorted_vs[X];\ sorted_vs[X] = sorted_vs[Y];\ sorted_vs[Y] = temp;\ }\ @@ -52,18 +54,18 @@ void CharacterFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { SWAP_IF_LT(1, 0); #undef SWAP_IF_LT - Vertex3 middle_vl = *sorted_vs[1]; + engine::o3d::Vertex3 middle_vl = *sorted_vs[1]; float fac = (sorted_vs[1]->point.y - sorted_vs[0]->point.y) / (sorted_vs[2]->point.y - sorted_vs[0]->point.y); - Vertex3 middle_vr{ + engine::o3d::Vertex3 middle_vr{ { sorted_vs[0]->point.x + fac * (sorted_vs[2]->point.x - sorted_vs[0]->point.x), sorted_vs[1]->point.y, sorted_vs[0]->point.z + fac * (sorted_vs[2]->point.z - sorted_vs[0]->point.z) }, - VertexData::lerp(sorted_vs[0]->data, sorted_vs[2]->data, fac) + engine::o3d::VertexData::lerp(sorted_vs[0]->data, sorted_vs[2]->data, fac) }; if (middle_vr.point.x < middle_vl.point.x) { - Vertex3 temp = middle_vr; + engine::o3d::Vertex3 temp = middle_vr; middle_vr = middle_vl; middle_vl = temp; } @@ -123,7 +125,7 @@ void CharacterFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { } } -void CharacterFrameBuffer::draw_triangle(TriangleVertex4 triangle) { +void CharacterFrameBuffer::draw_triangle(engine::o3d::TriangleVertex4 triangle) { face_ind++; for (auto t1 : triangle.crop_z_out(-1.f, 1.f)) { auto t1_2 = t1.div_by_w(); @@ -131,13 +133,13 @@ void CharacterFrameBuffer::draw_triangle(TriangleVertex4 triangle) { t1_2.vertex2.point.x *= 2.f; t1_2.vertex3.point.x *= 2.f; for (auto t2 : t1_2.crop_xy_out(-1.f, 1.f, -1.f, 1.f)) { - MathVector2 pp1 = t2.vertex1.point.xy(), - pp2 = t2.vertex2.point.xy(), - pp3 = t2.vertex3.point.xy(); + engine::math::MathVector2 pp1 = t2.vertex1.point.xy(), + pp2 = t2.vertex2.point.xy(), + pp3 = t2.vertex3.point.xy(); if ((pp2 - pp1).det(pp3 - pp1) >= 0.f) continue; - t2.vertex1.point = (t2.vertex1.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; - t2.vertex2.point = (t2.vertex2.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; - t2.vertex3.point = (t2.vertex3.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex1.point = (t2.vertex1.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex2.point = (t2.vertex2.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex3.point = (t2.vertex3.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; float fw = static_cast(w), fh = static_cast(h); t2.vertex1.point.x = t2.vertex1.point.x * fw - .5f; t2.vertex1.point.y = t2.vertex1.point.y * fh - .5f; diff --git a/src/fb/chfb.h b/src/fb/chfb.h index a3d2ed5..1bf8b69 100644 --- a/src/fb/chfb.h +++ b/src/fb/chfb.h @@ -5,6 +5,8 @@ #include "math/math_vector.h" #include "o3d/tri_vertex.h" +namespace engine::fb { + class CharacterFrameBuffer { public: CharacterFrameBuffer(unsigned int w, unsigned int h); @@ -13,7 +15,7 @@ class CharacterFrameBuffer { unsigned int height() const; const char* chars() const; void clear(); - void draw_triangle(TriangleVertex4 triangle); + void draw_triangle(engine::o3d::TriangleVertex4 triangle); private: unsigned int w, h; @@ -21,8 +23,10 @@ class CharacterFrameBuffer { std::vector depth_buf; int face_ind; - void _draw_cropped_triangle(TriangleVertex3 triangle); + void _draw_cropped_triangle(engine::o3d::TriangleVertex3 triangle); char face_char() const; }; +} + #endif // FB_CHFB_H diff --git a/src/fb/pixfb.cpp b/src/fb/pixfb.cpp index d4563ca..c9e9927 100644 --- a/src/fb/pixfb.cpp +++ b/src/fb/pixfb.cpp @@ -8,6 +8,8 @@ #include "o3d/tri_vertex.h" #include "o3d/vertex_data.h" +using namespace engine::fb; + PixelFrameBuffer::PixelFrameBuffer(unsigned int w, unsigned int h) { resize(w, h); } @@ -38,12 +40,12 @@ void PixelFrameBuffer::clear() { face_ind = -1; } -void PixelFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { - std::array sorted_vs = { &triangle.vertex1, &triangle.vertex2, &triangle.vertex3 }; +void PixelFrameBuffer::_draw_cropped_triangle(engine::o3d::TriangleVertex3 triangle) { + std::array sorted_vs = { &triangle.vertex1, &triangle.vertex2, &triangle.vertex3 }; #define SWAP_IF_LT(X,Y) ({\ if (sorted_vs[X]->point.y < sorted_vs[Y]->point.y) {\ - Vertex3* temp = sorted_vs[X];\ + engine::o3d::Vertex3* temp = sorted_vs[X];\ sorted_vs[X] = sorted_vs[Y];\ sorted_vs[Y] = temp;\ }\ @@ -53,18 +55,18 @@ void PixelFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { SWAP_IF_LT(1, 0); #undef SWAP_IF_LT - Vertex3 middle_vl = *sorted_vs[1]; + engine::o3d::Vertex3 middle_vl = *sorted_vs[1]; float fac = (sorted_vs[1]->point.y - sorted_vs[0]->point.y) / (sorted_vs[2]->point.y - sorted_vs[0]->point.y); - Vertex3 middle_vr{ + engine::o3d::Vertex3 middle_vr{ { sorted_vs[0]->point.x + fac * (sorted_vs[2]->point.x - sorted_vs[0]->point.x), sorted_vs[1]->point.y, sorted_vs[0]->point.z + fac * (sorted_vs[2]->point.z - sorted_vs[0]->point.z) }, - VertexData::lerp(sorted_vs[0]->data, sorted_vs[2]->data, fac) + engine::o3d::VertexData::lerp(sorted_vs[0]->data, sorted_vs[2]->data, fac) }; if (middle_vr.point.x < middle_vl.point.x) { - Vertex3 temp = middle_vr; + engine::o3d::Vertex3 temp = middle_vr; middle_vr = middle_vl; middle_vl = temp; } @@ -124,17 +126,17 @@ void PixelFrameBuffer::_draw_cropped_triangle(TriangleVertex3 triangle) { } } -void PixelFrameBuffer::draw_triangle(TriangleVertex4 triangle) { +void PixelFrameBuffer::draw_triangle(engine::o3d::TriangleVertex4 triangle) { face_ind++; for (auto t1 : triangle.crop_z_out(-1.f, 1.f)) { for (auto t2 : t1.div_by_w().crop_xy_out(-1.f, 1.f, -1.f, 1.f)) { - MathVector2 pp1 = t2.vertex1.point.xy(), - pp2 = t2.vertex2.point.xy(), - pp3 = t2.vertex3.point.xy(); + engine::math::MathVector2 pp1 = t2.vertex1.point.xy(), + pp2 = t2.vertex2.point.xy(), + pp3 = t2.vertex3.point.xy(); if ((pp2 - pp1).det(pp3 - pp1) >= 0.f) continue; - t2.vertex1.point = (t2.vertex1.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; - t2.vertex2.point = (t2.vertex2.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; - t2.vertex3.point = (t2.vertex3.point + MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex1.point = (t2.vertex1.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex2.point = (t2.vertex2.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; + t2.vertex3.point = (t2.vertex3.point + engine::math::MathVector3{1.f, 1.f, 0.f}) / 2.f; float fw = static_cast(w), fh = static_cast(h); t2.vertex1.point.x = t2.vertex1.point.x * fw - .5f; t2.vertex1.point.y = t2.vertex1.point.y * fh - .5f; diff --git a/src/fb/pixfb.h b/src/fb/pixfb.h index f5f8bde..bf37d51 100644 --- a/src/fb/pixfb.h +++ b/src/fb/pixfb.h @@ -6,6 +6,8 @@ #include "math/math_vector.h" #include "o3d/tri_vertex.h" +namespace engine::fb { + class PixelFrameBuffer { public: PixelFrameBuffer(unsigned int w, unsigned int h); @@ -14,7 +16,7 @@ class PixelFrameBuffer { unsigned int height() const; const uint32_t* pixels() const; void clear(); - void draw_triangle(TriangleVertex4 triangle); + void draw_triangle(engine::o3d::TriangleVertex4 triangle); private: unsigned int w, h; @@ -22,8 +24,10 @@ class PixelFrameBuffer { std::vector depth_buf; int face_ind; - void _draw_cropped_triangle(TriangleVertex3 triangle); + void _draw_cropped_triangle(engine::o3d::TriangleVertex3 triangle); uint32_t face_color() const; }; +} + #endif // FB_PIXFB_H -- cgit v1.2.3