diff --git a/examples/FirstScene/main.cpp b/examples/FirstScene/main.cpp index 42672c5d3..04b6f25d3 100644 --- a/examples/FirstScene/main.cpp +++ b/examples/FirstScene/main.cpp @@ -223,10 +223,6 @@ int main() // On active la caméra (Qui s'occupera de préparer la fenêtre au rendu) camera.Activate(); - // On vide le buffer de couleur et de profondeur pour réinitialiser le rendu - // À l'avenir, ceci sera fait automatiquement par la scène via les backgrounds - NzRenderer::Clear(nzRendererClear_Color | nzRendererClear_Depth); - // On procède maintenant au rendu de la scène en elle-même, celui-ci se décompose en quatre étapes distinctes // Pour commencer, on mets à jour la scène, ceci appelle la méthode Update de tous les SceneNode enregistrés diff --git a/include/Nazara/2D/Background.hpp b/include/Nazara/2D/Background.hpp new file mode 100644 index 000000000..5831c0d50 --- /dev/null +++ b/include/Nazara/2D/Background.hpp @@ -0,0 +1,24 @@ +// Copyright (C) 2013 Jérôme Leclercq +// This file is part of the "Nazara Engine - 2D Module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_BACKGROUND_HPP +#define NAZARA_BACKGROUND_HPP + +#include +#include + +class NAZARA_API NzBackground +{ + public: + NzBackground() = default; + ~NzBackground(); + + virtual void Draw() const = 0; + + virtual nzBackgroundType GetBackgroundType() const = 0; +}; + +#endif // NAZARA_BACKGROUND_HPP diff --git a/include/Nazara/2D/ColorBackground.hpp b/include/Nazara/2D/ColorBackground.hpp new file mode 100644 index 000000000..92e3b4d0a --- /dev/null +++ b/include/Nazara/2D/ColorBackground.hpp @@ -0,0 +1,30 @@ +// Copyright (C) 2013 Jérôme Leclercq +// This file is part of the "Nazara Engine - 2D Module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_COLORBACKGROUND_HPP +#define NAZARA_COLORBACKGROUND_HPP + +#include +#include +#include + +class NAZARA_API NzColorBackground : public NzBackground +{ + public: + NzColorBackground(const NzColor& color = NzColor::Black); + + void Draw() const; + + nzBackgroundType GetBackgroundType() const; + NzColor GetColor() const; + + void SetColor(const NzColor& color); + + private: + NzColor m_color; +}; + +#endif // NAZARA_COLORBACKGROUND_HPP diff --git a/include/Nazara/2D/Enums.hpp b/include/Nazara/2D/Enums.hpp new file mode 100644 index 000000000..9f0ebde5b --- /dev/null +++ b/include/Nazara/2D/Enums.hpp @@ -0,0 +1,20 @@ +// Copyright (C) 2013 Jérôme Leclercq +// This file is part of the "Nazara Engine - 2D module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#pragma once + +#ifndef NAZARA_ENUMS_2D_HPP +#define NAZARA_ENUMS_2D_HPP + +enum nzBackgroundType +{ + nzBackgroundType_Color, // NzColorBackground + nzBackgroundType_Skybox, // NzSkyboxBackground + nzBackgroundType_Texture, // NzTextureBackground + nzBackgroundType_User, + + nzBackgroundType_Max = nzBackgroundType_User +}; + +#endif // NAZARA_ENUMS_2D_HPP diff --git a/include/Nazara/3D/Scene.hpp b/include/Nazara/3D/Scene.hpp index 1bf3dfc32..99a988714 100644 --- a/include/Nazara/3D/Scene.hpp +++ b/include/Nazara/3D/Scene.hpp @@ -8,6 +8,7 @@ #define NAZARA_SCENE_HPP #include +#include #include #include #include @@ -33,6 +34,7 @@ class NAZARA_API NzScene void Cull(); void Draw(); + NzBackground* GetBackground() const; NzSceneNode& GetRoot() const; float GetUpdateTime() const; unsigned int GetUpdatePerSecond() const; @@ -40,6 +42,7 @@ class NAZARA_API NzScene void RegisterForUpdate(NzUpdatable* object); void SetAmbientColor(const NzColor& color); + void SetBackground(NzBackground* background); void SetUpdatePerSecond(unsigned int updatePerSecond); void UnregisterForUpdate(NzUpdatable* object); diff --git a/src/Nazara/2D/Background.cpp b/src/Nazara/2D/Background.cpp new file mode 100644 index 000000000..fd2d37c97 --- /dev/null +++ b/src/Nazara/2D/Background.cpp @@ -0,0 +1,8 @@ +// Copyright (C) 2013 Jérôme Leclercq +// This file is part of the "Nazara Engine - 2D Module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include + +NzBackground::~NzBackground() = default; diff --git a/src/Nazara/2D/ColorBackground.cpp b/src/Nazara/2D/ColorBackground.cpp new file mode 100644 index 000000000..e4b968233 --- /dev/null +++ b/src/Nazara/2D/ColorBackground.cpp @@ -0,0 +1,33 @@ +// Copyright (C) 2013 Jérôme Leclercq +// This file is part of the "Nazara Engine - 2D Module" +// For conditions of distribution and use, see copyright notice in Config.hpp + +#include +#include +#include + +NzColorBackground::NzColorBackground(const NzColor& color) : +m_color(color) +{ +} + +void NzColorBackground::Draw() const +{ + NzRenderer::SetClearColor(m_color); + NzRenderer::Clear(nzRendererClear_Color); +} + +nzBackgroundType NzColorBackground::GetBackgroundType() const +{ + return nzBackgroundType_Color; +} + +NzColor NzColorBackground::GetColor() const +{ + return m_color; +} + +void NzColorBackground::SetColor(const NzColor& color) +{ + m_color = color; +} diff --git a/src/Nazara/3D/Scene.cpp b/src/Nazara/3D/Scene.cpp index 5989b9af4..01ed75085 100644 --- a/src/Nazara/3D/Scene.cpp +++ b/src/Nazara/3D/Scene.cpp @@ -3,6 +3,7 @@ // For conditions of distribution and use, see copyright notice in Config.hpp #include +#include #include #include #include @@ -19,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -45,6 +47,7 @@ struct NzSceneImpl { } + std::unique_ptr background; std::vector updateList; std::vector visibleUpdateList; std::vector instancingData; @@ -67,6 +70,8 @@ NzScene::NzScene() if (NzRenderer::HasCapability(nzRendererCap_Instancing)) m_impl->instancingData.resize(NAZARA_RENDERER_INSTANCING_MAX); + + SetBackground(nullptr); } NzScene::~NzScene() @@ -103,6 +108,9 @@ void NzScene::Draw() { NzRenderer::Clear(nzRendererClear_Depth); + if (m_impl->background) + m_impl->background->Draw(); + LightComparator lightComparator; // Pour les meshs squelettiques, on utilise un buffer commun @@ -315,6 +323,11 @@ void NzScene::Draw() drawable->Draw(); } +NzBackground* NzScene::GetBackground() const +{ + return m_impl->background.get(); +} + NzSceneNode& NzScene::GetRoot() const { return m_impl->root; @@ -348,6 +361,14 @@ void NzScene::SetAmbientColor(const NzColor& color) m_impl->ambientColor = color; } +void NzScene::SetBackground(NzBackground* background) +{ + if (!background) + background = new NzColorBackground; + + m_impl->background.reset(background); +} + void NzScene::SetUpdatePerSecond(unsigned int updatePerSecond) { m_impl->updatePerSecond = updatePerSecond;