This commit is contained in:
2026-02-22 17:35:46 +01:00
parent c051008287
commit d6d7ed02bb
6 changed files with 37 additions and 20 deletions
+2 -1
View File
@@ -2,6 +2,7 @@
#define DELTA_MATH #define DELTA_MATH
#include <vector> #include <vector>
#include <string>
class DeltaVector2 { class DeltaVector2 {
public: public:
@@ -57,7 +58,7 @@ struct DeltaModelConnector {
struct DeltaRenderTriangle { struct DeltaRenderTriangle {
DeltaVertex a, b, c; DeltaVertex a, b, c;
bool invert; std::string texID;
}; };
struct DeltaModel { struct DeltaModel {
Binary file not shown.

After

Width:  |  Height:  |  Size: 114 B

+6
View File
@@ -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
View File
+28 -19
View File
@@ -41,7 +41,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
return SDL_APP_FAILURE; 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()); SDL_Log("Couldn't create window/renderer: %s", SDL_GetError());
return SDL_APP_FAILURE; return SDL_APP_FAILURE;
} }
@@ -54,19 +54,27 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
// delta shenanigans // delta shenanigans
for (int i = 0; i < 10; i++) { // 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, 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}, {1, 0}}, {{40 - i * 200.0f, 210, 0}, {1, 1}}, {{40 - i * 200.0f, 10, 200}, {0, 0}} }); // 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, 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}} , false}); 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}} , true}); 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}} , true}); 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}} , true}); 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}} , true}); 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}} , true}); 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}} , true}); 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); 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); 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! */ return SDL_APP_CONTINUE; /* carry on with the program! */
} }
@@ -117,7 +126,7 @@ SDL_AppResult SDL_AppIterate(void *appstate)
// drawing starts here // drawing starts here
SDL_FillSurfaceRect(backbuffer, NULL, 0xFF000000); SDL_FillSurfaceRect(backbuffer, NULL, 0xFF333333);
std::fill(depthbuffer.begin(), depthbuffer.end(), 0.0f); std::fill(depthbuffer.begin(), depthbuffer.end(), 0.0f);
@@ -136,16 +145,16 @@ SDL_AppResult SDL_AppIterate(void *appstate)
if (numtriangles == 1) { 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({ 255, 0, 0, 255 }));
// rasterizeTriangleFast(backbuffer, out1.a, out1.b, out1.c, SDLColorToUint32({ 0, 0, 255, 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.a.y).c_str());
// SDL_Log(std::to_string(triangle.b.y).c_str()); // SDL_Log(std::to_string(triangle.b.y).c_str());
// SDL_Log(std::to_string(triangle.c.y).c_str()); // SDL_Log(std::to_string(triangle.c.y).c_str());
} }
if (numtriangles == 2) { if (numtriangles == 2) {
// rasterizeTriangleFast(backbuffer, out1.a, out1.b, out1.c, SDLColorToUint32({ 255, 0, 0, 255 })); // 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 })); // 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); // int intersected = clipTriangleAgainstNearPlane(0.1, { triangle.a, triangle.b, triangle.c }, triangle1, triangle2);
+1
View File
@@ -67,6 +67,7 @@ void rasterizeTriangleSurface(DeltaAssetLoader& assets, std::vector<float>& dept
int texW = textureOrigin->w, texH = textureOrigin->h; int texW = textureOrigin->w, texH = textureOrigin->h;
// main raster loop // main raster loop
#pragma omp parallel for schedule(dynamic, 16)
for (int y = minY; y <= maxY; y++) { for (int y = minY; y <= maxY; y++) {
float e0 = e0_row; float e0 = e0_row;
float e1 = e1_row; float e1 = e1_row;