aboutsummaryrefslogtreecommitdiff
path: root/src/util/geometry.c
blob: afe0109db22ebf70ed5e9f1046d08c5055edfddf (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <gfx/util/geometry.h>

#include <math/vec2.h>

static void make_quad_11_positions(vec2 positions[4]) {
  positions[0] = vec2_make(-1, +1);
  positions[1] = vec2_make(-1, -1);
  positions[2] = vec2_make(+1, +1);
  positions[3] = vec2_make(+1, -1);
}

static void make_quad_01_positions(vec2 positions[4]) {
  positions[0] = vec2_make(0, 0);
  positions[1] = vec2_make(1, 0);
  positions[2] = vec2_make(1, 1);
  positions[3] = vec2_make(0, 1);
}

static GeometryDesc make_quad_desc(vec2 positions[4]) {
  GeometryDesc desc           = (GeometryDesc){0};
  desc.positions2d.data       = positions;
  desc.positions2d.size_bytes = 4 * sizeof(vec2);
  desc.num_verts              = 4;
  desc.type                   = TriangleStrip;
  return desc;
}

Geometry* gfx_make_quad_11(GfxCore* gfxcore) {
  assert(gfxcore);

  vec2 positions[4];
  make_quad_11_positions(positions);
  const GeometryDesc geometry_desc = make_quad_desc(positions);
  return gfx_make_geometry(gfxcore, &geometry_desc);
}

Geometry* gfx_make_quad_01(GfxCore* gfxcore) {
  assert(gfxcore);

  vec2 positions[4];
  make_quad_01_positions(positions);
  const GeometryDesc geometry_desc = make_quad_desc(positions);
  return gfx_make_geometry(gfxcore, &geometry_desc);
}