Brenta Engine
1.2
Loading...
Searching...
No Matches
particles.hpp
1
// SPDX-License-Identifier: MIT
2
// Author: Giovanni Santini
3
// Mail: giovanni.santini@proton.me
4
// Github: @San7o
5
6
#pragma once
7
8
#define MAX_PARTICLES 1000
9
10
#include <brenta/camera.hpp>
11
#include <brenta/vao.hpp>
12
#include <glad/glad.h>
13
#include <glm/glm.hpp>
14
#include <glm/gtc/matrix_transform.hpp>
15
#include <glm/gtc/type_ptr.hpp>
16
#include <string>
17
#include <vector>
18
19
namespace
brenta
20
{
21
30
class
particle_emitter
31
{
32
public
:
33
34
glm::vec3 starting_position;
35
glm::vec3 starting_velocity;
36
glm::vec3 starting_spread;
37
float
starting_time_to_live;
38
int
num_particles;
39
float
spawn_rate;
40
float
scale;
47
types::buffer
fbo
[2];
51
int
current
;
55
int
atlas
;
56
int
atlas_width;
57
int
atlas_height;
58
int
atlas_index;
62
types::vao
vao
;
63
64
struct
config
;
65
class
builder
;
66
67
static
const
config
default_config;
68
69
particle_emitter
(
config
conf);
70
~particle_emitter
();
71
77
void
update_particles
(
float
deltaTime);
78
void
render_particles();
79
80
private
:
81
camera
*cam;
82
void
check_opengl_error(
const
std::string &functionName);
83
};
84
85
struct
particle_emitter::config
86
{
87
glm::vec3 starting_position;
88
glm::vec3 starting_velocity;
89
glm::vec3 starting_spread;
90
float
starting_time_to_live;
91
int
num_particles;
92
float
spawn_rate;
93
float
scale;
94
std::string atlas_path;
95
int
atlas_width;
96
int
atlas_height;
97
int
atlas_index;
98
camera
*cam;
99
};
100
104
class
particle_emitter::builder
105
{
106
private
:
107
108
particle_emitter::config
conf = particle_emitter::default_config;
109
110
public
:
111
builder
&starting_position(glm::vec3 starting_position);
112
builder
&starting_velocity(glm::vec3 starting_velocity);
113
builder
&starting_spread(glm::vec3 starting_spread);
114
builder
&starting_time_to_live(
float
starting_time_to_live);
115
builder
&num_particles(
int
num_particles);
116
builder
&spawn_rate(
float
spawn_rate);
117
builder
&scale(
float
scale);
118
builder
&atlas_path(std::string atlas_path);
119
builder
&atlas_width(
int
atlas_width);
120
builder
&atlas_height(
int
atlas_height);
121
builder
&atlas_index(
int
atlas_index);
122
builder
&with_camera(
camera
*cam);
123
124
particle_emitter
build();
125
};
126
127
}
// namespace brenta
brenta::camera
The Camera class.
Definition
camera.hpp:97
brenta::particle_emitter::builder
Builder pattern for ParticleEmitter.
Definition
particles.hpp:105
brenta::particle_emitter
ParticleEmitter class.
Definition
particles.hpp:31
brenta::particle_emitter::current
int current
Current fbo index.
Definition
particles.hpp:51
brenta::particle_emitter::vao
types::vao vao
Vertex array object.
Definition
particles.hpp:62
brenta::particle_emitter::atlas
int atlas
Atlas texture.
Definition
particles.hpp:55
brenta::particle_emitter::fbo
types::buffer fbo[2]
Feddback buffer objects.
Definition
particles.hpp:47
brenta::particle_emitter::update_particles
void update_particles(float deltaTime)
Update the particles.
Definition
particles.cpp:98
brenta::types::buffer
Buffer wrapper around OpenGL buffer objects.
Definition
buffer.hpp:30
brenta::types::vao
Vertex Array Object (VAO)
Definition
vao.hpp:23
brenta::particle_emitter::config
Definition
particles.hpp:86
include
brenta
particles.hpp
Generated by
1.12.0