|
@@ -21,8 +21,9 @@ static Shader cubeShader;
|
|
|
static Shader noiseShader;
|
|
|
static Shader particleShader;
|
|
|
static Shader backgroundShader;
|
|
|
-static Shader postShader;
|
|
|
+static Shader blurShader;
|
|
|
static Framebuffer<1> shadowBuffer;
|
|
|
+static Framebuffer<1> blurShadowBuffer;
|
|
|
static LayeredFramebuffer noiceBuffer;
|
|
|
static FileTexture bricks;
|
|
|
static FileTexture bricksBump;
|
|
@@ -88,7 +89,7 @@ static void tickMovement() {
|
|
|
if(down.isDown()) {
|
|
|
height -= 1.0f;
|
|
|
}
|
|
|
- constexpr float speed = 5.5f;
|
|
|
+ constexpr float speed = 3.5f;
|
|
|
if(left.isDown()) {
|
|
|
position += Vector3(speed, 0.0f, 0.0f);
|
|
|
}
|
|
@@ -186,7 +187,8 @@ static void renderCubes(Matrix& view) {
|
|
|
bricks.bindTo(1);
|
|
|
bricksBump.bindTo(2);
|
|
|
bricksNormal.bindTo(3);
|
|
|
- shadowBuffer.bindTextureTo(0, 4);
|
|
|
+ blurShadowBuffer.bindTextureTo(0, 4);
|
|
|
+ shadowBuffer.bindTextureTo(0, 5);
|
|
|
|
|
|
for(int i = 0; i < 3; i++) {
|
|
|
model.translateTo(Vector3(80.0f * i, 0.0f, 0.0f));
|
|
@@ -281,12 +283,13 @@ static void renderParticles(float lag) {
|
|
|
|
|
|
static void renderBackground(Matrix& view) {
|
|
|
backgroundShader.use();
|
|
|
- shadowBuffer.bindTextureTo(0, 0);
|
|
|
+ blurShadowBuffer.bindTextureTo(0, 0);
|
|
|
backgroundShader.setMatrix("proj", frustum.updateProjection().getValues());
|
|
|
backgroundShader.setMatrix("view", view.getValues());
|
|
|
model.translateTo(Vector3(0.0f, 0.0f, 0.0f));
|
|
|
model.scale(Vector3(260.0f, 120.0f, 1.0f));
|
|
|
model.translate(Vector3(0.0f, 20.0f, -200.0f));
|
|
|
+ model.rotateX(-5.0f);
|
|
|
backgroundShader.setMatrix("model", model.getValues());
|
|
|
backgroundShader.setMatrix("shadow", shadowProjectionView.getValues());
|
|
|
rectangleBuffer.draw(6);
|
|
@@ -301,16 +304,17 @@ static void renderGame(float lag) {
|
|
|
renderCubes(shadowView);
|
|
|
renderBackground(shadowView);
|
|
|
|
|
|
+ blurShader.use();
|
|
|
+ shadowBuffer.bindTextureTo(0, 0);
|
|
|
+ blurShadowBuffer.bindAndClear();
|
|
|
+ rectangleBuffer.draw(6);
|
|
|
+
|
|
|
GL::bindMainFramebuffer();
|
|
|
GL::clear();
|
|
|
|
|
|
renderCubes(view);
|
|
|
renderBackground(view);
|
|
|
renderParticles(lag);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
void Game::init() {
|
|
@@ -346,12 +350,18 @@ void Game::init() {
|
|
|
return;
|
|
|
}
|
|
|
error =
|
|
|
- postShader.compile("resources/post.vs", nullptr, "resources/post.fs");
|
|
|
+ blurShader.compile("resources/blur.vs", nullptr, "resources/blur.fs");
|
|
|
+ if(error.has()) {
|
|
|
+ error.message.printLine();
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ error = shadowBuffer.init(window.getSize(), TextureFormat::depth32(true));
|
|
|
if(error.has()) {
|
|
|
error.message.printLine();
|
|
|
return;
|
|
|
}
|
|
|
- error = shadowBuffer.init(window.getSize(), TextureFormat::depth32());
|
|
|
+ error = blurShadowBuffer.init(window.getSize(),
|
|
|
+ TextureFormat::float32(2, true));
|
|
|
if(error.has()) {
|
|
|
error.message.printLine();
|
|
|
return;
|