Browse Source

Initial preparation for light pre-pass rendering.

Lasse Öörni 14 years ago
parent
commit
b90ceaf4d1

+ 2 - 0
Engine/Engine/GraphicsAPI.cpp

@@ -765,6 +765,8 @@ static void RegisterRenderer(asIScriptEngine* engine)
     engine->RegisterObjectMethod("Renderer", "uint get_numViewports() const", asMETHOD(Renderer, GetNumViewports), asCALL_THISCALL);
     engine->RegisterObjectMethod("Renderer", "void set_viewports(uint, const Viewport&in)", asMETHOD(Renderer, SetViewport), asCALL_THISCALL);
     engine->RegisterObjectMethod("Renderer", "const Viewport& get_viewports(uint) const", asMETHOD(Renderer, GetViewport), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Renderer", "void set_lightPrepass(bool)", asMETHOD(Renderer, SetLightPrepass), asCALL_THISCALL);
+    engine->RegisterObjectMethod("Renderer", "bool get_lightPrepass() const", asMETHOD(Renderer, GetLightPrepass), asCALL_THISCALL);
     engine->RegisterObjectMethod("Renderer", "void set_specularLighting(bool)", asMETHOD(Renderer, SetSpecularLighting), asCALL_THISCALL);
     engine->RegisterObjectMethod("Renderer", "bool get_specularLighting() const", asMETHOD(Renderer, GetSpecularLighting), asCALL_THISCALL);
     engine->RegisterObjectMethod("Renderer", "void set_textureAnisotropy(int)", asMETHOD(Renderer, SetTextureAnisotropy), asCALL_THISCALL);

+ 2 - 0
Engine/Graphics/GraphicsDefs.h

@@ -171,6 +171,8 @@ enum PassType
     PASS_PREALPHA,
     PASS_POSTALPHA,
     PASS_SHADOW,
+    PASS_GBUFFER,
+    PASS_MATERIAL,
     MAX_PASSES
 };
 

+ 12 - 1
Engine/Graphics/Renderer.cpp

@@ -1,6 +1,6 @@
 //
 // Urho3D Engine
-// Copyright (c) 2008-2011 Lasse ��rni
+// Copyright (c) 2008-2011 Lasse Öörni
 //
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
@@ -256,6 +256,7 @@ Renderer::Renderer(Context* context) :
     occlusionBufferSize_(256),
     occluderSizeThreshold_(0.1f),
     shadersChangedFrameNumber_(M_MAX_UNSIGNED),
+    lightPrepass_(false),
     specularLighting_(true),
     drawShadows_(true),
     reuseShadowMaps_(true),
@@ -292,6 +293,16 @@ void Renderer::SetViewport(unsigned index, const Viewport& viewport)
     viewports_[index] = viewport;
 }
 
+void Renderer::SetLightPrepass(bool enable)
+{
+    // Light prepass is incompatible with hardware multisampling, so disable if enabled.
+    if (graphics_->GetMultiSample() > 1)
+        graphics_->SetMode(graphics_->GetWidth(), graphics_->GetHeight(), graphics_->GetFullscreen(), graphics_->GetVSync(),
+            graphics_->GetTripleBuffer(), 1);
+    
+    lightPrepass_ = enable;
+}
+
 void Renderer::SetSpecularLighting(bool enable)
 {
     specularLighting_ = enable;

+ 7 - 1
Engine/Graphics/Renderer.h

@@ -1,6 +1,6 @@
 //
 // Urho3D Engine
-// Copyright (c) 2008-2011 Lasse ��rni
+// Copyright (c) 2008-2011 Lasse Öörni
 //
 // Permission is hereby granted, free of charge, to any person obtaining a copy
 // of this software and associated documentation files (the "Software"), to deal
@@ -121,6 +121,8 @@ public:
     void SetNumViewports(unsigned num);
     /// %Set a viewport.
     void SetViewport(unsigned index, const Viewport& viewport);
+    /// %Set light prepass rendering on/off.
+    void SetLightPrepass(bool enable);
     /// %Set specular lighting on/off.
     void SetSpecularLighting(bool enable);
     /// %Set texture anisotropy.
@@ -159,6 +161,8 @@ public:
     unsigned GetNumViewports() const { return viewports_.Size(); }
     /// Return viewport.
     const Viewport& GetViewport(unsigned index) const;
+    /// Return whether light prepass rendering is enabled.
+    bool GetLightPrepass() const { return lightPrepass_; }
     /// Return whether specular lighting is enabled.
     bool GetSpecularLighting() const { return specularLighting_; }
     /// Return whether drawing shadows is enabled.
@@ -377,6 +381,8 @@ private:
     unsigned numBatches_;
     /// Frame number on which shaders last changed.
     unsigned shadersChangedFrameNumber_;
+    /// Light prepass mode flag.
+    bool lightPrepass_;
     /// Specular lighting flag.
     bool specularLighting_;
     /// Draw shadows flag.

+ 2 - 0
Engine/Graphics/Technique.cpp

@@ -39,6 +39,8 @@ static const String passNames[] =
     "prealpha",
     "postalpha",
     "shadow",
+    "gbuffer",
+    "material",
     ""
 };