Implement shaders #1

Merged
abdelrahman merged 6 commits from shaders into main 2024-08-18 14:28:10 +00:00
Showing only changes of commit 6c275baa20 - Show all commits

View File

@ -7,7 +7,7 @@
#include <stddef.h> #include <stddef.h>
#include <string.h> #include <string.h>
internal u64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, u64 base_size); internal i64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, u64 base_size);
bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size) { bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size) {
if (!arena || !buffer || buffer->width == 0 || buffer->height == 0) { if (!arena || !buffer || buffer->width == 0 || buffer->height == 0) {
@ -21,12 +21,20 @@ bool _init_buffer(Arena *arena, Buffer *buffer, u64 base_size) {
} }
u8 *_get_pixel(Buffer *buffer, u64 x, u64 y, u64 base_size) { u8 *_get_pixel(Buffer *buffer, u64 x, u64 y, u64 base_size) {
u64 idx = calculate_pixel_index(buffer, x, y, base_size); i64 idx = calculate_pixel_index(buffer, x, y, base_size);
if (idx == -1) {
idx = 0;
}
return ((u8 *)(buffer->buf)) + idx; return ((u8 *)(buffer->buf)) + idx;
} }
void _set_pixel(Buffer *buffer, u64 x, u64 y, void *value, u64 base_size) { void _set_pixel(Buffer *buffer, u64 x, u64 y, void *value, u64 base_size) {
u64 idx = calculate_pixel_index(buffer, x, y, base_size); i64 idx = calculate_pixel_index(buffer, x, y, base_size);
if (idx == -1) {
return;
}
memcpy(((u8 *)(buffer->buf)) + idx, value, base_size); memcpy(((u8 *)(buffer->buf)) + idx, value, base_size);
return; return;
} }
@ -75,7 +83,11 @@ void save_image(const Image *img, const char *filename) {
write_p7_image(img->width, img->height, (u8 *)(img->buf), filename); write_p7_image(img->width, img->height, (u8 *)(img->buf), filename);
} }
internal u64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y, internal i64 calculate_pixel_index(Buffer *buffer, u64 x, u64 y,
u64 base_size) { u64 base_size) {
if (x < 0 || y < 0 || x >= buffer->width || y >= buffer->height) {
return -1;
}
return (y * buffer->width + x) * base_size; return (y * buffer->width + x) * base_size;
} }