Thank you so much for all your help - I really appreciate it.
I played around with blending modes and layers in Photoshop and I think I know how to fix my problem:
I need to render the lights, followed by the boxes and shadows. Then I need to "merge" these together and then blend the entire thing, rather than blending JUST the lights.
I think I need to use Frame Buffer Objects. I would render the stuff to the FBO, set the blending, then render the FBO to the canvas. I have no idea how to do this though c:
Also, I think these shadows are something I want. I don't see whats unrealistic about them, except for them being point lights.
Anyway, I'm trying to work with the stencil buffer as per your suggestion. Here's my code:
Display creation:
Display.create(new PixelFormat(0, 16, 1));
OpenGL setup:
glEnable(GL_STENCIL_TEST);
glClearStencil(0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(0, 800, 600, 0, 1, -1);
glMatrixMode(GL_MODELVIEW);
Rendering:
glClearColor (0, 0, 0, 0);
glClear (GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
for (Light light : lights) {
glStencilFunc(GL_ALWAYS, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
glColor4f(0, 0, 0, 1);
for (Block block : blocks) {
//render block and its shadow
}
glStencilFunc(GL_EQUAL, 0, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glUseProgram(shaderProgram);
glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
//pass information to pixel shader
glBegin(GL_QUADS); {
glColor3f(1, 1, 1);
glVertex2f(0, 0);
glVertex2f(0, 600);
glVertex2f(800, 600);
glVertex2f(800, 0);
}
glEnd();
glDisable(GL_BLEND);
glUseProgram(0);
glFlush();
Display.update();
Display.sync(60);
}
I'm getting this result:

As you can see, shadows are rendered, but they are unaffected by other lights. I'm not sure where to go from here
Again, thank you