From d6d7ed02bb6f126191a420ed08fed04a718a8b52 Mon Sep 17 00:00:00 2001 From: vekidev Date: Sun, 22 Feb 2026 17:35:46 +0100 Subject: [PATCH] soba =3 --- include/math.hpp | 3 ++- out/assets/images/debug.png | Bin 0 -> 114 bytes out/assets/levels/level.raw | 6 +++++ out/assets/levels/level.txt | 0 src/main.cpp | 47 +++++++++++++++++++++--------------- src/renderer/calls.cpp | 1 + 6 files changed, 37 insertions(+), 20 deletions(-) create mode 100644 out/assets/images/debug.png create mode 100644 out/assets/levels/level.raw delete mode 100644 out/assets/levels/level.txt diff --git a/include/math.hpp b/include/math.hpp index acd9803..70f6d7c 100644 --- a/include/math.hpp +++ b/include/math.hpp @@ -2,6 +2,7 @@ #define DELTA_MATH #include +#include class DeltaVector2 { public: @@ -57,7 +58,7 @@ struct DeltaModelConnector { struct DeltaRenderTriangle { DeltaVertex a, b, c; - bool invert; + std::string texID; }; struct DeltaModel { diff --git a/out/assets/images/debug.png b/out/assets/images/debug.png new file mode 100644 index 0000000000000000000000000000000000000000..f99f4f4fc2bbf9d3bad4e104ff6cd24425418067 GIT binary patch literal 114 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|bUa-gLo9le zQxXz>oNr+Nb6o%IftK)T90pkj5)2wz18j_q3@%+`UChSA#>`;&f>pl%g7gfaJ_b)$ KKbLh*2~7ZXI3Vf( literal 0 HcmV?d00001 diff --git a/out/assets/levels/level.raw b/out/assets/levels/level.raw new file mode 100644 index 0000000..83702d9 --- /dev/null +++ b/out/assets/levels/level.raw @@ -0,0 +1,6 @@ +; first line are positions, second line is uv points as well as texture id + +0 0 0; 512 0 0; 0 512 0 +0 0; 1 0; 0 1; debug +512 0 0; 512 512 0; 0 0 512 +1 0 1 1 0 1 debug \ No newline at end of file diff --git a/out/assets/levels/level.txt b/out/assets/levels/level.txt deleted file mode 100644 index e69de29..0000000 diff --git a/src/main.cpp b/src/main.cpp index 9bce159..a8c86d9 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -41,7 +41,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) return SDL_APP_FAILURE; } - if (!SDL_CreateWindowAndRenderer("game", SIMULATED_WIDTH, SIMULATED_HEIGHT, SDL_WINDOW_FULLSCREEN, &window, &renderer)) { + if (!SDL_CreateWindowAndRenderer("game", SIMULATED_WIDTH, SIMULATED_HEIGHT, SDL_WINDOW_RESIZABLE, &window, &renderer)) { SDL_Log("Couldn't create window/renderer: %s", SDL_GetError()); return SDL_APP_FAILURE; } @@ -54,19 +54,27 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) // delta shenanigans - for (int i = 0; i < 10; i++) { - triangles.push_back({ {{40 - i * 200.0f, 10, 200}, {0, 0}} , {{40 - i * 200.0f, 210, 0}, {1, 1}}, {{40 - i * 200.0f, 10, 0}, {0, 1}}}); - triangles.push_back({ {{40 - i * 200.0f, 210, 200}, {1, 0}}, {{40 - i * 200.0f, 210, 0}, {1, 1}}, {{40 - i * 200.0f, 10, 200}, {0, 0}} }); - } + // for (int i = 0; i < 10; i++) { + // triangles.push_back({ {{40 - i * 200.0f, 10, 200}, {0, 0}} , {{40 - i * 200.0f, 210, 0}, {8, 8}}, {{40 - i * 200.0f, 10, 0}, {0, 8}}}); + // triangles.push_back({ {{40 - i * 200.0f, 210, 200}, {8, 0}}, {{40 - i * 200.0f, 210, 0}, {8, 8}}, {{40 - i * 200.0f, 10, 200}, {0, 0}} }); + // } - // triangles.push_back({ {{10, 10, 200}, {0, 0}} , {{10, 410, 0}, {2, 1}}, {{10, 10, 0}, {0, 1}} , false}); - // triangles.push_back({ {{10, 410, 200}, {2, 0}}, {{10, 410, 0}, {2, 1}}, {{10, 10, 200}, {0, 0}} , false}); - // triangles.push_back({ {{410, 10, 0}, {0, 1}} , {{410, 410, 0}, {2, 1}}, {{410, 10, 200}, {0, 0}} , true}); - // triangles.push_back({ {{410, 10, 200}, {0, 0}}, {{410, 410, 0}, {2, 1}}, {{410, 410, 200}, {2, 0}} , true}); - // triangles.push_back({ {{10, 410, 200}, {0, 0}} , {{410, 410, 0}, {2, 1}}, {{10, 410, 0}, {0, 1}} , true}); - // triangles.push_back({ {{10, 410, 200}, {0, 0}}, {{410, 410, 200}, {2, 0}}, {{410, 410, 0}, {2, 1}} , true}); - // triangles.push_back({ {{10, 10, 200}, {0, 0}} , {{10, 10, 0}, {0, 1}}, {{410, 10, 0}, {2, 1}} , true}); - // triangles.push_back({ {{410, 10, 200}, {2, 0}} , {{10, 10, 200}, {0, 0}}, {{410, 10, 0}, {2, 1}} , true}); + triangles.push_back({ {{10, 10, 200}, {0, 0}} , {{10, 410, 0}, {2, 1}}, {{10, 10, 0}, {0, 1}} , "stone"}); + triangles.push_back({ {{10, 410, 200}, {2, 0}}, {{10, 410, 0}, {2, 1}}, {{10, 10, 200}, {0, 0}} , "stone"}); + triangles.push_back({ {{410, 10, 0}, {0, 1}} , {{410, 410, 0}, {2, 1}}, {{410, 10, 200}, {0, 0}} , "stone"}); + triangles.push_back({ {{410, 10, 200}, {0, 0}}, {{410, 410, 0}, {2, 1}}, {{410, 410, 200}, {2, 0}} , "stone"}); + triangles.push_back({ {{10, 410, 200}, {0, 0}} , {{410, 410, 0}, {2, 1}}, {{10, 410, 0}, {0, 1}} , "stone"}); + triangles.push_back({ {{10, 410, 200}, {0, 0}}, {{410, 410, 200}, {2, 0}}, {{410, 410, 0}, {2, 1}} , "stone"}); + triangles.push_back({ {{10, 10, 200}, {0, 0}} , {{10, 10, 0}, {0, 1}}, {{410, 10, 0}, {2, 1}} , "stone"}); + triangles.push_back({ {{410, 10, 200}, {2, 0}} , {{10, 10, 200}, {0, 0}}, {{410, 10, 0}, {2, 1}} , "stone"}); + + triangles.push_back({ {{410, -100, 150}, {1, 1}}, {{310, -100, 50}, {0, 0}}, {{410, -100, 50}, {1, 0}} , "debug"}); + + triangles.push_back({ {{10, 10, 0}, {0, 0}}, {{10, 410, 0}, {0, 2}}, {{410, 410, 0}, {2, 2}} , "stone"}); + triangles.push_back({ {{10, 10, 0}, {0, 0}}, {{410, 410, 0}, {2, 2}}, {{410, 10, 0}, {2, 0}} , "stone"}); + + triangles.push_back({ {{410, 410, 200}, {2, 2}}, {{10, 410, 200}, {0, 2}}, {{10, 10, 200}, {0, 0}} , "stone"}); + triangles.push_back({ {{410, 10, 200}, {2, 0}}, {{410, 410, 200}, {2, 2}}, {{10, 10, 200}, {0, 0}} , "stone"}); backbuffer = SDL_CreateSurface(SIMULATED_WIDTH, SIMULATED_HEIGHT, SDL_PIXELFORMAT_ARGB8888); @@ -81,9 +89,10 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[]) SDL_SetTextureScaleMode(gpuTexture, SDL_SCALEMODE_NEAREST); - assets.loadTexture("stonebricks", "stone.png"); + assets.loadTexture("debug", "debug.png"); + assets.loadTexture("stone", "stone.png"); - SDL_SetRenderVSync(renderer, 1); + // SDL_SetRenderVSync(renderer, 1); return SDL_APP_CONTINUE; /* carry on with the program! */ } @@ -117,7 +126,7 @@ SDL_AppResult SDL_AppIterate(void *appstate) // drawing starts here - SDL_FillSurfaceRect(backbuffer, NULL, 0xFF000000); + SDL_FillSurfaceRect(backbuffer, NULL, 0xFF333333); std::fill(depthbuffer.begin(), depthbuffer.end(), 0.0f); @@ -136,16 +145,16 @@ SDL_AppResult SDL_AppIterate(void *appstate) if (numtriangles == 1) { // rasterizeTriangleFast(backbuffer, out1.a, out1.b, out1.c, SDLColorToUint32({ 255, 0, 0, 255 })); // rasterizeTriangleFast(backbuffer, out1.a, out1.b, out1.c, SDLColorToUint32({ 0, 0, 255, 255 })); - rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out1.a, out1.b, out1.c, "stonebricks", uv1.a.x, uv1.a.y, uv1.b.x, uv1.b.y, uv1.c.x, uv1.c.y); + rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out1.a, out1.b, out1.c, triangle.texID, uv1.a.x, uv1.a.y, uv1.b.x, uv1.b.y, uv1.c.x, uv1.c.y); // SDL_Log(std::to_string(triangle.a.y).c_str()); // SDL_Log(std::to_string(triangle.b.y).c_str()); // SDL_Log(std::to_string(triangle.c.y).c_str()); } if (numtriangles == 2) { // rasterizeTriangleFast(backbuffer, out1.a, out1.b, out1.c, SDLColorToUint32({ 255, 0, 0, 255 })); - rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out1.a, out1.b, out1.c, "stonebricks", uv1.a.x, uv1.a.y, uv1.b.x, uv1.b.y, uv1.c.x, uv1.c.y); + rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out1.a, out1.b, out1.c, triangle.texID, uv1.a.x, uv1.a.y, uv1.b.x, uv1.b.y, uv1.c.x, uv1.c.y); // rasterizeTriangleFast(backbuffer, out1.c, out1.b, out1.a, SDLColorToUint32({ 0, 255, 0, 255 })); - rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out2.a, out2.b, out2.c, "stonebricks", uv2.a.x, uv2.a.y, uv2.b.x, uv2.b.y, uv2.c.x, uv2.c.y); + rasterizeTriangleSurface(assets, depthbuffer, backbuffer, out2.a, out2.b, out2.c, triangle.texID, uv2.a.x, uv2.a.y, uv2.b.x, uv2.b.y, uv2.c.x, uv2.c.y); } // int intersected = clipTriangleAgainstNearPlane(0.1, { triangle.a, triangle.b, triangle.c }, triangle1, triangle2); diff --git a/src/renderer/calls.cpp b/src/renderer/calls.cpp index b6a0ba3..dbc666f 100644 --- a/src/renderer/calls.cpp +++ b/src/renderer/calls.cpp @@ -67,6 +67,7 @@ void rasterizeTriangleSurface(DeltaAssetLoader& assets, std::vector& dept int texW = textureOrigin->w, texH = textureOrigin->h; // main raster loop + #pragma omp parallel for schedule(dynamic, 16) for (int y = minY; y <= maxY; y++) { float e0 = e0_row; float e1 = e1_row;