diff options
-rw-r--r-- | main.cpp | 4 | ||||
-rw-r--r-- | src/world.cpp | 44 |
2 files changed, 46 insertions, 2 deletions
@@ -320,9 +320,11 @@ void render() { if (ui::debug) { auto pos = game::engine.getSystem<PlayerSystem>()->getPosition(); ui::putText(offset.x-SCREEN_WIDTH/2, (offset.y+SCREEN_HEIGHT/2)-ui::fontSize, - "loc: (%+.2f, %+.2f)\nticks: %u\nxml: %s", + "loc: (%+.2f, %+.2f)\noffset: (%+.2f, %+.2f)\nticks: %u\nxml: %s", pos.x, pos.y, + offset.x, + offset.y, game::time::getTickCount(), game::engine.getSystem<WorldSystem>()->getXMLFile().c_str() ); diff --git a/src/world.cpp b/src/world.cpp index 02db9cf..62e4f69 100644 --- a/src/world.cpp +++ b/src/world.cpp @@ -955,8 +955,50 @@ void WorldSystem::render(void) glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, 0, &grasst[0]); glDrawArrays(GL_TRIANGLES, 0 , c.size()); - Render::worldShader.disable(); + // the starting pixel of the world + float s = -(static_cast<float>(SCREEN_WIDTH)/2.0f); + // the ending pixel of the world + float e = (static_cast<float>(SCREEN_WIDTH)/2.0f); + + if (offset.x + world.startX > s) { + + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0,0,0))); + glUniform1f(Render::worldShader.uniform[WU_light_impact], 0.0f); + + GLfloat blackBarLeft[] = {s, 0.0f, -3.0f, 0.0f, 0.0f, + world.startX, 0.0f, -3.0f, 1.0f, 0.0f, + world.startX, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f, + + world.startX, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f, + s, static_cast<float>(SCREEN_HEIGHT), -3.0f, 0.0f, 1.0f, + s, 0.0f, -3.0f, 0.0f, 0.0f}; + + glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarLeft[0]); + glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarLeft[3]); + glDrawArrays(GL_TRIANGLES, 0 , 6); + } + + if (offset.x - world.startX < e) { + + glBindTexture(GL_TEXTURE_2D, Texture::genColor(Color(0,0,0))); + glUniform1f(Render::worldShader.uniform[WU_light_impact], 0.0f); + + GLfloat blackBarRight[] = {grassc[grassc.size()-3], 0.0f, -3.0f, 0.0f, 0.0f, + e, 0.0f, -3.0f, 1.0f, 0.0f, + e, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f, + + e, static_cast<float>(SCREEN_HEIGHT), -3.0f, 1.0f, 1.0f, + grassc[grassc.size()-3], static_cast<float>(SCREEN_HEIGHT), -3.0f, 0.0f, 1.0f, + grassc[grassc.size()-3], 0.0f, -3.0f, 0.0f, 0.0f}; + + glVertexAttribPointer(Render::worldShader.coord, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarRight[0]); + glVertexAttribPointer(Render::worldShader.tex, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*5, &blackBarRight[3]); + glDrawArrays(GL_TRIANGLES, 0 , 6); + } + + Render::worldShader.disable(); Render::worldShader.unuse(); + } else { Render::useShader(&Render::worldShader); Render::worldShader.use(); |