Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

glClear i olbrzymi memory leak

Ostatnio zmodyfikowano 2014-07-04 16:58
Autor Wiadomość
Wrzud
Temat założony przez niniejszego użytkownika
glClear i olbrzymi memory leak
» 2014-07-04 16:23:21
Witam!
Po podpięciu pod okno SDL2 OpenGL zauważyłem, że skompilowana aplikacja zżera ok. 20MB/s RAM. Valgrind nie wskazał źródła problemu zasypując mnie błędami sterownika fglrx(to chyba normalne). Kolejno usuwając wywołania funkcji doszedłem, że glClear jest winowajcą, bez względu na argumenty.
C/C++
#include <SDL2/SDL.h>
#include <GL/glew.h>
#include <GL/glu.h>

class GL3Engine {
private:
    SDL_Window * window;
   
public:
    bool initialize() {
        SDL_Init( SDL_INIT_VIDEO );
        window = SDL_CreateWindow(
        "Debug",
        SDL_WINDOWPOS_UNDEFINED,
        SDL_WINDOWPOS_UNDEFINED,
        444,
        444,
        SDL_WINDOW_OPENGL
        );
        return true;
    }
    void initContext() {
        glewExperimental = GL_TRUE;
        glewInit();
       
        SDL_GL_SetAttribute( SDL_GL_CONTEXT_MAJOR_VERSION, 3 );
        SDL_GL_SetAttribute( SDL_GL_CONTEXT_MINOR_VERSION, 2 );
       
        SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
        SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24 );
       
        glEnable( GL_DEPTH_TEST );
        glDepthFunc( GL_LESS );
       
        glEnable( GL_BLEND );
        glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );
       
        glClearColor( 0, 0, 0, 1 );
    }
    void run() {
        SDL_GLContext gl = SDL_GL_CreateContext( window );
        SDL_Event event;
       
        initContext();
       
        while( true ) {
            while( SDL_PollEvent( & event ) )
            switch( event.type ) {
            case SDL_KEYDOWN:
                switch( event.key.keysym.sym ) {
                case SDLK_LEFT:
                    break;
                   
                case SDLK_RIGHT:
                    break;
                   
                case SDLK_UP:
                    break;
                   
                case SDLK_DOWN:
                    break;
                }
                break;
               
            case SDL_QUIT:
                return;
                break;
            }
            glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
           
            SDL_GL_SwapWindow( window );
        }
        SDL_GL_DeleteContext( gl );
    }
   
    ~GL3Engine() {
        SDL_DestroyWindow( window );
        SDL_Quit();
    }
};
int main() {
    GL3Engine e;
    e.initialize();
    e.run();
}
Dodam, że moje GPU, a w zasadzie APU, to AMD A8 5500. Liczę na pomoc w załataniu wycieku ;)
P-113275
pekfos
» 2014-07-04 16:24:31
Frazy, które należy wpisać w wyszukiwarkę google:
adding a glClear(0); after SwapBuffers(m_hDC); in endFrame() function results in a no memory leak
P-113277
Wrzud
Temat założony przez niniejszego użytkownika
» 2014-07-04 16:39:08
Gdybym znalazł to bym nie pytał :)
/edit Nie działa.
P-113279
pekfos
» 2014-07-04 16:48:01
Sprawdź tu
http://www.daniweb.com​/software-development/cpp​/threads/330084​/i-might-have-a-memory-leak-opengl-sdl

//edit:
Sprawdź, czy na bardziej 'normalnej' rozdzielczości problem też występuje. Np 640x480
P-113280
Wrzud
Temat założony przez niniejszego użytkownika
» 2014-07-04 16:58:48
Sprawdzałem, niestety to nie działa. Spróbuje zainstalować starszą wersję fglrx ;)

/edit: To błąd w sterowniku, po instalacji fglrx z repo ubuntu problem nie występuje :P
P-113282
« 1 »
  Strona 1 z 1