Skip to content

Commit 502bdee

Browse files
committed
Add experimental render commands (prepare for parallelism)
1 parent 7ea8c72 commit 502bdee

File tree

6 files changed

+244
-48
lines changed

6 files changed

+244
-48
lines changed

build.sh

Lines changed: 34 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,40 @@
1-
#!/bin/sh
1+
#!/bin/bash
22

33
set -xe
44

5-
OPT=-O3
6-
clang --target=wasm32 -flto -ffast-math -nostdlib -Wl,--no-entry -Wl,--export-all -Wl,--allow-undefined ${OPT} -Iinclude -Ideps/common.h src/main.c -o raster.wasm -DNO_STDLIB -DNO_STDIO -DTARGET_WASM -DNO_MATH -fvectorize
5+
OPT=-O2
6+
clang \
7+
${OPT} \
8+
--target=wasm32 \
9+
-fvectorize \
10+
-flto \
11+
-ffast-math \
12+
-nostdlib \
13+
-Wl,--no-entry \
14+
-Wl,--export-all \
15+
-Wl,--allow-undefined \
16+
-Iinclude \
17+
-Ideps/common.h \
18+
src/main.c \
19+
-o raster.wasm \
20+
-DNO_STDLIB \
21+
-DNO_STDIO \
22+
-DTARGET_WASM \
23+
-DNO_MATH \
24+
-DNO_OMP
725

8-
clang ${OPT} -Iinclude -Ideps/common.h src/main.c -o raster `pkg-config --libs --cflags sdl2` -lm -fvectorize -march=native -DNO_TEXTURES
26+
clang \
27+
${OPT} \
28+
-fvectorize \
29+
-flto \
30+
-ffast-math \
31+
-Iinclude \
32+
-Ideps/common.h \
33+
src/main.c \
34+
-o raster \
35+
`pkg-config --libs --cflags sdl2` \
36+
-lm \
37+
-DNO_OMP && \
38+
strip raster
939

1040
# wasm2wat raster.wasm -o raster.wat

include/config.h

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@
55

66
#define DEBUG_OUT_OF_BOUNDS
77

8-
const u32 RASTER_WIDTH = 320;
9-
const u32 RASTER_HEIGHT = 240;
10-
const u32 WINDOW_WIDTH = RASTER_WIDTH * 3;
11-
const u32 WINDOW_HEIGHT = RASTER_HEIGHT * 3;
8+
#define RASTER_WIDTH 320
9+
#define RASTER_HEIGHT 240
10+
#define WINDOW_WIDTH RASTER_WIDTH * 3
11+
#define WINDOW_HEIGHT RASTER_HEIGHT * 3
1212
const v3 WORLD_UP = V3(0, 1, 0);
1313
f32 LIGHT_AMBIENCE = 1.0f / (f32)UINT8_MAX;
1414
f32 CAMERA_ZFAR = 35.0f;
@@ -22,9 +22,9 @@ Color FOG_COLOR = COLOR_RGB(0, 0, 0);
2222
Color EDGE_DETECTION_COLOR = COLOR_RGB(0, 0, 0);
2323
v3 VOXELGI_POS = V3(7, 0, 12);
2424
bool VOXELGI_RENDER_VOXELS = false; // for debugging
25-
const i32 VOXELGI_X = 16;
26-
const i32 VOXELGI_Y = 4;
27-
const i32 VOXELGI_Z = 12;
25+
#define VOXELGI_X 16
26+
#define VOXELGI_Y 4
27+
#define VOXELGI_Z 12
2828
#define VOXELGI_VOXEL_COUNT (VOXELGI_X * VOXELGI_Y * VOXELGI_Z)
2929
const f32 DT_MIN = 1.0f / 1000.0f;
3030
const f32 DT_MAX = 1.0f / 10.0f;

include/renderer.h

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -77,9 +77,9 @@ typedef struct Vertex {
7777
} Vertex;
7878

7979
typedef struct Triangle {
80-
v3 a;
81-
v3 b;
82-
v3 c;
80+
Vertex a;
81+
Vertex b;
82+
Vertex c;
8383
} Triangle;
8484

8585
#define RECT(X, Y, W, H) (Rect) { .x = X, .y = Y, .w = W, .h = H, }
@@ -107,6 +107,7 @@ void render_mesh(Mesh* mesh, Texture* texture, v3 position, v3 size, v3 rotation
107107
void render_text(const char* text, size_t length, i32 x, i32 y, f32 size, Color tint);
108108
void renderer_set_clear_color(Color color);
109109
void renderer_begin_frame(f32 dt);
110+
void renderer_draw(void);
110111
void renderer_post_process(void);
111112
void renderer_end_frame(void);
112113
void renderer_clear(void);
@@ -118,5 +119,6 @@ void renderer_toggle_edge_detection(void);
118119
void renderer_toggle_render_zbuffer(void);
119120
void renderer_toggle_render_normal_buffer(void);
120121
void renderer_toggle_render_voxels(void);
122+
void renderer_toggle_texture_mapping(void);
121123

122124
#endif // _RENDERER_H

raster.wasm

6.02 KB
Binary file not shown.

src/raster.c

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
// raster.c
22

3+
#ifndef NO_OMP
4+
#include <omp.h>
5+
#endif
6+
37
#define STB_SPRINTF_IMPLEMENTATION
48
#include "stb_sprintf.h"
59

@@ -141,6 +145,9 @@ void update_and_render(f32 dt) {
141145
if (input.key_pressed[KEY_F]) {
142146
window_toggle_fullscreen();
143147
}
148+
if (input.key_pressed[KEY_T]) {
149+
renderer_toggle_texture_mapping();
150+
}
144151
if (input.key_down[KEY_W]) {
145152
camera.pos = V3_OP(
146153
camera.pos,
@@ -253,12 +260,13 @@ void update_and_render(f32 dt) {
253260
render_mesh(&cube, &t_brick_6, V3(2, sinf(game.timer * 0.8f) - 1.2f, -6), V3(size, size, size), V3(0, 0, 0), game.light);
254261
}
255262

263+
renderer_draw();
256264
renderer_post_process();
257265
{
258266
static char text[256] = {0};
259267
static size_t length = 0;
260268
if ((game.tick % 4) == 0) {
261-
length = snprintf(text, sizeof(text), "%.3g ms\nlight (%.2g, %.2g, %.2g)\ncamera (%.2g, %.2g, %.2g)", 1000 * dt, EXPAND_V3(game.light.pos), EXPAND_V3(camera.pos));
269+
length = snprintf(text, sizeof(text), "%.3g ms\nlight (%.2g, %.2g, %.2g)\ncamera (%.2g, %.2g, %.2g)\nprimitives: %d", 1000 * dt, EXPAND_V3(game.light.pos), EXPAND_V3(camera.pos), renderer_get_num_primitives());
262270
}
263271
render_text(text, length, 2, 2, 1, COLOR_RGB(130, 100, 255));
264272
}

0 commit comments

Comments
 (0)