summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
8ec1262)
A lot of the values are shared between processing passes, so it doesn't
make sense to keep multiple copies. ProgramData will take care of only
setting the required uniforms.
uniform sampler2D blurred;
uniform sampler2D blurred;
float factors[19];
int size;
float strength;
float factors[19];
int size;
float strength;
combine_shader("ambientocclusion_combine.glsl"),
quad(get_fullscreen_quad())
{
combine_shader("ambientocclusion_combine.glsl"),
quad(get_fullscreen_quad())
{
- combine_texturing.attach(2, occlude_target.get_target_texture(RENDER_COLOR));
+ texturing.attach(2, occlude_target.get_target_texture(RENDER_COLOR));
rotate_lookup.storage(RGBA, 4, 4);
rotate_lookup.set_min_filter(NEAREST);
rotate_lookup.storage(RGBA, 4, 4);
rotate_lookup.set_min_filter(NEAREST);
}
rotate_lookup.image(0, RGBA, UNSIGNED_BYTE, data);
}
rotate_lookup.image(0, RGBA, UNSIGNED_BYTE, data);
- occlude_texturing.attach(1, rotate_lookup);
+ texturing.attach(3, rotate_lookup);
- occlude_shdata.uniform("depth", 0);
- occlude_shdata.uniform("rotate", 1);
- occlude_shdata.uniform("screen_size", static_cast<float>(w), static_cast<float>(h));
-
- combine_shdata.uniform("source", 1);
- combine_shdata.uniform("depth", 0);
- combine_shdata.uniform("occlusion", 2);
- combine_shdata.uniform("screen_size", static_cast<float>(w), static_cast<float>(h));
+ shdata.uniform("source", 0);
+ shdata.uniform("depth", 1);
+ shdata.uniform("occlusion", 2);
+ shdata.uniform("rotate", 3);
+ shdata.uniform("screen_size", static_cast<float>(w), static_cast<float>(h));
set_depth_ratio(depth_ratio);
set_darkness(1.5);
set_depth_ratio(depth_ratio);
set_darkness(1.5);
{
depth_ratio = 1/depth_ratio;
{
depth_ratio = 1/depth_ratio;
- occlude_shdata.uniform("depth_ratio", depth_ratio, 1+depth_ratio);
- combine_shdata.uniform("depth_ratio", depth_ratio, 1+depth_ratio);
+ shdata.uniform("depth_ratio", depth_ratio, 1+depth_ratio);
}
void AmbientOcclusion::set_darkness(float darkness)
{
}
void AmbientOcclusion::set_darkness(float darkness)
{
- occlude_shdata.uniform("darkness", darkness);
+ shdata.uniform("darkness", darkness);
}
void AmbientOcclusion::render(Renderer &renderer, const Texture2D &color, const Texture2D &depth)
{
}
void AmbientOcclusion::render(Renderer &renderer, const Texture2D &color, const Texture2D &depth)
{
- occlude_texturing.attach(0, depth);
- combine_texturing.attach(0, depth);
- combine_texturing.attach(1, color);
+ texturing.attach(0, color);
+ texturing.attach(1, depth);
+
+ Renderer::Push push(renderer);
+ renderer.set_texturing(&texturing);
+ renderer.set_shader_program(&occlude_shader, &shdata);
- Renderer::Push push(renderer);
BindRestore bind_fbo(occlude_target.get_framebuffer());
BindRestore bind_fbo(occlude_target.get_framebuffer());
- renderer.set_texturing(&occlude_texturing);
- renderer.set_shader_program(&occlude_shader, &occlude_shdata);
- Renderer::Push push(renderer);
- renderer.set_texturing(&combine_texturing);
- renderer.set_shader_program(&combine_shader, &combine_shdata);
+ renderer.set_shader_program(&combine_shader);
private:
Texture2D rotate_lookup;
RenderTarget occlude_target;
private:
Texture2D rotate_lookup;
RenderTarget occlude_target;
- Texturing occlude_texturing;
- ProgramData occlude_shdata;
- Texturing combine_texturing;
- ProgramData combine_shdata;
const Mesh &quad;
public:
const Mesh &quad;
public:
blur_shdata[0].uniform("delta", 1.0f/w, 0.0f);
blur_shdata[1].uniform("delta", 0.0f, 1.0f/h);
blur_shdata[0].uniform("delta", 1.0f/w, 0.0f);
blur_shdata[1].uniform("delta", 0.0f, 1.0f/h);
- blur_shdata_common.uniform("source", 0);
for(unsigned i=0; i<2; ++i)
target[i] = new RenderTarget(w, h, (RENDER_COLOR,RGB16F));
for(unsigned i=0; i<2; ++i)
target[i] = new RenderTarget(w, h, (RENDER_COLOR,RGB16F));
- combine_shdata.uniform("source", 1);
- combine_shdata.uniform("blurred", 0);
+ common_shdata.uniform("source", 0);
+ common_shdata.uniform("blurred", 1);
- combine_texturing.attach(0, target[1]->get_target_texture(RENDER_COLOR));
+ combine_texturing.attach(1, target[1]->get_target_texture(RENDER_COLOR));
set_radius(2.0f);
set_strength(0.2f);
set_radius(2.0f);
set_strength(0.2f);
throw invalid_argument("Bloom::set_radius");
int size = min(static_cast<int>(r*3.0f), 9);
throw invalid_argument("Bloom::set_radius");
int size = min(static_cast<int>(r*3.0f), 9);
- blur_shdata_common.uniform("size", size);
+ common_shdata.uniform("size", size);
vector<float> factors(size*2+1);
float sum = 0.0f;
vector<float> factors(size*2+1);
float sum = 0.0f;
for(int i=0; i<=size*2; ++i)
factors[i] /= sum;
for(int i=0; i<=size*2; ++i)
factors[i] /= sum;
- blur_shdata_common.uniform1_array("factors", size*2+1, &factors.front());
+ common_shdata.uniform1_array("factors", size*2+1, &factors.front());
}
void Bloom::set_strength(float s)
{
if(s<0.0f || s>1.0f)
throw invalid_argument("Bloom::set_strength");
}
void Bloom::set_strength(float s)
{
if(s<0.0f || s>1.0f)
throw invalid_argument("Bloom::set_strength");
- combine_shdata.uniform("strength", s);
+ common_shdata.uniform("strength", s);
}
void Bloom::render(Renderer &renderer, const Texture2D &src, const Texture2D &)
{
}
void Bloom::render(Renderer &renderer, const Texture2D &src, const Texture2D &)
{
+ Renderer::Push push(renderer);
+ renderer.set_shader_program(&blur_shader, &common_shdata);
+ for(unsigned i=0; i<2; ++i)
- Renderer::Push push(renderer);
- renderer.set_shader_program(&blur_shader, &blur_shdata_common);
- for(unsigned i=0; i<2; ++i)
- {
- BindRestore bind_fbo(target[i]->get_framebuffer());
- Renderer::Push push2(renderer);
- renderer.set_texture(i ? &target[0]->get_target_texture(RENDER_COLOR) : &src);
- renderer.add_shader_data(blur_shdata[i]);
- quad.draw(renderer);
- }
+ BindRestore bind_fbo(target[i]->get_framebuffer());
+ Renderer::Push push2(renderer);
+ renderer.set_texture(i ? &target[0]->get_target_texture(RENDER_COLOR) : &src);
+ renderer.add_shader_data(blur_shdata[i]);
+ quad.draw(renderer);
- Renderer::Push push(renderer);
- combine_texturing.attach(1, src);
+ combine_texturing.attach(0, src);
renderer.set_texturing(&combine_texturing);
renderer.set_texturing(&combine_texturing);
- renderer.set_shader_program(&combine_shader, &combine_shdata);
+ renderer.set_shader_program(&combine_shader);
{
private:
RenderTarget *target[2];
{
private:
RenderTarget *target[2];
+ ProgramData common_shdata;
- ProgramData blur_shdata_common;
ProgramData blur_shdata[2];
Program combine_shader;
ProgramData blur_shdata[2];
Program combine_shader;
- ProgramData combine_shdata;
Texturing combine_texturing;
const Mesh &quad;
Texturing combine_texturing;
const Mesh &quad;