nngn
Loading...
Searching...
No Matches
renderers.h
Go to the documentation of this file.
1#ifndef NNGN_RENDER_RENDERERS_H
2#define NNGN_RENDER_RENDERERS_H
3
4#include "lua/table.h"
5#include "math/vec2.h"
6#include "math/vec3.h"
7#include "math/vec4.h"
8#include "utils/def.h"
9#include "utils/flags.h"
10
11#include "model.h"
12
13struct Entity;
14
15namespace nngn {
16
17struct Renderer {
18 enum Type : u8 {
19 SPRITE = 1,
22 CUBE,
23 VOXEL,
25 N_TYPES,
26 };
27 enum Flag : u8 { UPDATED = 1u << 0 };
28 Entity *entity = nullptr;
29 vec3 pos = {};
30 float z_off = 0;
31 Flags<Flag> flags = {};
32 bool updated() const { return this->flags.is_set(Flag::UPDATED); }
33 void set_pos(vec3 p) { this->pos = p; this->flags |= Flag::UPDATED; }
34};
35
36struct SpriteRenderer : Renderer {
37 vec2 size = {};
38 std::array<vec2, 2> uv = {{{0, 1}, {1, 0}}};
39 u32 tex = 0;
40 static void uv_coords(
41 uvec2 uv0, uvec2 uv1, uvec2 scale, std::span<float> s);
42 template<typename T, std::size_t N>
43 static std::span<float> uv_span(std::array<T, N> *a);
45};
46
47struct CubeRenderer : Renderer {
48 vec3 color = {1, 1, 1};
49 float size = 0;
50 void load(const nngn::lua::table &t);
51};
52
53struct VoxelRenderer : Renderer {
54 std::array<vec4, 6> uv = {};
55 vec3 size = {};
56 u32 tex = 0;
57 void load(const nngn::lua::table &t);
58};
59
62 vec3 trans = {}, scale = {1, 1, 1};
63 vec4 rot = {};
64 // XXX
65 std::string obj = {};
66 u32 tex = 0;
68};
69
70template<typename T, std::size_t N>
71std::span<float> SpriteRenderer::uv_span(std::array<T, N> *a) {
72 constexpr auto n = N * T::n_dim;
73 static_assert(sizeof(*a) == n * sizeof(float));
74 return {&(*a)[0][0], n};
75}
76
78 uvec2 uv0, uvec2 uv1, uvec2 scale, std::span<float> s)
79{
80 assert(3 <= s.size());
81 const auto fs = static_cast<vec2>(scale);
82 const auto fc0 = static_cast<vec2>(uv0) / fs;
83 const auto fc1 = static_cast<vec2>(uv1) / fs;
84 s[0] = fc0.x, s[1] = 1 - fc0.y;
85 s[2] = fc1.x, s[3] = 1 - fc1.y;
86}
87
88}
89
90#endif
Flag
Definition: model.h:13
N
Definition: gamma.lua:5
pos
Definition: lua_audio.cpp:17
precision highp float
Definition: common.h:15
assert
Definition: debug.lua:3
n
Definition: dump_lights.lua:5
load
Definition: entity.lua:7
a
Definition: input.lua:31
p
Definition: input.lua:29
std::chrono::seconds s
Definition: timing.cpp:6
auto scale(const Timing &t)
Definition: lua_timing.cpp:26
Definition: audio.cpp:7
std::uint32_t u32
Definition: def.h:14
vec2_base< std::uint32_t > uvec2
Definition: vec2.h:27
vec2_base< float > vec2
Definition: vec2.h:29
vec3_base< float > vec3
Definition: vec3.h:51
std::uint8_t u8
Definition: def.h:12
Definition: entity.h:24
Definition: renderers.h:44
float size
Definition: renderers.h:46
void load(const nngn::lua::table &t)
vec3 color
Definition: renderers.h:45
Definition: renderers.h:60
Models::Flag model_flags
Definition: renderers.h:61
std::string obj
Definition: renderers.h:65
vec3 scale
Definition: renderers.h:62
u32 tex
Definition: renderers.h:66
vec4 rot
Definition: renderers.h:63
vec3 trans
Definition: renderers.h:62
Definition: renderers.h:15
float z_off
Definition: renderers.h:27
Entity * entity
Definition: renderers.h:25
void set_pos(vec3 p)
Definition: renderers.h:33
Flag
Definition: renderers.h:27
@ UPDATED
Definition: renderers.h:24
bool updated() const
Definition: renderers.h:32
Type
Definition: renderers.h:18
@ SPRITE
Definition: renderers.h:17
@ SCREEN_SPRITE
Definition: renderers.h:18
@ VOXEL
Definition: renderers.h:21
@ TRANSLUCENT
Definition: renderers.h:19
@ CUBE
Definition: renderers.h:20
@ MODEL
Definition: renderers.h:24
@ N_TYPES
Definition: renderers.h:22
Flags< Flag > flags
Definition: renderers.h:28
static std::span< float > uv_span(std::array< T, N > *a)
void load(nngn::lua::table_view t)
std::array< vec2, 2 > uv
Definition: renderers.h:35
vec2 size
Definition: renderers.h:34
static void uv_coords(uvec2 uv0, uvec2 uv1, uvec2 scale, std::span< float > s)
u32 tex
Definition: renderers.h:36
static std::span< float > uv_span(std::array< T, N > *a)
Definition: renderers.h:58
static void uv_coords(uvec2 uv0, uvec2 uv1, uvec2 scale, std::span< float > s)
Definition: renderers.h:64
Definition: renderers.h:50
u32 tex
Definition: renderers.h:53
void load(const nngn::lua::table &t)
vec3 size
Definition: renderers.h:52
std::array< vec4, 6 > uv
Definition: renderers.h:51
Non-owning reference to a table on the stack.
Definition: table.h:166
Owning reference to a table on the stack, popped when destroyed.
Definition: table.h:172
T x
Definition: vec2.h:12