J'essaie de créer un effet de flou sur mes objets (environ 10 objets). Mais quand j'applique l'effet et déplace des objets, c'est très lent. Par exemple quand je traduis l'objet, ce n'est pas synchrone que les neuf objets bougent mais le dernier met une seconde de retard avant de traduire aussi ...opengl es 2.0 Accélérer l'effet shader
ici où j'essaye d'appliquer le shader (les shaders viennent de ce site: https://github.com/Jam3/glsl-fast-gaussian-blur):
gettimeofday(&t2, &tz);
deltatime = (float)(t2.tv_sec - t1.tv_sec + (t2.tv_usec - t1.tv_usec) * 1e-6);
t1 = t2;
glBindFramebuffer(GL_FRAMEBUFFER, fbo[0]);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.f, 1.f);
glUseProgram(shaderId);
glUniformMatrix4fv(glGetUniformLocation(shaderId, "projection"), 1, GL_FALSE, glm::value_ptr(projection));
glUniformMatrix4fv(glGetUniformLocation(shaderId, "view"), 1, GL_FALSE, glm::value_ptr(view));
//draw all objects
_transform->drawAll(shaderId);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
GLfloat dir[] = {0.0f, 0.0f};
GLfloat sizeFbo[] = {float(width), float(height)};
for(int i = 0; i < valueSigma + 1; i++){
float timeBlur = sin(deltatime) * 0.5f + 0.5f;
float resBlur = (valueSigma - i) * timeBlur ;
glBindFramebuffer(GL_FRAMEBUFFER, fbo[1]);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.f, 1.f);
glUseProgram(blurShaderId);
if(i == 0){
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex[0]);
}
quadForm->draw();
auto resolution = glGetUniformLocation(blurShaderId, "resolution");
if(resolution < 0){
std::cerr << "failed resolution" << std::endl;
}
auto direction = glGetUniformLocation(blurShaderId, "direction");
if(direction < 0)
std::cerr << "failed direction" << std::endl;
if(i % 2 == 0){
dir[0] = resBlur;
dir[1] = 0.0f;
glUniform2fv(direction, 2, dir);
}
else{
dir[0] = 0.0f;
dir[1] = resBlur;
}
glUniform2fv(resolution, 2, sizeFbo);
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glClearColor(0.0f, 0.0f, 0.f, 1.f);
glUseProgram(blurShaderId);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex[1]);
quadForm->draw();
// dir[0] = dir[1] = 0.0f;
glUniform2fv(direction, 2, dir);
glUniform2fv(resolution, 2, sizeFbo);
}