Hello,

With the shade-c (evo) examples and also in my own project, I noticed that that when I call sc_destroy(sc_screen_default); (needed to load a new level) I get a memory error (pointing to sc_destroy) if I have set warn_level to higher than the default. If I dont set warn_level and just load a new level a few times, there doesn't seem to be any problems at first glanch. Could this be just a minor memory leak or false positive? Or is this shit hits the fan?

Below is the code from sc_destroy :

Code:
//completely destroys/removes shade-c
void sc_destroy(SC_SCREEN* screen)
{
	sc_reset(screen);
	
	if(sc_screen_default != NULL)
	{
		//free memory	
		sys_free(sc_screen_default);
		
		//pointer to NULL
		sc_screen_default=NULL;
	}
}



Code from sc_reset:
Click to reveal..

Code:
//resets shade-c, but keeps all settings stored in screen/sc_screen_default
void sc_reset(SC_SCREEN* screen)
{
	if(screen == NULL) return;
	screen.draw = 0;
	//sc_viewEvent_destroy(screen);
	//sc_gammaCorrection_destroy(screen); //not used yet...
	sc_hdr_destroy(screen);
	sc_dof_destroy(screen);
	sc_refract_destroy(screen);
	sc_forward_destroy(screen);
	sc_antialiasing_destroy(screen);
	sc_deferred_destroy(screen);
	sc_ssao_destroy(screen);
	sc_deferredLighting_destroy(screen);
	sc_lights_destroySun(screen);
	sc_gBuffer_destroy(screen);
	
	//Generic Rendertargets (GRTs)//////////////////////////////////////////
	if(screen.renderTargets.full0 != NULL){bmap_purge(screen.renderTargets.full0); ptr_remove(screen.renderTargets.full0); screen.renderTargets.full0=NULL; }
	if(screen.renderTargets.full1 != NULL){bmap_purge(screen.renderTargets.full1); ptr_remove(screen.renderTargets.full1); screen.renderTargets.full1=NULL; }
	if(screen.renderTargets.full2 != NULL){bmap_purge(screen.renderTargets.full2); ptr_remove(screen.renderTargets.full2); screen.renderTargets.full2=NULL; }
	if(screen.renderTargets.half0 != NULL){bmap_purge(screen.renderTargets.half0); ptr_remove(screen.renderTargets.half0); screen.renderTargets.half0=NULL; }
	if(screen.renderTargets.half1 != NULL){bmap_purge(screen.renderTargets.half1); ptr_remove(screen.renderTargets.half1); screen.renderTargets.half1=NULL; }
	if(screen.renderTargets.quarter0 != NULL){bmap_purge(screen.renderTargets.quarter0); ptr_remove(screen.renderTargets.quarter0); screen.renderTargets.quarter0=NULL; }
	if(screen.renderTargets.quarter1 != NULL){bmap_purge(screen.renderTargets.quarter1); ptr_remove(screen.renderTargets.quarter1); screen.renderTargets.quarter1=NULL; }
	if(screen.renderTargets.quarter2 != NULL){bmap_purge(screen.renderTargets.quarter2); ptr_remove(screen.renderTargets.quarter2); screen.renderTargets.quarter2=NULL; }
	if(screen.renderTargets.eighth0 != NULL){bmap_purge(screen.renderTargets.eighth0); ptr_remove(screen.renderTargets.eighth0); screen.renderTargets.eighth0=NULL; }
	if(screen.renderTargets.eighth1 != NULL){bmap_purge(screen.renderTargets.eighth1); ptr_remove(screen.renderTargets.eighth1); screen.renderTargets.eighth1=NULL; }
	/////////////////////////////////////////////////////////
	
	//screen.materials.viewEvent/////////////////////////////
	if(screen.materials.viewEvent!=NULL){ ptr_remove(screen.materials.viewEvent); screen.materials.viewEvent=NULL; }
	/////////////////////////////////////////////////////////
	
	//sc_materials_init()////////////////////////////////////
	if(sc_materials_mapData!=NULL){ bmap_purge(sc_materials_mapData); ptr_remove(sc_materials_mapData); sc_materials_mapData=NULL; }
	/////////////////////////////////////////////////////////
	
	//sc_gBuffer_init()//////////////////////////////////////
	if(screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH]!=NULL){ bmap_purge(screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH]); ptr_remove(screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH]); screen.renderTargets.gBuffer[SC_GBUFFER_NORMALS_AND_DEPTH]=NULL; }
	if(screen.renderTargets.gBuffer[SC_GBUFFER_ALBEDO_AND_EMISSIVE_MASK]!=NULL){ bmap_purge(screen.renderTargets.gBuffer[SC_GBUFFER_ALBEDO_AND_EMISSIVE_MASK]); ptr_remove(screen.renderTargets.gBuffer[SC_GBUFFER_ALBEDO_AND_EMISSIVE_MASK]); screen.renderTargets.gBuffer[SC_GBUFFER_ALBEDO_AND_EMISSIVE_MASK]=NULL; }
	if(screen.renderTargets.gBuffer[SC_GBUFFER_MATERIAL_DATA]!=NULL){ bmap_purge(screen.renderTargets.gBuffer[SC_GBUFFER_MATERIAL_DATA]); ptr_remove(screen.renderTargets.gBuffer[SC_GBUFFER_MATERIAL_DATA]); screen.renderTargets.gBuffer[SC_GBUFFER_MATERIAL_DATA]=NULL; }
	if(screen.renderTargets.gBuffer[3]!=NULL){ bmap_purge(screen.renderTargets.gBuffer[3]); ptr_remove(screen.renderTargets.gBuffer[3]); screen.renderTargets.gBuffer[3]=NULL; }
	if(screen.views.gBuffer!=NULL){ ptr_remove(screen.views.gBuffer); screen.views.gBuffer=NULL; }
	/////////////////////////////////////////////////////////
	
	//sc_lights_initSun()////////////////////////////////////
	if(screen.materials.sun!=NULL){ ptr_remove(screen.materials.sun); screen.materials.sun=NULL; }
	if(screen.views.sun!=NULL)
	{ 
		if(screen.views.sun.bmap!=NULL){ bmap_purge(screen.views.sun.bmap); ptr_remove(screen.views.sun.bmap); screen.views.sun.bmap=NULL; }
		ptr_remove(screen.views.sun); screen.views.sun=NULL; 
	}
	#ifndef SC_A7
		int i; for(i=0; i<4; i++)
		{	
			if(screen.views.sunShadowDepth[i]!=NULL)
			{ 
				if(screen.views.sunShadowDepth[i].bmap!=NULL){ bmap_purge(screen.views.sunShadowDepth[i].bmap); ptr_remove(screen.views.sunShadowDepth[i].bmap); screen.views.sunShadowDepth[i].bmap=NULL; }
				if(screen.views.sunShadowDepth[i].material!=NULL){ ptr_remove(screen.views.sunShadowDepth[i].material); screen.views.sunShadowDepth[i].material=NULL; }
				ptr_remove(screen.views.sunShadowDepth[i]); screen.views.sunShadowDepth[i]=NULL; 
			}
			if(screen.renderTargets.sunShadowDepth[i]!=NULL){ bmap_purge(screen.renderTargets.sunShadowDepth[i]); ptr_remove(screen.renderTargets.sunShadowDepth[i]); screen.renderTargets.sunShadowDepth[i]=NULL; }
		}
		
		if(screen.views.sunEdge!=NULL)
		{ 
			if(screen.views.sunEdge.bmap!=NULL){ bmap_purge(screen.views.sunEdge.bmap); ptr_remove(screen.views.sunEdge.bmap); screen.views.sunEdge.bmap=NULL; }
			if(screen.views.sunEdge.material!=NULL){ ptr_remove(screen.views.sunEdge.material); screen.views.sunEdge.material=NULL; }
			ptr_remove(screen.views.sunEdge); screen.views.sunEdge=NULL; 
		}
		
		if(screen.views.sunExpand!=NULL)
		{ 
			if(screen.views.sunExpand.bmap!=NULL){ bmap_purge(screen.views.sunExpand.bmap); ptr_remove(screen.views.sunExpand.bmap); screen.views.sunExpand.bmap=NULL; }
			if(screen.views.sunExpand.material!=NULL){ ptr_remove(screen.views.sunExpand.material); screen.views.sunExpand.material=NULL; }
			ptr_remove(screen.views.sunExpand); screen.views.sunExpand=NULL; 
		}
		
		if(screen.views.sunShadow!=NULL)
		{ 
			if(screen.views.sunShadow.bmap!=NULL){ bmap_purge(screen.views.sunShadow.bmap); ptr_remove(screen.views.sunShadow.bmap); screen.views.sunShadow.bmap=NULL; }
			if(screen.views.sunShadow.material!=NULL){ ptr_remove(screen.views.sunShadow.material); screen.views.sunShadow.material=NULL; }
			ptr_remove(screen.views.sunShadow); screen.views.sunShadow=NULL; 
		}
		
	#endif
	/////////////////////////////////////////////////////////
	
	//sc_deferredLighting_init()/////////////////////////////
	if(screen.renderTargets.deferredLighting!=NULL){ bmap_purge(screen.renderTargets.deferredLighting); ptr_remove(screen.renderTargets.deferredLighting); screen.renderTargets.deferredLighting=NULL; }
	if(screen.views.deferredLighting!=NULL)
	{ 
		if(screen.views.deferredLighting.bmap!=NULL){ bmap_purge(screen.views.deferredLighting.bmap); ptr_remove(screen.views.deferredLighting.bmap); screen.views.deferredLighting.bmap=NULL; }
		ptr_remove(screen.views.deferredLighting); 
	}
	/////////////////////////////////////////////////////////
	
	//sc_ssao_init()/////////////////////////////////////////
	if(screen.renderTargets.ssao!=NULL){ bmap_purge(screen.renderTargets.ssao); ptr_remove(screen.renderTargets.ssao); screen.renderTargets.ssao=NULL; }
	if(screen.ssaoNoise!=NULL){ bmap_purge(screen.ssaoNoise); ptr_remove(screen.ssaoNoise); screen.ssaoNoise=NULL; }
	if(screen.materials.ssaoFinalize!=NULL){ ptr_remove(screen.materials.ssaoFinalize); screen.materials.ssaoFinalize=NULL; }
	if(screen.materials.ssao!=NULL){ ptr_remove(screen.materials.ssao); screen.materials.ssao=NULL; }
	if(screen.views.ssaoFinalize!=NULL){ ptr_remove(screen.views.ssaoFinalize); screen.views.ssaoFinalize=NULL; }
	if(screen.views.ssao!=NULL){ ptr_remove(screen.views.ssao); screen.views.ssao=NULL; }
	/////////////////////////////////////////////////////////
	
	//sc_deferred_init()/////////////////////////////////////
	if(screen.materials.deferred!=NULL){ ptr_remove(screen.materials.deferred); screen.materials.deferred=NULL; }
	if(screen.views.deferred!=NULL)
	{ 
		if(screen.views.deferred.bmap!=NULL){ bmap_purge(screen.views.deferred.bmap); ptr_remove(screen.views.deferred.bmap); screen.views.deferred.bmap=NULL; }
		ptr_remove(screen.views.deferred); screen.views.deferred=NULL; 
	}
	/////////////////////////////////////////////////////////
	
	//sc_antialiasing_init()/////////////////////////////////
	if(screen.views.antialiasing!=NULL)
	{ 
		if(screen.views.antialiasing.material!=NULL){ ptr_remove(screen.views.antialiasing.material); screen.views.antialiasing.material=NULL; }
		ptr_remove(screen.views.antialiasing); screen.views.antialiasing=NULL; 
	}
	if(screen.views.antialiasingBlendWeights!=NULL)
	{ 
		if(screen.views.antialiasingBlendWeights.material!=NULL){ ptr_remove(screen.views.antialiasingBlendWeights.material); screen.views.antialiasingBlendWeights.material=NULL; }
		ptr_remove(screen.views.antialiasingBlendWeights); screen.views.antialiasingBlendWeights=NULL; 
	}
	if(screen.views.antialiasingEdgeDetect!=NULL)
	{ 
		if(screen.views.antialiasingEdgeDetect.material!=NULL){ ptr_remove(screen.views.antialiasingEdgeDetect.material); screen.views.antialiasingEdgeDetect.material=NULL; }
		ptr_remove(screen.views.antialiasingEdgeDetect); screen.views.antialiasingEdgeDetect=NULL; 
	}
	/////////////////////////////////////////////////////////
	
	//sc_forward_init()//////////////////////////////////////
	if(screen.views.preForward!=NULL)
	{
		if(screen.views.preForward.bmap!=NULL){ bmap_purge(screen.views.preForward.bmap); ptr_remove(screen.views.preForward.bmap); screen.views.preForward.bmap=NULL; }
		ptr_remove(screen.views.preForward); screen.views.preForward=NULL; 
	}
	/////////////////////////////////////////////////////////
	
	//sc_refract_init()//////////////////////////////////////
	if(screen.views.refract!=NULL)
	{ 
		if(screen.views.refract.bmap!=NULL){ bmap_purge(screen.views.refract.bmap); ptr_remove(screen.views.refract.bmap); screen.views.refract.bmap=NULL; }
		ptr_remove(screen.views.refract); screen.views.refract=NULL; 
	}
	if(screen.views.preRefract!=NULL)
	{
		if(screen.views.preRefract.bmap!=NULL){ bmap_purge(screen.views.preRefract.bmap); ptr_remove(screen.views.preRefract.bmap); screen.views.preRefract.bmap=NULL; }
		ptr_remove(screen.views.preRefract); screen.views.preRefract=NULL; 
	}
	/////////////////////////////////////////////////////////
	
	//sc_dof_init()//////////////////////////////////////////
	if(screen.materials.dof!=NULL){ ptr_remove(screen.materials.dof); screen.materials.dof=NULL; }
	if(screen.materials.dofBlurY!=NULL){ ptr_remove(screen.materials.dofBlurY); screen.materials.dofBlurY=NULL; }
	if(screen.materials.dofBlurX!=NULL){ ptr_remove(screen.materials.dofBlurX); screen.materials.dofBlurX=NULL; }
	if(screen.materials.dofDownsample!=NULL){ ptr_remove(screen.materials.dofDownsample); screen.materials.dofDownsample=NULL; }
	if(screen.views.dof!=NULL){ ptr_remove(screen.views.dof); screen.views.dof=NULL; }
	if(screen.views.dofBlurY!=NULL){ ptr_remove(screen.views.dofBlurY); screen.views.dofBlurY=NULL; }
	if(screen.views.dofBlurX!=NULL){ ptr_remove(screen.views.dofBlurX); screen.views.dofBlurX=NULL; }
	if(screen.views.dofDownsample!=NULL){ ptr_remove(screen.views.dofDownsample); screen.views.dofDownsample=NULL; }
	/////////////////////////////////////////////////////////
	
	//sc_hdr_init()//////////////////////////////////////////
	if(screen.materials.hdr!=NULL){ ptr_remove(screen.materials.hdr); screen.materials.hdr=NULL; }
	if(screen.materials.hdrLensflareUpsample!=NULL){ ptr_remove(screen.materials.hdrLensflareUpsample); screen.materials.hdrLensflareUpsample=NULL; }
	if(screen.materials.hdrLensflareBlur!=NULL){ ptr_remove(screen.materials.hdrLensflareBlur); screen.materials.hdrLensflareBlur=NULL; }
	if(screen.materials.hdrLensflare!=NULL){ ptr_remove(screen.materials.hdrLensflare); screen.materials.hdrLensflare=NULL; }
	if(screen.materials.hdrLensflareDownsample!=NULL){ ptr_remove(screen.materials.hdrLensflareDownsample); screen.materials.hdrLensflareDownsample=NULL; }
	if(screen.materials.hdrBlurY!=NULL){ ptr_remove(screen.materials.hdrBlurY); screen.materials.hdrBlurY=NULL; }
	if(screen.materials.hdrBlurX!=NULL){ ptr_remove(screen.materials.hdrBlurX); screen.materials.hdrBlurX=NULL; }
	if(screen.materials.hdrScatter!=NULL){ ptr_remove(screen.materials.hdrScatter); screen.materials.hdrScatter=NULL; }
	if(screen.materials.hdrDownsample!=NULL){ ptr_remove(screen.materials.hdrDownsample); screen.materials.hdrDownsample=NULL; }
	
	if(screen.views.hdr!=NULL){ ptr_remove(screen.views.hdr); screen.views.hdr=NULL; }
	if(screen.views.hdrLensflareUpsample!=NULL){ ptr_remove(screen.views.hdrLensflareUpsample); screen.views.hdrLensflareUpsample=NULL; }
	if(screen.views.hdrLensflareBlur!=NULL){ ptr_remove(screen.views.hdrLensflareBlur); screen.views.hdrLensflareBlur=NULL; }
	if(screen.views.hdrLensflare!=NULL){ ptr_remove(screen.views.hdrLensflare); screen.views.hdrLensflare=NULL; }
	if(screen.views.hdrLensflareDownsample!=NULL){ ptr_remove(screen.views.hdrLensflareDownsample); screen.views.hdrLensflareDownsample=NULL; }
	if(screen.views.hdrBlurY!=NULL){ ptr_remove(screen.views.hdrBlurY); screen.views.hdrBlurY=NULL; }
	if(screen.views.hdrBlurX!=NULL){ ptr_remove(screen.views.hdrBlurX); screen.views.hdrBlurX=NULL; }
	if(screen.views.hdrScatter!=NULL){ ptr_remove(screen.views.hdrScatter); screen.views.hdrScatter=NULL; }
	if(screen.views.hdrDownsample!=NULL){ ptr_remove(screen.views.hdrDownsample); screen.views.hdrDownsample=NULL; }
	////////////////////////////////////////////////////	
	
	if(screen.views.main.bmap!=NULL){ bmap_purge(screen.views.main.bmap); ptr_remove(screen.views.main.bmap); screen.views.main.bmap=NULL; }
	screen.views.main.stage=NULL;
	
}