• Advertisement
Sign in to follow this  

GL_BLEND for Multipass Lighting with GLSL

This topic is 2616 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Starting with the code:


shaders->Bind("replace_fixed");
shaders->SetInt("use_decal_map", 1);
shaders->SetInt("decal_map", 0);
shaders->SetInt("use_normal_map", 0);
shaders->SetInt("normal_map", 2);

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE);
//glBlendFunc(GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR);
std::vector<EG::Engine::Graphics::Light *>::iterator light_iterator = scene->GetRenderableLights()->begin();
while (light_iterator != scene->GetRenderableLights()->end()){
EG::Engine::Graphics::Light *light = *light_iterator;
if (light->IsEnabled()){
shaders->SetFloat3("light_position", light->Position().X(), light->Position().Y(), light->Position().Z());
shaders->SetFloat3("light_color", light->Color().X(), light->Color().Y(), light->Color().Z());
shaders->SetFloat4("lighting_parameters", light->Attenuation().X(), light->Attenuation().Y(), light->Attenuation().Z(), light->GetRadius());

std::vector<EG::Engine::Game::Object *>::iterator renderable_objects_iterator = scene->GetRenderableObjects()->begin();
while (renderable_objects_iterator != scene->GetRenderableObjects()->end()){
RenderObject((*renderable_objects_iterator));
++renderable_objects_iterator;
}
}
++light_iterator;
}

shaders->Unbind();
glDisable(GL_BLEND);


There are three lights, red, green and blue...
I have a deferred renderer which is working fine, but I wanted to support some other hardware...
(say a work computer for those boring lunch hours)

I wrote a shader which did 3 lights at a time but I didn't want to be limited... blah
So I simplified the shader down to just one light and decided to use a multipass solution.

The computer I'm working on at work does not support any decent FBO setups so I'm skipping those for this purpose.

Basically what I get is the first light that was rendered....

so if I'm looping through my lights in this order, red, green, blue
I only see Red's light.
If I start it at Green, I only see Green, etc...

Can anyone see any obvious problems?

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

  • Advertisement