#define NELEMS(x) (sizeof(x) / sizeof((x)[0]))
-ShaderTarget shader[] = { SH_BASIC,SH_BASICTEXTURE,SH_LIGHTING, SH_SHADOWDIR };
+ShaderTarget shader[] = {SH_BASIC, SH_BASICTEXTURE, SH_LIGHTING, SH_SHADOWDIR, SH_FILTER_MOTION};
+
+#define W_HEIGHT Graphix::getWindowHeight()
+#define W_WIDTH Graphix::getWindowWidth()
+
+#define SMALL_F 4
using std::list;
bt_dynamics_world->setGravity(btVector3(0, YFALL_SPEED, 0));
/*BUFFERS*/
- render = new fBufferObject();
- render->bindBuffer(Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ render = new fBufferObject(2);
+ render->bindBuffer(W_WIDTH, W_HEIGHT);
blurPingPong = new fBufferObject*[2];
for (int i = 0; i < 2; i++)
{
blurPingPong[i] = new fBufferObject(1, false);
- blurPingPong[i]->bindBuffer(Graphix::getWindowWidth()/2, Graphix::getWindowHeight()/2);
+ blurPingPong[i]->bindBuffer(W_WIDTH/ SMALL_F, W_HEIGHT/ SMALL_F);
}
shadowdir = new dBufferObject();
shadowdir->bindBuffer(1024, 1024);
- postRender = new fBufferObject(2, false);
- postRender->bindBuffer(Graphix::getWindowWidth()/2, Graphix::getWindowHeight()/2);
+ postRender = new fBufferObject(1, false);
+ postRender->bindBuffer(W_WIDTH, W_HEIGHT);
+
+ postRenderSmall = new fBufferObject(1, false);
+ postRenderSmall->bindBuffer(W_WIDTH / SMALL_F, W_HEIGHT / SMALL_F);
fBufferObject::clearBuffer();
delete shadowdir;
delete postRender;
+ delete postRenderSmall;
//if (viewPort != nullptr)
glEnable(GL_POLYGON_OFFSET_FILL);
glPolygonOffset(4.f, 0.f);
glViewport(0, 0, 1024, 1024);
+
shadowdir->useBuffer();
- glClear(GL_DEPTH_BUFFER_BIT);
Shader::getShader(SH_SHADOWDIR)->useShader();
+ glClear(GL_DEPTH_BUFFER_BIT);
+
dirLight->useLight();
drawSceneObjects(DRAW_Model,false);
glCullFace(GL_BACK);
glDisable(GL_POLYGON_OFFSET_FILL);
- glViewport(0, 0, Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ glViewport(0, 0, W_WIDTH, W_HEIGHT);
/* Prepare DRAW SCENE */
camera.useCamera();
/* DRAW SCENE */
- if (Graphix::testEffect(EF_BLOOM))
+ if (Graphix::testEffect(EF_BLOOM) || Graphix::testEffect(EF_MOTION_BLUR))
{
render->useBuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
Shader::getShader(SH_LIGHTING)->useShader();
+ drawSceneObjects();
+
+
/* MOTION BLUR */
if (Graphix::testEffect(EF_MOTION_BLUR))
{
+ postRender->useBuffer();
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+
+ Shader::getShader(SH_FILTER_MOTION)->useShader();
camera.useOldProjView();
- Shader::getShader(SH_ACTIVE)->setUniformLocation("uDelta",Graphix::fps.getCappedDelta());
- //upload deltaT
+ Shader::getShader(SH_ACTIVE)->setUniformLocation("uDelta", Graphix::fps.getCappedDelta());
drawSceneObjects(DRAW_ModelMotionBlur);
}
else
{
- drawSceneObjects();
+
}
//Pointlights & their shadows
if (Graphix::testEffect(EF_BLOOM))
{
/* DRAW BRIGHTNESS */
- glViewport(0, 0, Graphix::getWindowWidth() / 2, Graphix::getWindowHeight() / 2);
- postRender->useBuffer();
- render->getTexture()->downscale(1);
- //glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+ glViewport(0, 0, W_WIDTH / SMALL_F, W_HEIGHT / SMALL_F);
+ postRenderSmall->useBuffer();
glClear(GL_COLOR_BUFFER_BIT);
- Shader::getShader(SH_BASICTEXTURE)->useShader();
- Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uBrightness", 1);
+ //glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
+
+ render->getTexture()->downscale(1);
+
+ Shader::getShader(SH_FILTER_BRIGHT)->useShader();
+ Shader::getShader(SH_ACTIVE)->setUniformLocation("uFilterThreshold",1.2f);
render->getTexture()->useTexture();
Model::getPlaneModel()->drawModel(mat4(1.f));
- Shader::getShader(SH_BASICTEXTURE)->setUniformLocation("uBrightness", 0);
-
+
/* BLUR BRIGHTNESS */
Shader::getShader(SH_BLUR)->useShader();
for (int i = 0; i < 4; i++)
{
blurPingPong[horizontal]->useBuffer();
- glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- Shader::getShader(SH_BLUR)->setUniformLocation("uHorizontal", horizontal);
+ glClear(GL_COLOR_BUFFER_BIT);
+ Shader::getShader(SH_ACTIVE)->setUniformLocation("uHorizontal", horizontal);
if (firstit)
{
- postRender->getTexture(1)->useTexture();
+ postRenderSmall->getTexture()->useTexture();
firstit = false;
}
else
horizontal = !horizontal;
}
- glViewport(0, 0, Graphix::getWindowWidth(), Graphix::getWindowHeight());
+ glViewport(0, 0, W_WIDTH, W_HEIGHT);
}
if (Graphix::testEffect(EF_BLOOM))
{
- /* BLEND BRIGHTNESS TO ORIGINAL*/
- Shader::getShader(SH_BLEND)->useShader();
- //Shader::getShader(SH_BASICTEXTURE)->useShader();
-
fBufferObject::clearBuffer();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
- //SceneObjects.front()->gTexture()->useTexture();
- //shadowdir->getTexture()->useTexture();
-
+
+ /* BLEND BRIGHTNESS TO ORIGINAL*/
+ Shader::getShader(SH_BLEND)->useShader();
render->getTexture(0)->useTexture(uCOLOR);
- //postRender->getTexture(1)->useTexture(uCOLOR);
blurPingPong[!horizontal]->getTexture()->useTexture(uBLEND);
+
+
+
+ //Shader::getShader(SH_BASICTEXTURE)->useShader();
+ //postRender->getTexture(1)->useTexture(uCOLOR);
+ //SceneObjects.front()->gTexture()->useTexture();
+ //blurPingPong[!horizontal]->getTexture()->useTexture();
+ //postRenderSmall->getTexture()->useTexture();
+
+
Model::getPlaneModel()->drawModel(mat4(1.f));
}
}
render->updateSize(width, height);
- postRender->updateSize(width / 2, height / 2);
+ postRender->updateSize(width, height);
+ postRenderSmall->updateSize(width / SMALL_F, height / SMALL_F);
for (int i = 0; i < 2; i++)
- blurPingPong[i]->updateSize(width / 2, height / 2);
+ blurPingPong[i]->updateSize(width / SMALL_F, height / SMALL_F);
//shadowdir->updateSize(width, height);
}