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 |