Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » OpenGL » OpenGl frisst Speicher in 2min komplett auf

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
03.07.2005, 13:43 Uhr
sonetta



Hi,
hab hier ein Problem mit einer Funktion die OpenGL nutzt.
Gezeichnet werden soll das Spektrum eines mp3-Stückes mit fmod in einem Dialogfenster.
Die besagte Funktion wird per Timer-Methode 40x / sec aufgerufen. Graphisch läuft es gut
(10-12% CPU Belastung) allerdings verbraucht sich der Speicher innerhalb von 2 Minuten.
Das ist mein erstes OpenGl-Projekt. Ich denk, da ist irgenwo ein Speicherleck oder irgendwas wird nicht freigegeben.
Hier ist das Teil:


C++:
void CLevel::OnPaintXXX()
{

HDC hdc = ::GetDC(m_hWnd);
HGLRC hglrc;

FSOUND_Update();
float *Main_spectrum_buffer_ptr;
Main_spectrum_buffer_ptr =  FSOUND_DSP_GetSpectrum();

if (hglrc = wglCreateContext(hdc))
    {
    // try to make it the thread's current rendering context
    if(wglMakeCurrent(hdc, hglrc))
        {
        glClearColor(0.0,0.0,1.0,0.0);
        //glMatrixMode(GL_PROJECTION);
        //glLoadIdentity;
        glViewport(0,5,350,170); //Zeichenbereich
        //glMatrixMode(GL_MODELVIEW);
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
        //glDisable(GL_CULL_FACE); //backgound triangles
        //glEnable(GL_LINE_SMOOTH); //anti-Aliasing
        glLoadIdentity;
        
        glBegin(GL_LINE_STRIP);
        float x = -1;
        for(int i=0; i<256; i++)
            {
            glColor3f(4*Main_spectrum_buffer_ptr[i],1.0-4*Main_spectrum_buffer_ptr[i],0);
            glVertex2f(x, -1.0+Main_spectrum_buffer_ptr[i]*2);
            x += 0.0078; // 2/255 abs(-1) bis +1 = 2
            }
            
                
        glEnd();
        SwapBuffers(hdc);
        }
    }  

wglMakeCurrent(NULL, NULL) ;
::ReleaseDC (m_hWnd, hdc) ;
wglDeleteContext(hglrc);
}



Hab ich was übersehen? Auch wenn ich nur einen einzigen Punkt zeichne, ist es dasselbe.
Es ist der Aufruf der Funktion selber.
Toll, wenn jemand einen Tipp hätte:

Vielen Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
03.07.2005, 14:02 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


logisch irgendwo wenn du jedesmal einen neuen Context anlegst. Ansonsten könnte auch Fmod schuld dran sein
--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
03.07.2005, 16:08 Uhr
sonetta



Hi,

da hast du wahr.
Hab die Erstellung des Contextes jetzt nach OnInitDialog verlegt und die handles zu member-vars gemacht.
Und schwups: Problem gelöst und CPU-Usage auf 1%. Läuft jetzt wie ne 1.

Hatte gedacht, wenn der context am Ende der Funktion immer released wird, würd das
auch gehen. Kost nat. performance , ist jetzt klar geworden

Also 100000000² Dank
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ OpenGL ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: