From aadff4d1cf17cc23f6f38ab0da51baabfeb9f9d1 Mon Sep 17 00:00:00 2001 From: Raymaekers Luca Date: Wed, 1 Oct 2025 16:53:49 +0200 Subject: checkpoint --- code/game.c | 103 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 code/game.c (limited to 'code/game.c') diff --git a/code/game.c b/code/game.c new file mode 100644 index 0000000..8b37c99 --- /dev/null +++ b/code/game.c @@ -0,0 +1,103 @@ + +// TODO: figure out how to get those from javascript, because they are going to be different in WASM64 +typedef int s32; +typedef unsigned int u32; +typedef unsigned char u8; +typedef float r32; +typedef int b32; +#define true 1 +#define false 0 + +#define local_persist static +#define global static +#define internal static + +#define WIDTH (1920/2) +#define HEIGHT (1080/2) +#define BYTES_PER_PIXEL 4 + +#define STB_SPRINTF_IMPLEMENTATION +#include "libs/stb_sprintf.h" + +//- Global variables +extern u8 __heap_base; +u32 BumpPointer = (u32)&__heap_base; +u8 Buffer[WIDTH*HEIGHT*BYTES_PER_PIXEL]; + +//- Extern (js) functions +extern void LogMessage(u32 Length, char* message); + +//- Memory +void* Malloc(u32 Size) +{ + u32 Result = BumpPointer; + Result += Size; + return (void *)Result; +} + +void Free(u32 Size) +{ + BumpPointer -= Size; +} + +//- Game +u32 GetBufferWidth() { return WIDTH; } +u32 GetBufferHeight() { return HEIGHT; } +u32 GetBytesPerPixel() { return BYTES_PER_PIXEL; } + +void Logf(char *Format, ...) +{ + char MessageBuffer[256] = {0}; + + va_list Args; + va_start(Args, Format); + u32 MessageLength = stbsp_vsprintf(MessageBuffer, Format, Args); + + LogMessage(MessageLength, MessageBuffer); +} + +void RenderGradient(s32 Width, s32 Height, r32 dtForFrame) +{ + local_persist s32 Counter = 0; + local_persist b32 Toggle = true; + for(s32 Y = 0; Y < Height; Y++) + { + for(s32 X = 0; X < Width; X++) + { + r32 R = 0; + r32 G = 0; + r32 B = 0; + + if(Toggle) + { + R = 1.0f - ((r32)Counter/(r32)Width); + G = ((r32)Counter/(r32)Width); + } + else + { + G = 1.0f - (r32)Counter/(r32)Width; + R = (r32)Counter/(r32)Width; + } + + // AA BB GG RR + u32 Color = ((0xFF << 24) | + ((u32)(0xFF * B) << 16) | + ((u32)(0xFF * G) << 8) | + ((u32)(0xFF * R) << 0)); + + ((u32 *)Buffer)[Y*Width + X] = Color; + } + } + + Counter += (dtForFrame * 1000) * .3; + if(Counter > Width) + { + Counter -= Width; + Toggle = !Toggle; + } + +#if 1 + Logf("%d", Width); +#endif + +} \ No newline at end of file -- cgit v1.2.3-70-g09d2