浏览代码

Some interlacing work

Panagiotis Christopoulos Charitos 9 年之前
父节点
当前提交
b433f50752

+ 3 - 4
sandbox/Main.cpp

@@ -96,6 +96,8 @@ Error MyApp::userMainLoop(Bool& quit)
 	Input& in = getInput();
 	Input& in = getInput();
 	MainRenderer& renderer = getMainRenderer();
 	MainRenderer& renderer = getMainRenderer();
 
 
+	renderer.getOffscreenRenderer().m_interlace = true;
+
 	if(in.getKey(KeyCode::ESCAPE))
 	if(in.getKey(KeyCode::ESCAPE))
 	{
 	{
 		quit = true;
 		quit = true;
@@ -116,10 +118,7 @@ Error MyApp::userMainLoop(Bool& quit)
 
 
 	if(in.getKey(KeyCode::L) == 1)
 	if(in.getKey(KeyCode::L) == 1)
 	{
 	{
-		/*Vec3 origin = mover->getWorldTransform().getOrigin().xyz();
-		printf("%f %f %f\n", origin.x(), origin.y(), origin.z());*/
-		mover->setLocalOrigin(Vec4(0.0));
-		mover->setLocalRotation(Mat3x4::getIdentity());
+		renderer.getOffscreenRenderer().m_interlace = !renderer.getOffscreenRenderer().m_interlace;
 	}
 	}
 
 
 	if(in.getKey(KeyCode::F1) == 1)
 	if(in.getKey(KeyCode::F1) == 1)

+ 3 - 3
shaders/IsAlternate.frag.glsl

@@ -34,11 +34,11 @@ void main()
 	if(oldNdc.x < 1.0 && oldNdc.y < 1.0 && oldNdc.x > -1.0 && oldNdc.y > -1.0)
 	if(oldNdc.x < 1.0 && oldNdc.y < 1.0 && oldNdc.x > -1.0 && oldNdc.y > -1.0)
 	{
 	{
 		vec2 oldUv = oldNdc * 0.5 + 0.5;
 		vec2 oldUv = oldNdc * 0.5 + 0.5;
+		float oldDepth = (oldNdc4.z / oldNdc4.w) * 0.5 + 0.5;
 
 
-		// Get prev depth
-		float prevDepth = textureLod(u_prevDepthRt, oldUv, 0.0).r;
+		float oldDepthRef = textureLod(u_prevDepthRt, oldUv, 0.0).r;
 
 
-		if(abs(prevDepth - depth) < 0.01)
+		if(abs(oldDepthRef - oldDepth) < 0.01)
 		{
 		{
 			out_color = textureLod(u_oldIsRt, oldUv, 0.0).rgb;
 			out_color = textureLod(u_oldIsRt, oldUv, 0.0).rgb;
 		}
 		}

+ 1 - 1
shaders/Tonemapping.glsl

@@ -53,7 +53,7 @@ vec3 tonemapUncharted2(in vec3 color)
 vec3 tonemap(in vec3 color, in float avgLum, in float threshold)
 vec3 tonemap(in vec3 color, in float avgLum, in float threshold)
 {
 {
 	vec3 c = computeExposedColor(color, avgLum, threshold);
 	vec3 c = computeExposedColor(color, avgLum, threshold);
-	// float saturation = clamp(avgLum, 0.0, 1.0);
+	//float saturation = clamp(avgLum, 0.5, 1.0);
 	float saturation = 1.0;
 	float saturation = 1.0;
 	return tonemapReinhard(c, saturation);
 	return tonemapReinhard(c, saturation);
 	// return tonemapUncharted2(c);
 	// return tonemapUncharted2(c);

+ 1 - 1
src/anki/renderer/FsUpscale.cpp

@@ -97,7 +97,7 @@ void FsUpscale::run(RenderingContext& ctx)
 	cmdb->bindShaderProgram(m_prog);
 	cmdb->bindShaderProgram(m_prog);
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 
 
-	Bool cheat = (m_r->getFrameCount() % 2) == 1;
+	Bool cheat = (m_r->getFrameCount() % 2) == 1 && m_r->m_interlace;
 	if(cheat)
 	if(cheat)
 	{
 	{
 		cmdb->setStencilCompareMask(FaceSelectionBit::FRONT, 0xF);
 		cmdb->setStencilCompareMask(FaceSelectionBit::FRONT, 0xF);

+ 1 - 1
src/anki/renderer/Is.cpp

@@ -202,7 +202,7 @@ void Is::run(RenderingContext& ctx)
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->setViewport(0, 0, m_r->getWidth(), m_r->getHeight());
 	cmdb->beginRenderPass(m_fb[m_r->getFrameCount() % 2]);
 	cmdb->beginRenderPass(m_fb[m_r->getFrameCount() % 2]);
 
 
-	Bool cheat = (m_r->getFrameCount() % 2) == 1;
+	Bool cheat = (m_r->getFrameCount() % 2) == 1 && m_r->m_interlace;
 	if(cheat)
 	if(cheat)
 	{
 	{
 		cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt, DepthStencilAspectBit::DEPTH);
 		cmdb->bindTexture(0, 0, m_r->getMs().m_depthRt, DepthStencilAspectBit::DEPTH);

+ 1 - 1
src/anki/renderer/Renderer.cpp

@@ -234,7 +234,7 @@ Error Renderer::render(RenderingContext& ctx)
 	// Batch
 	// Batch
 	m_sm->run(ctx);
 	m_sm->run(ctx);
 	m_ms->run(ctx);
 	m_ms->run(ctx);
-	m_vel->run(ctx);
+	//m_vel->run(ctx);
 
 
 	m_ms->setPostRunBarriers(ctx);
 	m_ms->setPostRunBarriers(ctx);
 	m_sm->setPostRunBarriers(ctx);
 	m_sm->setPostRunBarriers(ctx);

+ 2 - 0
src/anki/renderer/Renderer.h

@@ -140,6 +140,8 @@ public:
 class Renderer
 class Renderer
 {
 {
 public:
 public:
+	Bool m_interlace = false;
+
 	Renderer();
 	Renderer();
 
 
 	~Renderer();
 	~Renderer();