Я написал небольшую систему частиц в Java с LWJGL.
Итак, я использую openGL.
Теперь я читаю, что изменение текстуры происходит очень медленно. Поэтому я уверен, что я только изменяю текстуру, которая используется для кучи частиц, а затем рисует все эти частицы.
По-прежнему мой FPS падает примерно с 8000 до 4000, хотя в то же время нарисовано только 60 частиц.
Я знаю, что проблема заключается в рендеринге, потому что, когда я просто обновляю частицы, но не рисую их, то у меня нет падения в FPS.
Было бы здорово, если бы кто-нибудь мог сказать мне, что не так с моим кодом OpenGL.Неправильное использование OpenGL?
Это эмиттер частица, которая управляет частицами:
public void render() {
//Initialize....
GL11.glMatrixMode(GL11.GL_MODELVIEW);
BloodParticle.PARTICLE_TEXTURE.bind();
for(Integer index : this.getBlockedParticles()){
this.getParticles()[index].render();
}
GL11.glDisable(GL11.GL_TEXTURE_2D);
}
Это метод визуализации одной частицы:
public void render() {
if(!this.isAlive()){
return;
}
// Store matrix
GL11.glPushMatrix();
// Set to particle's position and scale
GL11.glTranslatef(this.getPosition().getX(), this.getPosition().getY(), 0);
GL11.glScalef(3.5f, 3.5f, 1.0f);
// Set the current alpha.
GL11.glColor4f(1.0f, 1.0f, 1.0f, this.getAlphaFade());
//Draw the texture on a quad.
GL11.glBegin(GL11.GL_QUADS);
{
GL11.glTexCoord2f(0, 0);
GL11.glVertex2f(-PARTICLE_TEXTURE.getImageWidth()/2.0f,
-PARTICLE_TEXTURE.getImageHeight()/2.0f);
GL11.glTexCoord2f(0, 1);
GL11.glVertex2f(-PARTICLE_TEXTURE.getImageWidth()/2.0f,
PARTICLE_TEXTURE.getImageHeight()/2.0f);
GL11.glTexCoord2f(1, 1);
GL11.glVertex2f(PARTICLE_TEXTURE.getImageWidth()/2.0f,
PARTICLE_TEXTURE.getImageHeight()/2.0f);
GL11.glTexCoord2f(1, 0);
GL11.glVertex2f(PARTICLE_TEXTURE.getImageWidth()/2.0f,
-PARTICLE_TEXTURE.getImageHeight()/2.0f);
}
GL11.glEnd();
//Get the matrix again.
GL11.glPopMatrix();
}
Я знаю, что 4000 FPS намного больше, чем достаточно. Но я просто напугался этого падения до половины FPS и только с одним эмитентом в игре.
Я знаю, что это станет проблемой при фиксированном FPS 60 и более 3 эмиттеров.
«* Но я просто напугался этой капли на половину FPS и только с одним эмитентом в игре. *« Капля с 8000 FPS до 4000 представляет собой 0.125 *** милли * секунд разницы во времени , Это не проблема. Измерение по частоте кадров не помогает; всегда измерять * время *. –