I am currently trying to create a simple lighting engine for my game developed in JAVA. I am using a framebuffer object to draw images of the light sources onto an ambient color and combine it with the previously rendered scene to get a simple lighting. Everything works nicely except that the framerate gets cut in half, from a steady 60 FPS to a fluctuating 30 FPS.
Here is my current approach:
(This is done in my main display loop)
int[] params1 = new int[1];
gl2.glGenTextures(1, params1, 0);
int textureID = params1[0];
gl2.glBindTexture(GL.GL_TEXTURE_2D, textureID);
gl2.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MIN_FILTER, GL.GL_NEAREST);
gl2.glTexParameteri(GL.GL_TEXTURE_2D, GL.GL_TEXTURE_MAG_FILTER, GL.GL_NEAREST);
gl2.glTexImage2D(GL.GL_TEXTURE_2D, 0, GL.GL_RGBA8, Game.RES_WIDTH, Game.RES_HEIGHT, 0, GL.GL_BGRA, GL.GL_UNSIGNED_BYTE, null);
int[] params2 = new int[1];
gl2.glGenFramebuffers(1, params2, 0);
int frameBufferID = params2[0];
gl2.glBindFramebuffer(GL2.GL_DRAW_FRAMEBUFFER, frameBufferID);
gl2.glClear(0);
gl2.glFramebufferTexture2D(GL2.GL_DRAW_FRAMEBUFFER, GL.GL_COLOR_ATTACHMENT0, GL.GL_TEXTURE_2D, textureID, 0);
DrawUtils.fillRect(0, 0, Game.WIDTH, Game.HEIGHT, getAmbientLight());
gl2.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_DST_ALPHA);
//Code for drawing the light sources here...
gl2.glBindFramebuffer(GL.GL_FRAMEBUFFER, 0);
gl2.glBlendFunc(GL2.GL_DST_COLOR, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl2.glEnable(GL2.GL_TEXTURE_2D);
gl2.glPushMatrix();
gl2.glColor3f(1.0F, 1.0F, 1.0F);
gl2.glBindTexture(GL2.GL_TEXTURE_2D, textureID);
gl2.glBegin(GL2.GL_QUADS);
gl2.glNormal3i(0, 0, 1);
gl2.glTexCoord2i(0, 0);
gl2.glVertex2i(0, 0);
gl2.glTexCoord2i(1, 0);
gl2.glVertex2i(0 + Game.WIDTH, 0);
gl2.glTexCoord2i(1, 1);
gl2.glVertex2i(Game.WIDTH, Game.HEIGHT);
gl2.glTexCoord2i(0, 1);
gl2.glVertex2i(0, Game.HEIGHT);
gl2.glEnd();
gl2.glPopMatrix();
gl2.glDisable(GL2.GL_TEXTURE_2D);
gl2.glBlendFunc(GL2.GL_SRC_ALPHA, GL2.GL_ONE_MINUS_SRC_ALPHA);
gl2.glDeleteTextures(1, params1, 0);
gl2.glDeleteFramebuffers(1, params2, 0);