Browse Source

Move forward shading to the new system

Panagiotis Christopoulos Charitos 8 years ago
parent
commit
4ceca2eed2

+ 26 - 5
shaders/FsUpscale.frag.glsl → programs/ForwardShadingUpscale.ankiprog

@@ -1,8 +1,25 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
+<!-- 
+Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
+All rights reserved.
+Code licensed under the BSD License.
+http://www.anki3d.org/LICENSE
+-->
+<shaderProgram>
+	<shaders>
+		<shader type="vert">
+			<source><![CDATA[
+#include "shaders/Quad.vert.glsl"
+			]]></source>
+		</shader>
+
+		<shader type="frag">
+			<inputs>
+				<input name="SRC_SIZE" type="vec2" const="1"/>
+				<input name="FB_SIZE" type="vec2" const="1"/>
+				<input name="NOISE_TEX_SIZE" type="uint" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Common.glsl"
 #include "shaders/Functions.glsl"
 
@@ -36,3 +53,7 @@ void main()
 	out_color.rgb += blueNoise / 32.0;
 #endif
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 26 - 5
shaders/VolumetricUpscale.frag.glsl → programs/ForwardShadingVolumetricUpscale.ankiprog

@@ -1,8 +1,25 @@
-// Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
-// All rights reserved.
-// Code licensed under the BSD License.
-// http://www.anki3d.org/LICENSE
-
+<!-- 
+Copyright (C) 2009-2017, Panagiotis Christopoulos Charitos and contributors.
+All rights reserved.
+Code licensed under the BSD License.
+http://www.anki3d.org/LICENSE
+-->
+<shaderProgram>
+	<shaders>
+		<shader type="vert">
+			<source><![CDATA[
+#include "shaders/Quad.vert.glsl"
+			]]></source>
+		</shader>
+
+		<shader type="frag">
+			<inputs>
+				<input name="SRC_SIZE" type="vec2" const="1"/>
+				<input name="FB_SIZE" type="vec2" const="1"/>
+				<input name="NOISE_TEX_SIZE" type="uint" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Functions.glsl"
 
 #define BLUE_NOISE 0
@@ -36,3 +53,7 @@ void main()
 
 	out_color = vec4(col, 0.0);
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 21 - 25
src/anki/renderer/ForwardShading.cpp

@@ -66,25 +66,23 @@ Error ForwardShading::initVol()
 {
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_vol.m_noiseTex));
 
-	ANKI_CHECK(m_r->createShaderf("shaders/VolumetricUpscale.frag.glsl",
-		m_vol.m_frag,
-		"#define SRC_SIZE vec2(float(%u), float(%u))\n"
-		"#define FB_SIZE vec2(float(%u), float(%u))\n"
-		"#define NOISE_TEX_SIZE %u\n",
-		m_r->getWidth() / VOLUMETRIC_FRACTION,
-		m_r->getHeight() / VOLUMETRIC_FRACTION,
-		m_width,
-		m_height,
-		m_vol.m_noiseTex->getWidth()));
+	ANKI_CHECK(getResourceManager().loadResource("programs/ForwardShadingVolumetricUpscale.ankiprog", m_vol.m_prog));
+
+	ShaderProgramResourceConstantValueInitList<3> consts(m_vol.m_prog);
+	consts.add("NOISE_TEX_SIZE", U32(m_vol.m_noiseTex->getWidth()))
+		.add("SRC_SIZE", Vec2(m_r->getWidth() / VOLUMETRIC_FRACTION, m_r->getHeight() / VOLUMETRIC_FRACTION))
+		.add("FB_SIZE", Vec2(m_width, m_height));
 
-	m_r->createDrawQuadShaderProgram(m_vol.m_frag->getGrShader(), m_vol.m_prog);
+	const ShaderProgramResourceVariant* variant;
+	m_vol.m_prog->getOrCreateVariant(consts.get(), variant);
+	m_vol.m_grProg = variant->getProgram();
 
 	return ErrorCode::NONE;
 }
 
 void ForwardShading::drawVolumetric(RenderingContext& ctx, CommandBufferPtr cmdb)
 {
-	cmdb->bindShaderProgram(m_vol.m_prog);
+	cmdb->bindShaderProgram(m_vol.m_grProg);
 	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::ONE);
 	cmdb->setDepthWrite(false);
 	cmdb->setDepthCompareOperation(CompareOperation::ALWAYS);
@@ -214,18 +212,16 @@ Error ForwardShadingUpscale::initInternal(const ConfigSet& config)
 	ANKI_CHECK(getResourceManager().loadResource("engine_data/BlueNoiseLdrRgb64x64.ankitex", m_noiseTex));
 
 	// Shader
-	ANKI_CHECK(m_r->createShaderf("shaders/FsUpscale.frag.glsl",
-		m_frag,
-		"#define FB_SIZE uvec2(%uu, %uu)\n"
-		"#define SRC_SIZE uvec2(%uu, %uu)\n"
-		"#define NOISE_TEX_SIZE %u\n",
-		m_r->getWidth(),
-		m_r->getHeight(),
-		m_r->getWidth() / FS_FRACTION,
-		m_r->getHeight() / FS_FRACTION,
-		m_noiseTex->getWidth()));
-
-	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
+	ANKI_CHECK(getResourceManager().loadResource("programs/ForwardShadingUpscale.ankiprog", m_prog));
+
+	ShaderProgramResourceConstantValueInitList<3> consts(m_prog);
+	consts.add("NOISE_TEX_SIZE", U32(m_noiseTex->getWidth()))
+		.add("SRC_SIZE", Vec2(m_r->getWidth() / FS_FRACTION, m_r->getHeight() / FS_FRACTION))
+		.add("FB_SIZE", Vec2(m_r->getWidth(), m_r->getWidth()));
+
+	const ShaderProgramResourceVariant* variant;
+	m_prog->getOrCreateVariant(consts.get(), variant);
+	m_grProg = variant->getProgram();
 
 	// Create FB
 	FramebufferInitInfo fbInit("fwdupscale");
@@ -252,7 +248,7 @@ void ForwardShadingUpscale::run(RenderingContext& ctx)
 	cmdb->setBlendFactors(0, BlendFactor::ONE, BlendFactor::SRC_ALPHA);
 
 	cmdb->beginRenderPass(m_fb);
-	cmdb->bindShaderProgram(m_prog);
+	cmdb->bindShaderProgram(m_grProg);
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 
 	m_r->drawQuad(cmdb);

+ 5 - 4
src/anki/renderer/ForwardShading.h

@@ -65,8 +65,8 @@ private:
 	class Vol
 	{
 	public:
-		ShaderResourcePtr m_frag;
-		ShaderProgramPtr m_prog;
+		ShaderProgramResourcePtr m_prog;
+		ShaderProgramPtr m_grProg;
 		TextureResourcePtr m_noiseTex;
 	} m_vol;
 
@@ -89,8 +89,9 @@ public:
 
 private:
 	FramebufferPtr m_fb;
-	ShaderResourcePtr m_frag;
-	ShaderProgramPtr m_prog;
+
+	ShaderProgramResourcePtr m_prog;
+	ShaderProgramPtr m_grProg;
 
 	TextureResourcePtr m_noiseTex;