Browse Source

Bug fixes in renderer

Panagiotis Christopoulos Charitos 16 years ago
parent
commit
0c33c20653

+ 3 - 4
shaders/is_lp_generic.glsl

@@ -1,8 +1,8 @@
 #pragma anki vert_shader_begins
 
-#pragma anki attribute view_vector 0
+#pragma anki attribute view_vector 1
 attribute vec3 view_vector;
-#pragma anki attribute position 1
+#pragma anki attribute position 0
 attribute vec2 position;
 
 varying vec2 tex_coords;
@@ -276,8 +276,7 @@ void main()
 				gl_FragData[0] = vec4(_texel * _color * (_shadow_color * _att), 1.0);
 			#else
 				gl_FragData[0] = vec4( _color * _texel * _att, 1.0 );
-			#endif
-			//gl_FragData[0] = vec4( 1.0, 0.0, 1.0, 1.0 );
+			#endif
 		}
 		else
 		{

+ 5 - 0
shaders/ms_mp_dnp.glsl

@@ -0,0 +1,5 @@
+#define _DIFFUSE_MAPPING_
+#define _NORMAL_MAPPING_
+#define _PARALLAX_MAPPING_
+
+#pragma anki include "shaders/ms_mp_generic.glsl"

+ 9 - 9
shaders/ms_mp_generic.glsl

@@ -88,7 +88,7 @@ void main()
 	#endif
 
 
-	#if defined( _ENVIRONMENT_MAPPING_ ) && defined( _PARALLAX_MAPPING_ )
+	#if defined( _ENVIRONMENT_MAPPING_ ) || defined( _PARALLAX_MAPPING_ )
 		vert_pos_eye_space_v2f = vec3( gl_ModelViewMatrix * vec4(position, 1.0) );
 	#endif
 }
@@ -152,28 +152,28 @@ void main()
 		float _height = _scale * _h - _bias;
 
 		vec2 _super_tex_coords_v2f = _height * _norm_eye.xy + tex_coords_v2f;*/
+
+		vec2 _super_tex_coords = tex_coords_v2f;
 		const float maxStepCount = 100.0;
-		float nSteps = maxStepCount * length(vert_pos_eye_space_v2f.xy);
+		float nSteps = maxStepCount * length(_super_tex_coords);
 
 		vec3 dir = vert_pos_eye_space_v2f;
 		dir.xy /= 8.0;
 		dir /= -nSteps * dir.z;
 
-		float diff0, diff1 = 1.0 - texture2D( height_map, tex_coords_v2f ).a;
+		float diff0, diff1 = 1.0 - texture2D( height_map, _super_tex_coords ).a;
 		if( diff1 > 0.0 )
 		{
 			do 
 			{
-				tex_coords_v2f += dir;
+				_super_tex_coords += dir.xy;
 
 				diff0 = diff1;
-				diff1 = texCoord.z - texture2D(Bump, tex_coords_v2f.xy ).w;
+				diff1 = texture2D(height_map, _super_tex_coords ).w;
 			} while( diff1 > 0.0 );
 
-			tex_coords_v2f.xy += (diff1 / (diff0 - diff1)) * dir.xy;
-		}
-
-		vec2 _super_tex_coords = texCoord.xy;
+			_super_tex_coords.xy += (diff1 / (diff0 - diff1)) * dir.xy;
+		}
 	#else
 		#define _super_tex_coords tex_coords_v2f
 	#endif

+ 5 - 1
shaders/simple_texturing.glsl

@@ -28,8 +28,12 @@ void main()
 	_noise = _noise * 2 - 1;
 	_noise *= 7.0;*/
 
-	vec4 _texel = texture2D( diffuse_map, (gl_FragCoord.xy+(normal_v2f.xy*40))*vec2( 1.0/R_W, 1.0/R_H ) );
+	vec4 _texel = texture2D( diffuse_map, (gl_FragCoord.xy+(normal_v2f.z*100))*vec2( 1.0/R_W, 1.0/R_H ) ) * 0.75;
 	//vec4 _texel = texture2D( diffuse_map, gl_FragCoord.xy*vec2( 1.0/R_W, 1.0/R_H ) );
 
 	gl_FragData[0] = _texel;
+
+	//if( normal_v2f.z > 0.5 ) discard;
+
+	//gl_FragData[0] = vec4( normal_v2f.z );
 }

+ 4 - 4
src/main.cpp

@@ -85,7 +85,7 @@ void Init()
 	sarge = new mesh_node_t();
 	sarge->Init( "meshes/sphere/sphere16.mesh" );
 	//sarge->SetLocalTransformation( vec3_t( 0, -2.8, 1.0 ), mat3_t( euler_t(-m::PI/2, 0.0, 0.0) ), 1.1 );
-	sarge->SetLocalTransformation( vec3_t( 0, 2.0, 2.0 ), mat3_t::GetIdentity(), 1.2 );
+	sarge->SetLocalTransformation( vec3_t( 0, 2.0, 2.0 ), mat3_t::GetIdentity(), 0.4 );
 	
 	// floor
 	floor__ = new mesh_node_t();
@@ -193,15 +193,15 @@ int main( int /*argc*/, char* /*argv*/[] )
 		if( i::keys[SDLK_F12] == 1 ) r::TakeScreenshot("gfx/screenshot.jpg");
 
 		/*char str[128];
-		sprintf( str, "capt/%05d.jpg", r::frames_num );
+		sprintf( str, "capt/%06d.jpg", r::frames_num );
 		r::TakeScreenshot(str);*/
 
 		// std stuff follow
 		SDL_GL_SwapBuffers();
 		r::PrintLastError();
-		if( 0 )
+		if( 1 )
 		{
-			if( r::frames_num == 10 ) r::TakeScreenshot("gfx/screenshot.tga");
+			//if( r::frames_num == 10 ) r::TakeScreenshot("gfx/screenshot.tga");
 			app::WaitForNextFrame();
 		}
 		else

+ 2 - 2
src/renderer/fbo.h

@@ -55,8 +55,8 @@ class fbo_t
 			}
 			else
 			{
-				GLenum color_attachments[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3,
-				                               GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7 };
+				static GLenum color_attachments[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3,
+				                                      GL_COLOR_ATTACHMENT4, GL_COLOR_ATTACHMENT5, GL_COLOR_ATTACHMENT6, GL_COLOR_ATTACHMENT7 };
 				glDrawBuffers( num, color_attachments );
 			}
 		}

+ 40 - 6
src/renderer/r_bs.cpp

@@ -24,7 +24,6 @@ static fbo_t b_fbo; ///< blending models FBO
 static fbo_t r_fbo; ///< refracting models FBO
 
 /*static*/ texture_t r_fai; ///< RGB for color and A for mask (0 doesnt pass, 1 pass)
-
 static shader_prog_t* r2b_shdr;
 
 
@@ -58,18 +57,53 @@ static void InitB()
 //=====================================================================================================================================
 static void InitR()
 {
+	/*uint fbo_id, tex_id, depth_tex_id, stencil_rb;
+
+	glGenFramebuffersEXT( 1, &fbo_id );
+	glBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo_id );
+
+	// color
+	glGenTextures( 1, &tex_id );
+	glBindTexture( GL_TEXTURE_2D, tex_id );
+	glTexImage2D( GL_TEXTURE_2D, 0, GL_RGB8, 100, 100, 0, GL_RGB, GL_FLOAT, NULL );
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, tex_id, 0 );
+
+	// depth
+	r::PrintLastError();
+	glGenTextures( 1, &depth_tex_id );
+	glBindTexture( GL_TEXTURE_2D, depth_tex_id );
+	glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8, 100, 100, 0, GL_DEPTH_STENCIL, GL_FLOAT, NULL );
+	r::PrintLastError();
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER, GL_DEPTH24_STENCIL8, GL_TEXTURE_2D, depth_tex_id, 0 );
+	r::PrintLastError();
+
+	// stencil
+	glGenRenderbuffersEXT( 1, &stencil_rb );
+	glBindRenderbufferEXT( GL_RENDERBUFFER_EXT, stencil_rb );
+	glRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, GL_STENCIL_INDEX, 100, 100 );
+	glFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, stencil_rb );
+
+	if( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) != GL_FRAMEBUFFER_COMPLETE_EXT )
+		FATAL( glCheckFramebufferStatusEXT(GL_FRAMEBUFFER_EXT) );*/
+
+
+	/*r::PrintLastError();
+	uint depth_tex_id;
+	glGenTextures( 1, &depth_tex_id );
+	glBindTexture( GL_TEXTURE_2D, depth_tex_id );
+	glTexImage2D( GL_TEXTURE_2D, 0, GL_DEPTH24_STENCIL8_EXT, 100, 100, 0, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT, NULL );
+	r::PrintLastError();*/
+
 	// create FBO
 	r_fbo.Create();
 	r_fbo.Bind();
 
-	// inform FBO about the color buffers
-	r_fbo.SetNumOfColorAttachements(1);
-
 	// texture
-	r_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, GL_RGBA, GL_RGBA );
+	r_fbo.SetNumOfColorAttachements(1);
+	r_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, GL_RGBA8, GL_RGBA );
+	glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, r_fai.GetGLID(), 0 );
 
 	// attach the texes
-	glFramebufferTexture2D( GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, r_fai.GetGLID(), 0 );
 	glFramebufferTexture2D( GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,  GL_TEXTURE_2D, r::ms::depth_fai.GetGLID(), 0 );
 
 	// test if success

+ 4 - 5
src/renderer/r_is.cpp

@@ -343,8 +343,8 @@ static void PointLightPass( const camera_t& cam, const point_light_t& light )
 	glEnableVertexAttribArray( shader.GetAttributeLocation(0) );
 	glEnableVertexAttribArray( shader.GetAttributeLocation(1) );
 
-	glVertexAttribPointer( shader.GetAttributeLocation(0), 3, GL_FLOAT, false, 0, &view_vectors[0] );
-	glVertexAttribPointer( shader.GetAttributeLocation(1), 2, GL_FLOAT, false, 0, &quad_vert_cords[0] );
+	glVertexAttribPointer( shader.GetAttributeLocation(0), 2, GL_FLOAT, false, 0, &quad_vert_cords[0] );
+	glVertexAttribPointer( shader.GetAttributeLocation(1), 3, GL_FLOAT, false, 0, &view_vectors[0] );
 
 	glDrawArrays( GL_QUADS, 0, 4 );
 
@@ -447,8 +447,8 @@ static void SpotLightPass( const camera_t& cam, const spot_light_t& light )
 	glEnableVertexAttribArray( shdr->GetAttributeLocation(0) );
 	glEnableVertexAttribArray( shdr->GetAttributeLocation(1) );
 
-	glVertexAttribPointer( shdr->GetAttributeLocation(0), 3, GL_FLOAT, false, 0, &view_vectors[0] );
-	glVertexAttribPointer( shdr->GetAttributeLocation(1), 2, GL_FLOAT, false, 0, &quad_vert_cords[0] );
+	glVertexAttribPointer( shdr->GetAttributeLocation(0), 2, GL_FLOAT, false, 0, &quad_vert_cords[0] );
+	glVertexAttribPointer( shdr->GetAttributeLocation(1), 3, GL_FLOAT, false, 0, &view_vectors[0] );
 
 	glDrawArrays( GL_QUADS, 0, 4 );
 
@@ -481,7 +481,6 @@ void RunStage( const camera_t& cam )
 	glLoadIdentity();
 
 	glDisable( GL_DEPTH_TEST );
-	glPolygonMode( GL_FRONT, GL_FILL );
 
 	// ambient pass
 	AmbientPass( cam, scene::GetAmbientColor() );

+ 5 - 3
src/renderer/r_ms.cpp

@@ -45,8 +45,9 @@ void Init()
 	diffuse_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, internal_format, GL_RGBA );
 	specular_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, internal_format, GL_RGBA );
 
-	depth_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT );
-	// you could use the above for SSAO but the difference is very litle.
+	//depth_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, GL_DEPTH_COMPONENT, GL_DEPTH_COMPONENT );
+	depth_fai.CreateEmpty2D( r::w * r::rendering_quality, r::h * r::rendering_quality, GL_DEPTH24_STENCIL8_EXT, GL_DEPTH_STENCIL_EXT, GL_UNSIGNED_INT_24_8_EXT );
+	// you could use the above for SSAO but the difference is very little.
 	//depth_fai.TexParameter( GL_TEXTURE_MAG_FILTER, GL_LINEAR );
 	//depth_fai.TexParameter( GL_TEXTURE_MIN_FILTER, GL_LINEAR );
 
@@ -55,7 +56,8 @@ void Init()
 	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT1_EXT, GL_TEXTURE_2D, diffuse_fai.GetGLID(), 0 );
 	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT2_EXT, GL_TEXTURE_2D, specular_fai.GetGLID(), 0 );
 
-	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT,  GL_TEXTURE_2D, depth_fai.GetGLID(), 0 );
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_TEXTURE_2D, depth_fai.GetGLID(), 0 );
+	glFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, depth_fai.GetGLID(), 0 );
 
 	// test if success
 	if( !fbo.IsGood() )

+ 2 - 2
src/renderer/r_pps.cpp

@@ -8,7 +8,7 @@ namespace r {
 namespace pps {
 
 namespace edgeaa {
-	bool enabled = true;
+	bool enabled = false;
 }
 
 /*
@@ -112,7 +112,6 @@ void RunStage( const camera_t& cam )
 	// set GL
 	glDisable( GL_DEPTH_TEST );
 	glDisable( GL_BLEND );
-	glPolygonMode( GL_FRONT, GL_FILL );
 
 	r::SetViewport( 0, 0, r::w*r::rendering_quality, r::h*r::rendering_quality );
 
@@ -120,6 +119,7 @@ void RunStage( const camera_t& cam )
 	shdr_post_proc_stage->Bind();
 
 	r::is::fai.Bind(0);
+	//r::ms::depth_fai.Bind(0);
 	glUniform1i( shdr_vars::is_fai, 0 );
 
 	if( r::pps::ssao::enabled )

+ 0 - 1
src/renderer/r_private.h

@@ -56,7 +56,6 @@ namespace pps
 {
 	extern void Init();
 	extern void RunStage( const camera_t& cam );
-	extern texture_t fai;
 
 	namespace ssao
 	{

+ 5 - 1
src/renderer/renderer.cpp

@@ -17,7 +17,8 @@ data vars
 */
 
 // misc
-uint w = 1280, h = 800;
+//uint w = 1280, h = 800;
+uint w = 480, h = 360;
 //uint w = 720, h = 480;
 uint frames_num = 0;
 float aspect_ratio = (float)w/(float)h;
@@ -116,6 +117,9 @@ void Init()
 	if( !glewIsSupported("GL_EXT_framebuffer_object") )
 		WARNING( "Framebuffer objects not supported. The application may crash (and burn)" );
 
+	if( !glewIsSupported("GL_EXT_packed_depth_stencil") )
+		WARNING( "GL_EXT_packed_depth_stencil not supported. The application may crash (and burn)" );
+
 	if( !glewIsSupported("GL_ARB_vertex_buffer_object") )
 		WARNING( "Vertex buffer objects not supported. The application may crash (and burn)" );
 

+ 2 - 0
src/renderer/renderer.h

@@ -113,6 +113,8 @@ namespace pps
 	{
 		extern bool enabled; ///< Light scattering on/of
 	}
+
+	extern texture_t fai;
 }
 
 /// debug stage namespace

+ 9 - 1
src/resources/material.cpp

@@ -276,9 +276,13 @@ bool material_t::Load( const char* filename )
 						{
 							var.value.texture = &r::ms::depth_fai;
 						}
+						else if( token->code == scanner_t::TC_IDENTIFIER && !strcmp( token->value.string, "PPS_FAI" ) )
+						{
+							var.value.texture = &r::pps::fai;
+						}
 						else
 						{
-							PARSE_ERR_EXPECTED( "string or IS_FAI or MS_NORMAL_FAI or MS_DEPTH_FAI" );
+							PARSE_ERR_EXPECTED( "string or IS_FAI or MS_NORMAL_FAI or MS_DEPTH_FAI or PPS_FAI" );
 							return false;
 						}
 						break;
@@ -463,6 +467,10 @@ void material_t::Setup()
 			case user_defined_var_t::VT_FLOAT:
 				glUniform1f( udv->uniform_location, udv->value.float_ );
 				break;
+			// vec2
+			case user_defined_var_t::VT_VEC2:
+				glUniform2fv( udv->uniform_location, 1, &udv->value.vec2[0] );
+				break;
 			// vec3
 			case user_defined_var_t::VT_VEC3:
 				glUniform3fv( udv->uniform_location, 1, &udv->value.vec3[0] );

+ 1 - 0
src/resources/material.h

@@ -29,6 +29,7 @@ class material_t: public resource_t
 				{
 					texture_t* texture;
 					float      float_;
+					vec2_t     vec2;
 					vec3_t     vec3;
 					vec4_t     vec4;
 					value_t(): texture(NULL) {}

+ 2 - 2
src/resources/shader_prog.cpp

@@ -172,8 +172,8 @@ bool shader_prog_t::FillTheCustomLocationsVectors( const shader_parser_t& pars )
 		int loc = GetUniformLocation( pars.uniforms[i].name.c_str() );
 		if( loc == -1 )
 		{
-			SHADER_ERROR( "Check the previous error" );
-			return false;
+			SHADER_WARNING( "Check the previous error" );
+			continue;
 		}
 		custom_uni_loc_to_real_loc[pars.uniforms[i].custom_loc] = loc;
 	}

+ 2 - 2
src/resources/texture.cpp

@@ -349,7 +349,7 @@ bool texture_t::Load( const char* filename )
 //=====================================================================================================================================
 // CreateEmpty2D                                                                                                                      =
 //=====================================================================================================================================
-void texture_t::CreateEmpty2D( float width_, float height_, int internal_format, int format_ )
+void texture_t::CreateEmpty2D( float width_, float height_, int internal_format, int format_, GLenum type_ )
 {
 	type = GL_TEXTURE_2D;
 	DEBUG_ERR( internal_format>0 && internal_format<=4 ); // deprecated internal format
@@ -364,7 +364,7 @@ void texture_t::CreateEmpty2D( float width_, float height_, int internal_format,
 	TexParameter( GL_TEXTURE_WRAP_T, GL_CLAMP );
 
 	// allocate to vram
-	glTexImage2D( type, 0, internal_format, width_, height_, 0, format_, GL_FLOAT, NULL );
+	glTexImage2D( type, 0, internal_format, width_, height_, 0, format_, type_, NULL );
 
 	if( r::mipmaping ) glGenerateMipmap(type);
 

+ 1 - 1
src/resources/texture.h

@@ -56,7 +56,7 @@ class texture_t: public resource_t
 
 		bool Load( const char* filename );
 		void Unload();
-		void CreateEmpty2D( float width, float height, int internal_format, int format );
+		void CreateEmpty2D( float width, float height, int internal_format, int format, GLenum type_ = GL_FLOAT );
 		void CreateEmpty2DMSAA( float width, float height, int samples_num, int internal_format );
 
 		void Bind( uint unit=0 ) const;