Port simple simulation particle shader.
This commit is contained in:
parent
8117260bf6
commit
47cfe08fe1
@ -348,13 +348,10 @@ void ParticleSystemProxy::simulateNoHeightmap()
|
||||
int timediff = int(GUIEngine::getLatestDt() * 1000.f);
|
||||
int active_count = getEmitter()->getMaxLifeTime() * getEmitter()->getMaxParticlesPerSecond() / 1000;
|
||||
core::matrix4 matrix = getAbsoluteTransformation();
|
||||
glUseProgram(ParticleShader::SimpleSimulationShader::Program);
|
||||
glUseProgram(ParticleShader::SimpleSimulationShader::getInstance()->Program);
|
||||
glEnable(GL_RASTERIZER_DISCARD);
|
||||
|
||||
glUniform1i(ParticleShader::SimpleSimulationShader::uniform_dt, timediff);
|
||||
glUniform1i(ParticleShader::SimpleSimulationShader::uniform_level, active_count);
|
||||
glUniformMatrix4fv(ParticleShader::SimpleSimulationShader::uniform_sourcematrix, 1, GL_FALSE, matrix.pointer());
|
||||
glUniform1f(ParticleShader::SimpleSimulationShader::uniform_size_increase_factor, size_increase_factor);
|
||||
ParticleShader::SimpleSimulationShader::getInstance()->setUniforms(matrix, timediff, active_count, size_increase_factor);
|
||||
|
||||
glBindVertexArray(current_simulation_vao);
|
||||
glBindBufferBase(GL_TRANSFORM_FEEDBACK_BUFFER, 0, tfb_buffers[1]);
|
||||
|
@ -415,7 +415,6 @@ void Shaders::loadShaders()
|
||||
MeshShader::SkyboxShader::init();
|
||||
MeshShader::ViewFrustrumShader::init();
|
||||
ParticleShader::HeightmapSimulationShader::init();
|
||||
ParticleShader::SimpleSimulationShader::init();
|
||||
UtilShader::ColoredLine::init();
|
||||
}
|
||||
|
||||
@ -1377,21 +1376,7 @@ namespace LightShader
|
||||
|
||||
namespace ParticleShader
|
||||
{
|
||||
GLuint SimpleSimulationShader::Program;
|
||||
GLuint SimpleSimulationShader::attrib_position;
|
||||
GLuint SimpleSimulationShader::attrib_velocity;
|
||||
GLuint SimpleSimulationShader::attrib_lifetime;
|
||||
GLuint SimpleSimulationShader::attrib_initial_position;
|
||||
GLuint SimpleSimulationShader::attrib_initial_velocity;
|
||||
GLuint SimpleSimulationShader::attrib_initial_lifetime;
|
||||
GLuint SimpleSimulationShader::attrib_size;
|
||||
GLuint SimpleSimulationShader::attrib_initial_size;
|
||||
GLuint SimpleSimulationShader::uniform_sourcematrix;
|
||||
GLuint SimpleSimulationShader::uniform_dt;
|
||||
GLuint SimpleSimulationShader::uniform_level;
|
||||
GLuint SimpleSimulationShader::uniform_size_increase_factor;
|
||||
|
||||
void SimpleSimulationShader::init()
|
||||
SimpleSimulationShader::SimpleSimulationShader()
|
||||
{
|
||||
const char *varyings[] = {
|
||||
"new_particle_position",
|
||||
@ -1400,20 +1385,7 @@ namespace ParticleShader
|
||||
"new_size",
|
||||
};
|
||||
Program = LoadTFBProgram(file_manager->getAsset("shaders/pointemitter.vert").c_str(), varyings, 4);
|
||||
|
||||
uniform_dt = glGetUniformLocation(Program, "dt");
|
||||
uniform_sourcematrix = glGetUniformLocation(Program, "sourcematrix");
|
||||
uniform_level = glGetUniformLocation(Program, "level");
|
||||
uniform_size_increase_factor = glGetUniformLocation(Program, "size_increase_factor");
|
||||
|
||||
attrib_position = glGetAttribLocation(Program, "particle_position");
|
||||
attrib_lifetime = glGetAttribLocation(Program, "lifetime");
|
||||
attrib_velocity = glGetAttribLocation(Program, "particle_velocity");
|
||||
attrib_size = glGetAttribLocation(Program, "size");
|
||||
attrib_initial_position = glGetAttribLocation(Program, "particle_position_initial");
|
||||
attrib_initial_lifetime = glGetAttribLocation(Program, "lifetime_initial");
|
||||
attrib_initial_velocity = glGetAttribLocation(Program, "particle_velocity_initial");
|
||||
attrib_initial_size = glGetAttribLocation(Program, "size_initial");
|
||||
AssignUniforms("sourcematrix", "dt", "level", "size_increase_factor");
|
||||
}
|
||||
|
||||
GLuint HeightmapSimulationShader::Program;
|
||||
|
@ -486,14 +486,10 @@ namespace LightShader
|
||||
namespace ParticleShader
|
||||
{
|
||||
|
||||
class SimpleSimulationShader
|
||||
class SimpleSimulationShader : public ShaderHelperSingleton<SimpleSimulationShader, core::matrix4, int, int, float>
|
||||
{
|
||||
public:
|
||||
static GLuint Program;
|
||||
static GLuint attrib_position, attrib_velocity, attrib_lifetime, attrib_initial_position, attrib_initial_velocity, attrib_initial_lifetime, attrib_size, attrib_initial_size;
|
||||
static GLuint uniform_sourcematrix, uniform_dt, uniform_level, uniform_size_increase_factor;
|
||||
|
||||
static void init();
|
||||
SimpleSimulationShader();
|
||||
};
|
||||
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user