引入 Gfx::DrawContext 统一绘制入口,封装FrameBuffer/DepthBuffer/Rasterizer/角形光栅化;main.cpp 改用 DrawContext;同步更新文档路径

This commit is contained in:
SepComet
2026-06-06 17:55:50 +08:00
parent a051f6da4c
commit 3e735e27b0
7 changed files with 174 additions and 59 deletions
+9 -22
View File
@@ -7,14 +7,11 @@
#include "Matrix4x4.h"
#include "MathUtil.h"
#include "Color.h"
#include "FrameBuffer.h"
#include "Rasterizer.h"
#include "TriangleRasterizer.h"
#include "Triangle.h"
#include "Camera.h"
#include <cstdlib>
#include "Vertex.h"
#include "DepthBuffer.h"
#include "DrawContext.h"
#include "Display.h"
#ifdef USE_FRAMEBUFFER
@@ -117,10 +114,7 @@ int main(int argc, char *argv[])
return -1;
}
Core::FrameBuffer *frameBuffer = new Core::FrameBuffer(width, height);
Core::DepthBuffer *depthBuffer = new Core::DepthBuffer(width, height);
Rasterizer::Rasterizer rasterizer(frameBuffer, depthBuffer);
Rasterizer::TriangleRasterizer triangleRasterizer(frameBuffer, depthBuffer);
Gfx::DrawContext ctx(width, height);
Scene::Camera camera;
camera.transform.position = Math::Vector3(0.0f, 0.0f, 3.0f);
@@ -155,13 +149,12 @@ int main(int argc, char *argv[])
const RenderData::Color cubeColor(240, 240, 240, 255);
const float aspectRatio = static_cast<float>(width) / static_cast<float>(height);
bool isRuning = true;
while (isRuning)
bool isRunning = true;
while (isRunning)
{
display->poll_events(isRuning);
display->poll_events(isRunning);
frameBuffer->clear(clearColor);
depthBuffer->clear();
ctx.clear(clearColor);
const float timeSeconds = static_cast<float>(display->get_time_ms()) * 0.001f;
const Math::Matrix4x4 model =
@@ -204,10 +197,6 @@ int main(int argc, char *argv[])
continue;
}
const Math::Vector3 &viewV0 = viewSpaceVertices[cubeTriangle.vertices[0]];
const Math::Vector3 &viewV1 = viewSpaceVertices[cubeTriangle.vertices[1]];
const Math::Vector3 &viewV2 = viewSpaceVertices[cubeTriangle.vertices[2]];
drawTriangles[drawCommandCount++] =
RenderData::Triangle(
Scene::Vertex(v0.screen),
@@ -217,7 +206,7 @@ int main(int argc, char *argv[])
for (size_t i = 0; i < drawCommandCount; ++i)
{
triangleRasterizer.DrawTriangle2D(drawTriangles[i], cubeColor);
ctx.draw_triangle(drawTriangles[i], cubeColor);
}
for (size_t faceIndex = 0; faceIndex < cubeFaces.size(); ++faceIndex)
@@ -239,19 +228,17 @@ int main(int argc, char *argv[])
continue;
}
rasterizer.DrawLine(
ctx.draw_line(
Math::Vector2(start.screen.x, start.screen.y).to_vector2Int(),
Math::Vector2(end.screen.x, end.screen.y).to_vector2Int(),
clearColor);
}
}
display->present(frameBuffer);
ctx.present(display);
}
display->shutdown();
delete display;
delete frameBuffer;
delete depthBuffer;
return 0;
}