Răsfoiți Sursa

Move bloom to the new system

Panagiotis Christopoulos Charitos 8 ani în urmă
părinte
comite
44cb91f150

+ 25 - 6
shaders/Bloom.frag.glsl → programs/Bloom.ankiprog

@@ -1,8 +1,23 @@
-// 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="TEX_SIZE" type="vec2" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Common.glsl"
 #include "shaders/Tonemapping.glsl"
 
@@ -24,7 +39,7 @@ layout(location = 0) out vec4 out_color;
 
 void main()
 {
-	const vec2 TEXEL_SIZE = 1.0 / vec2(WIDTH, HEIGHT);
+	const vec2 TEXEL_SIZE = 1.0 / TEX_SIZE;
 
 	vec3 color = textureLod(u_tex, in_uv, 0.0).rgb;
 	color += textureLod(u_tex, in_uv + TEXEL_SIZE, 0.0).rgb;
@@ -38,3 +53,7 @@ void main()
 
 	out_color = vec4(color, 0.25);
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 24 - 5
shaders/BloomUpscale.frag.glsl → programs/BloomUpscale.ankiprog

@@ -1,8 +1,23 @@
-// 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="TEX_SIZE" type="vec2" const="1"/>
+			</inputs>
+
+			<source><![CDATA[
 #include "shaders/Common.glsl"
 
 layout(ANKI_TEX_BINDING(0, 0)) uniform mediump sampler2D u_tex;
@@ -12,7 +27,7 @@ layout(location = 0) out vec3 out_color;
 
 void main()
 {
-	const vec2 TEXEL_SIZE = 1.0 / vec2(WIDTH, HEIGHT);
+	const vec2 TEXEL_SIZE = 1.0 / TEX_SIZE;
 	const float MIPMAP = 0.0;
 
 	out_color = textureLod(u_tex, in_texCoord, MIPMAP).rgb;
@@ -23,3 +38,7 @@ void main()
 
 	out_color /= 5.0;
 }
+			]]></source>
+		</shader>
+	</shaders>
+</shaderProgram>

+ 17 - 18
src/anki/renderer/Bloom.cpp

@@ -44,15 +44,15 @@ Error BloomExposure::init(const ConfigSet& config)
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	// init shaders
-	ANKI_CHECK(m_r->createShaderf("shaders/Bloom.frag.glsl",
-		m_frag,
-		"#define WIDTH %u\n"
-		"#define HEIGHT %u\n",
-		m_r->getDownscaleBlur().getSmallPassWidth(),
-		m_r->getDownscaleBlur().getSmallPassHeight()));
+	ANKI_CHECK(getResourceManager().loadResource("programs/Bloom.ankiprog", m_prog));
 
-	// Init prog
-	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
+	ShaderProgramResourceConstantValueInitList<1> consts(m_prog);
+	consts.add(
+		"TEX_SIZE", Vec2(m_r->getDownscaleBlur().getSmallPassWidth(), m_r->getDownscaleBlur().getSmallPassHeight()));
+
+	const ShaderProgramResourceVariant* variant;
+	m_prog->getOrCreateVariant(consts.get(), variant);
+	m_grProg = variant->getProgram();
 
 	return ErrorCode::NONE;
 }
@@ -77,7 +77,7 @@ void BloomExposure::run(RenderingContext& ctx)
 
 	cmdb->beginRenderPass(m_fb);
 	cmdb->setViewport(0, 0, m_width, m_height);
-	cmdb->bindShaderProgram(m_prog);
+	cmdb->bindShaderProgram(m_grProg);
 	cmdb->bindTexture(0, 0, m_r->getDownscaleBlur().getSmallPassTexture());
 
 	Vec4* uniforms = allocateAndBindUniforms<Vec4*>(sizeof(Vec4), cmdb, 0, 0);
@@ -117,15 +117,14 @@ Error BloomUpscale::init(const ConfigSet& config)
 	m_fb = gr.newInstance<Framebuffer>(fbInit);
 
 	// init shaders
-	ANKI_CHECK(m_r->createShaderf("shaders/BloomUpscale.frag.glsl",
-		m_frag,
-		"#define WIDTH %u\n"
-		"#define HEIGHT %u\n",
-		m_width,
-		m_height));
+	ANKI_CHECK(getResourceManager().loadResource("programs/BloomUpscale.ankiprog", m_prog));
+
+	ShaderProgramResourceConstantValueInitList<1> consts(m_prog);
+	consts.add("TEX_SIZE", Vec2(m_width, m_height));
 
-	// Init prog
-	m_r->createDrawQuadShaderProgram(m_frag->getGrShader(), m_prog);
+	const ShaderProgramResourceVariant* variant;
+	m_prog->getOrCreateVariant(consts.get(), variant);
+	m_grProg = variant->getProgram();
 
 	return ErrorCode::NONE;
 }
@@ -150,7 +149,7 @@ void BloomUpscale::run(RenderingContext& ctx)
 
 	cmdb->setViewport(0, 0, m_width, m_height);
 	cmdb->beginRenderPass(m_fb);
-	cmdb->bindShaderProgram(m_prog);
+	cmdb->bindShaderProgram(m_grProg);
 	cmdb->bindTexture(0, 0, m_r->getBloom().m_extractExposure.m_rt);
 	m_r->drawQuad(cmdb);
 

+ 6 - 4
src/anki/renderer/Bloom.h

@@ -43,8 +43,9 @@ anki_internal:
 
 private:
 	FramebufferPtr m_fb;
-	ShaderResourcePtr m_frag;
-	ShaderProgramPtr m_prog;
+
+	ShaderProgramResourcePtr m_prog;
+	ShaderProgramPtr m_grProg;
 
 	F32 m_threshold = 10.0; ///< How bright it is
 	F32 m_scale = 1.0;
@@ -74,8 +75,9 @@ anki_internal:
 
 private:
 	FramebufferPtr m_fb;
-	ShaderResourcePtr m_frag;
-	ShaderProgramPtr m_prog;
+
+	ShaderProgramResourcePtr m_prog;
+	ShaderProgramPtr m_grProg;
 };
 
 /// Bloom passes.