ApplicationEvents:OnIdle w C++/cli ?

0

Witam :)
Po przesiadce z Turbo C++ Borlanda na Visual Studio 2008 mam pewien problem.
Renderując grafikę openGL w komponencie type Panel, maksymalny framerate to ok 64 klatki. W Turbo c++ była taka fajna kontrolka ApplicationEvents, zdarzenie OnIdle które się wykonywało jak aplikacja nie miała nic innego do roboty i ja to wykorzystywałem do pętli renderingu. Niestety w Visualu nie ma czegoś takiego ( chyba, bo jakoś tego nie znalazłem ). Moge renderować w panelu za pomocą zdarzenia Paint (albo timer_tick ale też jest taki sam, sztywno ustawiony framerate), ustawiając przy inicjalizacji ControlStyles::AllPaintingInWmPaint|ControlStyles::Opaque, i w Paint wywołując Invalidate();. Niestety wiąże się z tym nieciekawy efekt, mianowicie gdy są inne kontrolki w oknie, na innych panelach to nie odrysowują się jak należy, aplikacja wydaje się zamulona, odrysowuje się wszystko jak zmienię rozmiar całego okna, mimo że grafika openGL jest cały czas poprawnie wyświetlana. Myślę że to nie powinno tak być, a wcześniejsza metoda z powodu niskiego frameratu mnie nie zadowala. Co poradzicie ?

0

Visual C++ to srodowisko. Ty piszesz w C++/CLI aka managed c++ i nie zapominaj łaskawie tego podawać, gdyż to jest coś zupełnie innego niż C++.

Borlandowe OnIdle tutaj ma swój odpowiednik w evencie System.Application.Idle.
Z tym, że możesz mieć problem z rysowaniem z tego momentu, ale to pewnie już sam wiesz.

0

Tak, wiem że to jest managed c++ (z niepotrzebnymi moim zdaniem duperelami jak np. gc ), nie podałem z tego względu że to wydawało mi się oczywiste. Na przyszłość jednak postaram się uściślać takie informacje.

Dzięki za odpowiedź, rozwiązałem to trochę okrężną drogą, mianowicie w każdej klatce wywołując Update() dla całej formy i wyświetla się teraz jak należy. Swoją drogą to dziwne że w Borlandowskim VCL-u na komponencie Panel grafika się wyświetla z maksymalną możliwą prędkością a w aplikacji CLR to jest tylko 64 fps, chyba że połączy się Paint() + Invalidate() ( + Update() jak w mimo przypadku ).

1 użytkowników online, w tym zalogowanych: 0, gości: 1