Funktion verbraucht permanent Speicher



  • Kann mir jemand sagen, wiso diese Funktion permanent Speicher frisst ?

    void CPlanetModel::Render_Surface(D3DXMATRIX* pTransformationsMatrix, long &SurfaceTextureNr, D3DXVECTOR3 Ortsvektor)
    {
    	D3DXVECTOR3	Vec;
    
    	Vec.x = v_sonnensystem->SunPosition.x - Ortsvektor.x;
    	Vec.y = v_sonnensystem->SunPosition.y - Ortsvektor.y;
    	Vec.z = v_sonnensystem->SunPosition.z - Ortsvektor.z;
    
    	v_mathe->Normalize3DVector_If_Necessary(&Vec,&Vec);
    	float Winkelx = sin(Vec.x);
    	float Winkely = sin(Vec.y);
    	float Winkelz = sin(Vec.z);
    
    	D3DXMatrixIdentity(&Rotationsmatrix);
    
    	v_mathe->CalcRotXMatrix(&tempMatrix3, Winkelx-1.3f);
    	v_mathe->CalcRotYMatrix(&tempMatrix2, Winkely);
    	v_mathe->CalcRotZMatrix(&tempMatrix1, Winkelz+1.5f);
    	Rotationsmatrix = Rotationsmatrix*tempMatrix1*tempMatrix2*tempMatrix3;
    
    	Transformationsmatrix = *pTransformationsMatrix;
    
    	D3DXMATRIX matWorldViewProjection = Transformationsmatrix * matView * matProj;
    
    	EffectPlanet->SetMatrix("matWorldViewProjection", &matWorldViewProjection);
    	EffectPlanet->SetMatrix("matRotation", &Rotationsmatrix);
    
    	// Richtung der Sonne (umgekehrte Ausbreitungsrichtung des Sonnenlichts):
    	tempVektor3 = D3DXVECTOR3(0.0f, 1.0f, 0.0f);
    
    	// Umgekehrte Ausbreitungsrichtung des Lichts an den Vertex Shader übergeben:
    	EffectPlanet->SetVector("negLightDir", &D3DXVECTOR4(tempVektor3.x, tempVektor3.y, tempVektor3.z, 1.0f));
    
    	// Himmels- und Bodenfarbe an den Vertex Shader übergeben: 
    	EffectPlanet->SetVector("SkyColor", &D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f));
    	EffectPlanet->SetVector("GroundColor", &D3DXVECTOR4(0.01f, 0.01f, 0.01f, 1.0f));
    
    	// Eigenschaften der direktionalen Lichtquelle an den Vertex Shader übergeben:
    	EffectPlanet->SetVector("LightIntensity_Ambient", &D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f));	
    
    	// Materialeigenschaften des Modells an den Vertex Shader übergeben:
    	EffectPlanet->SetVector("MaterialReflectivity_Ambient", &D3DXVECTOR4(1.0f, 1.0f, 1.0f, 1.0f));
    
    	EffectPlanet->SetTexture("SkinTexture", PlanetaryTextures->SurfaceTexture[SurfaceTextureNr].pTexture);
    
    	EffectPlanet->SetTechnique("T1");
    
    	EffectPlanet->Begin(&nPasses, 0);
    
    	for (iPass=0; iPass<nPasses; iPass++)
    	{
    		EffectPlanet->Pass(iPass);
    
    		lpD3DDevice->SetStreamSource(0, PlanetVB, 0, sizeof(SPACEOBJEKT3DVERTEX));
    
    		lpD3DDevice->SetFVF(D3DFVF_SPACEOBJEKT3DVERTEX);	
    
    		lpD3DDevice->SetIndices(PlanetIB);  
    
    		lpD3DDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0,
                                               0, NumVertices,
                                               0, NumTriangles);
    	}
    
    	EffectPlanet->End();
    }
    


  • ich hab zwar nicht 100%ig verstanden was da vor sich geht, aber da du ja scheinbar nach einem Speicherleck suchst ist mir vor allem folgendes aufgefallen:

    lpD3DDevice->SetStreamSource(0, PlanetVB, 0, sizeof(SPACEOBJEKT3DVERTEX));
    

    Das sieht mir sehr danach aus, als ob irgendwo Ressourcen/Speicher angefordert werden (Schlagwort Source, sizeof()). Da ich keine entsprechende Freigaberoutine erkennen konnte, drängt sich mir als Laien der Verdacht auf, dass die Ressourcen nicht wieder freigegeben werden...



  • Frag mal im Spieleprogrammiererungsforum nach.



  • pumuckl schrieb:

    ich hab zwar nicht 100%ig verstanden was da vor sich geht, aber da du ja scheinbar nach einem Speicherleck suchst ist mir vor allem folgendes aufgefallen:

    lpD3DDevice->SetStreamSource(0, PlanetVB, 0, sizeof(SPACEOBJEKT3DVERTEX));
    

    Das sieht mir sehr danach aus, als ob irgendwo Ressourcen/Speicher angefordert werden (Schlagwort Source, sizeof()). Da ich keine entsprechende Freigaberoutine erkennen konnte, drängt sich mir als Laien der Verdacht auf, dass die Ressourcen nicht wieder freigegeben werden...

    Ne, da wird kein Speicher angelegt.



  • Was ist mit den ganzen Operatoren?



  • Was genau ist denn "EffectPlanet"?
    In der Funktion selber sehe ich nichts, was Speicher fressen würde - also liegt es möglicherweise an einer der Funktionen, die du aufgerufen hast.


Anmelden zum Antworten