diff options
author | Tyler Murphy <tylerm@tylerm.dev> | 2023-04-24 15:19:45 -0400 |
---|---|---|
committer | Tyler Murphy <tylerm@tylerm.dev> | 2023-04-24 15:19:45 -0400 |
commit | 0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23 (patch) | |
tree | dd1f9aa154fe0955274e2900f368b8f7e43634a3 /src/renderer.c | |
parent | window title (diff) | |
download | raycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.tar.gz raycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.tar.bz2 raycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.zip |
i made a swapchain
Diffstat (limited to '')
-rw-r--r-- | src/renderer.c | 30 |
1 files changed, 20 insertions, 10 deletions
diff --git a/src/renderer.c b/src/renderer.c index a77f855..e59631c 100644 --- a/src/renderer.c +++ b/src/renderer.c @@ -3,6 +3,8 @@ #include "ray.h" #include <math.h> +#include <pthread.h> +#include <stdio.h> #include <string.h> @@ -80,10 +82,11 @@ void update_camera(Camera* camera, Screen* screen) { if (movey) camera->pos.y += move.y * MOVE_SPEED * screen->delta; } -static void verline(Screen* screen, int x, int y0, int y1, uint32_t color) { +static void verline(Swapchain* swapchain, int x, int y0, int y1, uint32_t color) { for (int y = y0; y <= y1; y++) { - screen->pixels[(y * screen->width) + x] = color; + swapchain->images[swapchain->image_current][(y * swapchain->width) + x] = color; } + } void render(Screen* screen, const Camera* camera) { @@ -93,9 +96,13 @@ void render(Screen* screen, const Camera* camera) { cos(camera->angle) }; - for (int x = 0; x < screen->width; x++) { + Swapchain* swapchain = &screen->swapchain; + + swapchain_next(swapchain); + + for (int x = 0; x < screen->swapchain.width; x++) { - const float xcam = (2 * (x / (float) (screen->width))) - 1; + const float xcam = (2 * (x / (float) (swapchain->width))) - 1; const float change = fov * atan(xcam); const float theta = camera->angle + change; @@ -126,15 +133,18 @@ void render(Screen* screen, const Camera* camera) { // } const int - h = (int) (screen->height / len), - y0 = max((screen->height / 2) - (h / 2), 0), - y1 = min((screen->height / 2) + (h / 2), screen->height - 1); + h = (int) (swapchain->height / len), + y0 = max((swapchain->height / 2) - (h / 2), 0), + y1 = min((swapchain->height / 2) + (h / 2), swapchain->height - 1); + + verline(swapchain, x, 0, y0, 0xFF202020); + verline(swapchain, x, y0, y1, color); + verline(swapchain, x, y1, swapchain->height - 1, 0xFF505050); - verline(screen, x, 0, y0, 0xFF202020); - verline(screen, x, y0, y1, color); - verline(screen, x, y1, screen->height - 1, 0xFF505050); // verline(screen, x, 0, y0, 0x202020FF); // verline(screen, x, y0, y1, color); // verline(screen, x, y1, screen->height - 1, 0x505050FF); } + + swapchain_submit(swapchain); } |