X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fgraphics%2Fviewport.cpp;h=f9558d036865de4e3b388e5e22a96b1d1a8536d8;hb=b49cc8c88caf7d69b35b50e23a40528e71306ade;hp=181c97cd7a9d8a5ba9859920abe26c2081aed844;hpb=e821b85cf13376b11d125bdf5da4f16b20acf2e2;p=blank.git diff --git a/src/graphics/viewport.cpp b/src/graphics/viewport.cpp index 181c97c..f9558d0 100644 --- a/src/graphics/viewport.cpp +++ b/src/graphics/viewport.cpp @@ -45,6 +45,9 @@ void Camera::Clip(float n, float f) noexcept { UpdateProjection(); } +void Camera::View(const glm::mat4 &v) noexcept { + view = v; +} void Camera::UpdateProjection() noexcept { projection = glm::perspective(fov, aspect, near, far); @@ -76,14 +79,14 @@ void Canvas::UpdateProjection() noexcept { SkyBox::SkyBox(CubeMap &&tex) : texture(std::move(tex)) -, model() { - model.LoadUnitBox(); +, mesh() { + mesh.LoadUnitBox(); } void SkyBox::Render(Viewport &viewport) noexcept { SkyBoxShader &prog = viewport.SkyBoxProgram(); prog.SetTexture(texture); - model.Draw(); + mesh.Draw(); } @@ -148,14 +151,9 @@ void Viewport::Resize(int w, int h) noexcept { cam.Aspect(fw, fh); canv.Resize(fw, fh); - chunk_prog.SetProjection(Perspective()); - if (active_prog == HUD) { - entity_prog.SetProjection(Ortho()); - } else { - entity_prog.SetProjection(Perspective()); - } - sky_prog.SetProjection(Perspective()); - sprite_prog.SetProjection(Ortho()); + ChunkProgram().SetProjection(Perspective()); + SkyBoxProgram().SetProjection(Perspective()); + SpriteProgram().SetProjection(Ortho()); } void Viewport::Clear() noexcept { @@ -221,22 +219,22 @@ DirectionalLighting &Viewport::HUDProgram() noexcept { return entity_prog; } -PlainColor &Viewport::WorldOutlineProgram() noexcept { - if (active_prog != OUTLINE_WORLD) { - outline_prog.Activate(); - outline_prog.SetVP(cam.View(), cam.Projection()); - active_prog = OUTLINE_WORLD; +PlainColor &Viewport::WorldColorProgram() noexcept { + if (active_prog != COLOR_WORLD) { + color_prog.Activate(); + color_prog.SetVP(cam.View(), cam.Projection()); + active_prog = COLOR_WORLD; } - return outline_prog; + return color_prog; } -PlainColor &Viewport::HUDOutlineProgram() noexcept { - if (active_prog != OUTLINE_HUD) { - outline_prog.Activate(); - outline_prog.SetVP(canv.View(), canv.Projection()); - active_prog = OUTLINE_HUD; +PlainColor &Viewport::HUDColorProgram() noexcept { + if (active_prog != COLOR_HUD) { + color_prog.Activate(); + color_prog.SetVP(canv.View(), canv.Projection()); + active_prog = COLOR_HUD; } - return outline_prog; + return color_prog; } SkyBoxShader &Viewport::SkyBoxProgram() noexcept { @@ -261,9 +259,12 @@ BlendedSprite &Viewport::SpriteProgram() noexcept { void Viewport::WorldPosition(const glm::mat4 &t) noexcept { - cam.View(glm::inverse(t)); - chunk_prog.SetView(cam.View()); - sky_prog.SetView(cam.View()); + const glm::vec3 offset(0.0f, 0.0f, 0.0f); + //const glm::vec3 offset(0.0f, 0.0f, -5.0f); + cam.View(glm::translate(glm::inverse(t), glm::vec3(t * glm::vec4(offset, 0.0f)))); + ChunkProgram().SetView(cam.View()); + sky_prog.Activate(); + SkyBoxProgram().SetView(cam.View()); } }