38 lines
988 B
GLSL
38 lines
988 B
GLSL
#version 300 es
|
|
|
|
/*
|
|
* SPDX-FileCopyrightText: syuilo and misskey-project
|
|
* SPDX-License-Identifier: AGPL-3.0-only
|
|
*/
|
|
|
|
in vec4 a_position;
|
|
in vec4 a_color;
|
|
in vec3 a_rotation;
|
|
in vec3 a_speed;
|
|
in float a_size;
|
|
out vec4 v_color;
|
|
out float v_rotation;
|
|
uniform float u_time;
|
|
uniform mat4 u_projection;
|
|
uniform vec3 u_worldSize;
|
|
uniform float u_gravity;
|
|
uniform float u_wind;
|
|
uniform float u_spin_factor;
|
|
uniform float u_turbulence;
|
|
|
|
void main() {
|
|
v_color = a_color;
|
|
v_rotation = a_rotation.x + (u_time * u_spin_factor) * a_rotation.y;
|
|
|
|
vec3 pos = a_position.xyz;
|
|
|
|
pos.x = mod(pos.x + u_time + u_wind * a_speed.x, u_worldSize.x * 2.0) - u_worldSize.x;
|
|
pos.y = mod(pos.y - u_time * a_speed.y * u_gravity, u_worldSize.y * 2.0) - u_worldSize.y;
|
|
|
|
pos.x += sin(u_time * a_speed.z * u_turbulence) * a_rotation.z;
|
|
pos.z += cos(u_time * a_speed.z * u_turbulence) * a_rotation.z;
|
|
|
|
gl_Position = u_projection * vec4(pos.xyz, a_position.w);
|
|
gl_PointSize = (a_size / gl_Position.w) * 100.0;
|
|
}
|