Aktuelle Zeit: 28.04.2024, 11:23

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 
Autor Nachricht
BeitragVerfasst: 15.06.2007, 18:43 
Offline

Registriert: 28.05.2007, 14:48
Beiträge: 18
Ich habe folgendes Problem: Wenn ich mein Programm starte verbraucht es immer mehr arbeitspeicher bis es irgendwann abstürzt. Dabei mach ich eigendlich nichts besonderes:
Code:
        While device.Run
            With device.VideoDriver
                .BeginScene(True, True, Color.Blue)
                .Draw2DImage(TestTexture, New Position2D(0, 0), True)
                Draw(TestTexture, device.CursorControl.Position, SpriteMaterial.Alpha)
                device.GUIEnvironment.BuiltInFont.Draw(.FPS, New Position2D(10, 20), Color.White, False, False)
                .EndScene()
            End With
        End While

Hier der code der Draw() funktion:
Code:
    Private _driver As VideoDriver
    Sub Draw(ByVal tex As Texture, ByVal pos As Position2D, Optional ByVal mat As SpriteMaterial = SpriteMaterial.Alpha)
        Dim Mat2D As New Material
        With Mat2D
            .Lighting = False
            .BackfaceCulling = False
            .BilinearFilter = False
            .Texture1 = tex
            .MaterialType = mat
        End With
        _driver.SetMaterial(Mat2D)
        Dim _m As New Matrix4
        _m.MakeIdentity()
        _m.Translation = New Vector3D(pos.X, pos.Y, 0)
        _driver.SetTransform(TransformationState.World, _m)
        Dim vertices(0 To 3) As Vertex3D
        vertices(0) = New Vertex3D(New Vector3D(0, 0, 0), New Vector3D, Color.White, New Vector2D(0, 0))
        vertices(1) = New Vertex3D(New Vector3D(tex.OriginalSize.Width, 0, 0), New Vector3D, Color.White, New Vector2D(1, 0))
        vertices(2) = New Vertex3D(New Vector3D(tex.OriginalSize.Width, tex.OriginalSize.Height, 0), New Vector3D, Color.White, New Vector2D(1, 1))
        vertices(3) = New Vertex3D(New Vector3D(0, tex.OriginalSize.Height, 0), New Vector3D, Color.White, New Vector2D(0, 1))
        Dim indices() As UShort = {0, 1, 3, 1, 2, 3}
        device.VideoDriver.DrawIndexedTriangleList(vertices, 4, indices, 2)
    End Sub


Nach oben
 Profil  
 
BeitragVerfasst: 15.06.2007, 22:06 
Offline
Moderator
Benutzeravatar

Registriert: 15.04.2007, 20:20
Beiträge: 505
Wohnort: Reelsen
Zitat:
vertices(0) = New Vertex3D(New Vector3D(0, 0, 0), New Vector3D, Color.White, New Vector2D(0, 0))
vertices(1) = New Vertex3D(New Vector3D(tex.OriginalSize.Width, 0, 0), New Vector3D, Color.White, New Vector2D(1, 0))
vertices(2) = New Vertex3D(New Vector3D(tex.OriginalSize.Width, tex.OriginalSize.Height, 0), New Vector3D, Color.White, New Vector2D(1, 1))
vertices(3) = New Vertex3D(New Vector3D(0, tex.OriginalSize.Height, 0), New Vector3D, Color.White, New Vector2D(0, 1))
Dim indices() As UShort = {0, 1, 3, 1, 2, 3}

Der Originalcode macht etwas anderes:
std::vector3df(x, y, z) erstellt einen temporären (!) Vektor.
Du aber erstellst in jedem Frame einen neuen Vektor (New Vector3D(...)).
Das selbe gilt für Vertex3D.

Entweder du benutzt jetzt etwas, dass diesem C++-Verhalten entspricht, oder du löschst die erstellten Variablen in jedem Frame wieder.

_________________
Meine Gameengine :)
Bild


Nach oben
 Profil  
 
BeitragVerfasst: 17.06.2007, 16:29 
Offline

Registriert: 28.05.2007, 14:48
Beiträge: 18
Ups, musste da tatsächlich am ende noch ein paar mal ein ".Dispose" anfügen.
Dachte das wird automatisch gemacht wenn die objekte zerstört werden...
Naja jetzt verbraucht das programm wenigsten keine überflüssigen speicher mehr. :lol:


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 3 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de