BearishSun 10 лет назад
Родитель
Сommit
d4b4df4cc9

+ 16 - 0
BansheeEngine/Include/BsRendererUtility.h

@@ -4,6 +4,7 @@
 #include "BsModule.h"
 #include "BsRect2.h"
 #include "BsVector2I.h"
+#include "BsRendererMaterial.h"
 
 namespace BansheeEngine
 {
@@ -84,6 +85,21 @@ namespace BansheeEngine
 	 */
 	BS_EXPORT RendererUtility& gRendererUtility();
 
+	/** Shader that resolves a MSAA surface into a non-MSAA render target. */
+	class ResolveMat : public RendererMaterial<ResolveMat>
+	{
+		RMAT_DEF("Resolve.bsl");
+
+	public:
+		ResolveMat();
+
+		/** Updates the parameter buffers used by the material. */
+		void setParameters(const SPtr<TextureCore>& source);
+	private:
+		MaterialParamIntCore mNumSamples;
+		MaterialParamTextureCore mSource;
+	};
+
 	/** @} */
 	/** @endcond */
 }

+ 14 - 0
BansheeEngine/Source/BsRendererUtility.cpp

@@ -351,4 +351,18 @@ namespace BansheeEngine
 	{
 		return RendererUtility::instance();
 	}
+
+	ResolveMat::ResolveMat()
+	{
+		mSource = mMaterial->getParamTexture("gSource");;
+		mMaterial->getParam("gNumSamples", mNumSamples);
+	}
+
+	void ResolveMat::setParameters(const SPtr<TextureCore>& source)
+	{
+		mSource.set(source);
+
+		UINT32 sampleCount = source->getProperties().getMultisampleCount();
+		mNumSamples.set(sampleCount);
+	}
 }

+ 2 - 2
RenderBeast/Source/BsRenderBeast.cpp

@@ -735,8 +735,8 @@ namespace BansheeEngine
 
 		if (hasGBuffer)
 		{
-			// TODO - Instead of doing a separate resolve here I could potentially perform a resolve directly in the
-			// light pass.
+			// TODO - Instead of doing a separate resolve here I could potentially perform a resolve directly in some
+			// post-processing pass (e.g. tone mapping). Right now it is just an unnecessary blit.
 			camData.target->resolve();
 		}