瀏覽代碼

Bugfixing the Bs

Panagiotis Christopoulos Charitos 15 年之前
父節點
當前提交
a9f19a2dde

+ 2 - 2
shaders/BsBpSphere.glsl

@@ -33,10 +33,10 @@ void main()
 	_noise = _noise * 2 - 1;
 	_noise *= 7.0;*/
 
-	vec4 col = texture2D(ppsPrePassFai, (gl_FragCoord.xy+(normalV2f.z*50))*vec2(1.0/rendererSize.x, 1.0/rendererSize.y)) * 0.75;
+	//vec4 col = texture2D(ppsPrePassFai, (gl_FragCoord.xy+(normalV2f.z*50))*vec2(1.0/rendererSize.x, 1.0/rendererSize.y)) * 0.75;
 	//vec4 _texel = texture2D(isFai, gl_FragCoord.xy*vec2(1.0/R_W, 1.0/R_H));
 
-	gl_FragData[0].rgb = col.rgb;
+	gl_FragData[0] = texture2D(ppsPrePassFai, gl_FragCoord.xy * vec2(1.0/rendererSize.x, 1.0/rendererSize.y));
 
 	//if(normalV2f.z > 0.5) discard;
 

+ 1 - 1
shaders/BsRefract.glsl

@@ -4,7 +4,7 @@
 
 #pragma anki fragShaderBegins
 
-uniform sampler2D fbo;
+uniform sampler2D fai;
 
 varying vec2 texCoords;
 

+ 2 - 2
src/Main.cpp

@@ -126,12 +126,12 @@ void initPhysics()
 
 
 					//using motionstate is recommended, it provides interpolation capabilities, and only synchronizes 'active' objects
-					MeshNode* crate = new MeshNode;
+					/*MeshNode* crate = new MeshNode;
 					crate->init("models/crate0/crate0.mesh");
 					crate->getLocalTransform().setScale(1.11);
 
 					Transform trf(SCALING*Vec3(2.0*i + start_x, 20+2.0*k + start_y, 2.0*j + start_z), Mat3::getIdentity(), 1.0);
-					body = app->getScene()->getPhyWorld()->createNewRigidBody(mass, trf, colShape, crate);
+					body = app->getScene()->getPhyWorld()->createNewRigidBody(mass, trf, colShape, crate);*/
 
 					/*MotionState* myMotionState = new MotionState(startTransform, crate);
 					btRigidBody::btRigidBodyConstructionInfo rbInfo(mass,myMotionState,colShape,localInertia);

+ 5 - 7
src/Renderer/Bs.cpp

@@ -14,9 +14,8 @@ void Renderer::Bs::createFbo()
 
 	fbo.setNumOfColorAttachements(1);
 
-	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, r.is.stencilRb);
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, r.pps.prePassFai.getGlId(), 0);
-	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, r.ms.depthFai.getGlId(), 0);
+	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, r.ms.depthFai.getGlId(), 0);
 
 	if(!fbo.isGood())
 		FATAL("Cannot create deferred shading blending stage FBO");
@@ -30,14 +29,15 @@ void Renderer::Bs::createFbo()
 //======================================================================================================================
 void Renderer::Bs::createRefractFbo()
 {
+	refractFai.createEmpty2D(r.width, r.height, GL_RGBA8, GL_RGBA, GL_FLOAT, false);
+
 	refractFbo.create();
 	refractFbo.bind();
 
 	refractFbo.setNumOfColorAttachements(1);
 
-	glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_RENDERBUFFER, r.is.stencilRb);
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, refractFai.getGlId(), 0);
-	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, r.ms.depthFai.getGlId(), 0);
+	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, r.ms.depthFai.getGlId(), 0);
 
 	if(!refractFbo.isGood())
 		FATAL("Cannot create deferred shading blending stage FBO");
@@ -74,8 +74,6 @@ void Renderer::Bs::run()
 		DEBUG_ERR(meshNode->material == NULL);
 		if(!meshNode->material->blends) continue;
 
-		r.setupMaterial(*meshNode->material, *meshNode, *r.cam);
-
 		// refracts
 		if(meshNode->material->stdUniVars[Material::SUV_PPS_PRE_PASS_FAI])
 		{
@@ -83,9 +81,9 @@ void Renderer::Bs::run()
 			refractFbo.bind();
 
 			glEnable(GL_STENCIL_TEST);
+			glClear(GL_STENCIL_BUFFER_BIT);
 			glStencilFunc(GL_ALWAYS, 0x1, 0x1);
 			glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE);
-			glClear(GL_STENCIL_BUFFER_BIT);
 
 			r.setupMaterial(*meshNode->material, *meshNode, *r.cam);
 			glDisable(GL_BLEND); // a hack

+ 1 - 1
src/Renderer/MainRenderer.cpp

@@ -83,7 +83,7 @@ void MainRenderer::render(Camera& cam_)
 	glDisable(GL_DEPTH_TEST);
 	glDisable(GL_BLEND);
 	sProg.bind();
-	sProg.findUniVar("rasterImage")->setTexture(pps.postPassFai, 0);
+	sProg.findUniVar("rasterImage")->setTexture(bs.refractFai, 0);
 	drawQuad(0);
 }
 

+ 4 - 4
src/Renderer/Ms.cpp

@@ -21,8 +21,8 @@ void Renderer::Ms::init()
 	if(!normalFai.createEmpty2D(r.width, r.height, GL_RG16F, GL_RG, GL_FLOAT, false) ||
 	   !diffuseFai.createEmpty2D(r.width, r.height, GL_RGB16F, GL_RGB, GL_FLOAT, false) ||
 	   !specularFai.createEmpty2D(r.width, r.height, GL_RGBA16F, GL_RGBA, GL_FLOAT, false) ||
-	   //!depthFai.createEmpty2D(r.width, r.height, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8))
-	   !depthFai.createEmpty2D(r.width, r.height, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_FLOAT, false))
+	   !depthFai.createEmpty2D(r.width, r.height, GL_DEPTH24_STENCIL8, GL_DEPTH_STENCIL, GL_UNSIGNED_INT_24_8, false))
+	   //!depthFai.createEmpty2D(r.width, r.height, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT, GL_FLOAT, false))
 	{
 		FATAL("Failed to create one MS FAI. See prev error");
 	}
@@ -33,9 +33,9 @@ void Renderer::Ms::init()
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, diffuseFai.getGlId(), 0);
 	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, specularFai.getGlId(), 0);
 
-	//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthFai.getGlId(), 0);
-	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthFai.getGlId(), 0);
+	//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthFai.getGlId(), 0);
 	//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthFai.getGlId(), 0);
+	glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_TEXTURE_2D, depthFai.getGlId(), 0);
 
 	// test if success
 	if(!fbo.isGood())

+ 3 - 0
src/Renderer/Renderer.cpp

@@ -22,6 +22,7 @@ Renderer::Renderer():
 	ms(*this),
 	is(*this),
 	pps(*this),
+	bs(*this),
 	dbg(*this)
 {
 }
@@ -58,6 +59,7 @@ void Renderer::init(const RendererInitializer& initializer)
 	ms.init();
 	is.init();
 	pps.init();
+	bs.init();
 	dbg.init();
 }
 
@@ -74,6 +76,7 @@ void Renderer::render(Camera& cam_)
 	ms.run();
 	is.run();
 	pps.runPrePass();
+	bs.run();
 	pps.runPostPass();
 	dbg.run();
 

+ 2 - 0
src/Renderer/Renderer.h

@@ -363,6 +363,7 @@ class Renderer
 		class Bs: public RenderingStage
 		{
 			friend class Renderer;
+			friend class MainRenderer;
 
 			public:
 				Bs(Renderer& r_): RenderingStage(r_) {}
@@ -426,6 +427,7 @@ class Renderer
 		Ms ms; ///< Material rendering stage
 		Is is; ///< Illumination rendering stage
 		Pps pps; ///< Postprocessing rendering stage
+		Bs bs; ///< Blending stage
 		Dbg dbg; ///< Debugging rendering stage
 
 		Renderer();

+ 2 - 2
src/Ui/Ui.cpp

@@ -108,8 +108,8 @@ static void drawChar(char c)
 	float uvs[4][2] = {{uvLeft, uvTop}, {uvLeft, uvBottom}, {uvRight, uvBottom}, {uvRight, uvTop}};
 
 	// the coords
-	float fwh = fontW/2.0 + crntX;
-	float fhh = fontH/2.0 + crntY;
+	float fwh = fontW/2.0 - crntX;
+	float fhh = fontH/2.0 - crntY;
 	float coords[4][2] = {{-fwh, fhh}, {-fwh, -fhh}, {fwh, -fhh}, {fwh, fhh}}; // from top left counterclockwise