summaryrefslogtreecommitdiff
path: root/src/renderer.c
diff options
context:
space:
mode:
authorTyler Murphy <tylerm@tylerm.dev>2023-04-24 15:19:45 -0400
committerTyler Murphy <tylerm@tylerm.dev>2023-04-24 15:19:45 -0400
commit0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23 (patch)
treedd1f9aa154fe0955274e2900f368b8f7e43634a3 /src/renderer.c
parentwindow title (diff)
downloadraycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.tar.gz
raycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.tar.bz2
raycaster-0aa6e65ea6ef044cf877ed6df8f3bf00141e0b23.zip
i made a swapchain
Diffstat (limited to '')
-rw-r--r--src/renderer.c30
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);
}