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

Allegro 5 problem przy FULLSCREEN

Ostatnio zmodyfikowano 2013-09-22 14:33
Autor Wiadomość
bingo009
» 2013-06-12 21:37:18
Wrzuć cały kod(jeśli nie jest tajemnicą) i poszukamy przecieku.
P-85445
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-06-13 12:34:16
Więc tak,spędziłem sporo czasu nad swoim projektem i błędu nie znalazłem.
Stworzyłem nowy projekt dla testów i znalazłem dziwny błąd
tu jest pierwszy kod gdzie podczas zmiany rozdzielczości na FULLSCREEN'ie fps nie maleje
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include<iostream>
using namespace std;
int x = 0;
ALLEGRO_BITMAP * OB1 = 0;
int main()
{
    ALLEGRO_DISPLAY * display = NULL;
   
    al_init();
    al_set_new_display_flags( ALLEGRO_FULLSCREEN );
    display = al_create_display( 640, 480 );
    al_init_image_addon();
    al_install_keyboard();
    ALLEGRO_KEYBOARD_STATE Key;
    al_get_time();
    OB1 = al_load_bitmap( "p.png" );
    double time1 = 0;
    bool xw = false;
    bool wcisniety = false;
    double czas_fps = 0;
    int fps = 0;
    for(;; )
    {
        al_get_keyboard_state( & Key );
        if( al_get_time() > time1 + 0.01 )
        {
            time1 = al_get_time();
            al_draw_bitmap( OB1, x, 200, 0 );
            if( x < 600 && xw == false ) x++;
           
            if( x >= 600 ) xw = true;
           
            if( xw == true ) x--;
           
            if( x <= 0 ) xw = false;
           
            al_flip_display();
            al_clear_to_color( al_map_rgb( 255, 255, 255 ) );
        }
        if( al_key_down( & Key, ALLEGRO_KEY_Q ) && wcisniety == false )
        {
            al_resize_display( display, 1280, 1024 );
            wcisniety = true;
        }
        if( al_key_down( & Key, ALLEGRO_KEY_Q ) == false ) wcisniety = false;
       
        if( al_get_time() > czas_fps )
        {
            czas_fps = czas_fps + 1;
            cout << fps << endl;
            fps = 0;
        }
        fps++;
        if( al_key_down( & Key, ALLEGRO_KEY_ESCAPE ) ) break;
       
    }
    al_flip_display();
    al_destroy_bitmap( OB1 );
    al_destroy_display( display );
    return 0;
}
Lecz gdy bitmape wrzucam do funkcji i zmieniam rozdzielczość to fps spada do około 40
kod:
C/C++
#include <allegro5/allegro.h>
#include <allegro5/allegro_image.h>
#include<iostream>
using namespace std;
int x = 0;
ALLEGRO_BITMAP * OB1 = 0;
void obrazek()
{
    al_draw_bitmap( OB1, x, 200, 0 );
}
int main()
{
    ALLEGRO_DISPLAY * display = NULL;
   
    al_init();
    al_set_new_display_flags( ALLEGRO_FULLSCREEN );
    display = al_create_display( 640, 480 );
    al_init_image_addon();
    al_install_keyboard();
    ALLEGRO_KEYBOARD_STATE Key;
    al_get_time();
    OB1 = al_load_bitmap( "p.png" );
    double time1 = 0;
    bool xw = false;
    bool wcisniety = false;
    double czas_fps = 0;
    int fps = 0;
    for(;; )
    {
        al_get_keyboard_state( & Key );
        if( al_get_time() > time1 + 0.01 )
        {
            time1 = al_get_time();
            obrazek();
            if( x < 600 && xw == false ) x++;
           
            if( x >= 600 ) xw = true;
           
            if( xw == true ) x--;
           
            if( x <= 0 ) xw = false;
           
            al_flip_display();
            al_clear_to_color( al_map_rgb( 255, 255, 255 ) );
        }
        if( al_key_down( & Key, ALLEGRO_KEY_Q ) && wcisniety == false )
        {
            al_resize_display( display, 1280, 1024 );
            wcisniety = true;
        }
        if( al_key_down( & Key, ALLEGRO_KEY_Q ) == false ) wcisniety = false;
       
        if( al_get_time() > czas_fps )
        {
            czas_fps = czas_fps + 1;
            cout << fps << endl;
            fps = 0;
        }
        fps++;
        if( al_key_down( & Key, ALLEGRO_KEY_ESCAPE ) ) break;
       
    }
    al_flip_display();
    al_destroy_bitmap( OB1 );
    al_destroy_display( display );
    return 0;
}
gdy zmienię flage FULLSCREEN na WINDOWED to podczas zmiany rozdzielczości fps  ma około 400k
P-85477
DejaVu
» 2013-06-16 22:08:06
No bo renderowanie pustej sceny nie wymaga żadnych obliczeń, więc masz 400k klatek :)
P-85709
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-06-16 23:33:06
W każdym przykładzie jest renderowany jeden obraz tylko że inaczej,jeden jest w funkcji 'obrazek' a drugi nie
P-85717
DejaVu
» 2013-06-17 00:42:32
Przykłady nie mają znaczenia - one prezentują tylko jak się używa narzędzi. Żadna karta graficzna nie uciągnie 400 tysięcy klatek na sekundę, więc nastaw się, że wydajność w Twoich aplikacjach będzie co najwyżej zbliżona do komercyjnych gier.
P-85720
Nekronomik
Temat założony przez niniejszego użytkownika
» 2013-06-17 10:32:55
Owszem nie uciągnie 400 k klatek jeśli grafikę będę wyświetlał na żywca,ja ją tu wyświetlam z 50 razy na sek i dlatego moje fps ma około 400 k a nawet 600 k.Lecz nie oto mi chodzi,bardzo mi zależy na tym - dlaczego gdy grafikę mam w funkcji 'okienko' i podczas zmiany rozdzielczości na FULLSCREEN fps spada mi do 44 a nawet do 1.Tak jak pisałem wcześniej na WINDOWED przy zmianie rozdzielczości nie mam problemów z fps.
P-85723
DejaVu
» 2013-06-17 12:50:10
Po dokonaniu zmiany rozdzielczości zresetuj licznik wykorzystywany do liczenia FPS-ów. Zmiana rozdzielczości trochę trwa :)
P-85730
Gabes
» 2013-06-17 14:50:16
Przeprowadziłem kilka testów, bez zmiany rozdzielczości najlepiej program (trochę zmieniony) działa bez OpenGL.Wydaje mi się że przy zmianie rozdzielczości jest gubiona jakaś flaga, parametr.
w OpenGL jest ok. ale nie mamy możliwości zmiany prędkości bmp, przełączanie to masakra. Jeszcze trochę podziałam z eventami,timerem.
http://alleg.sourceforge.net/a5docs/refman/time.html
to nie,
timer i dodatkowymi funkcjami.Wyświetlane FPS to tylko ilość wykonanej pętli głównej na sekundę, FPS jest na sztywno ustawione w  if( al_get_time() > time1 + 0.01) - 100 na sek. Nie ma najmniejszego sensu wysyłanie tysiąc razy na sekundę polecenia do karty graficznej wyświetl to, czy tamto jak procesor graficzny odświeża ekran co 60 no max. ekran 75 razy na sekundę.A i wykorzystanie procesora też wysokie w każdym przypadku.Wynik testów. Jakby ktoś chciał zobaczyć to zmiana rozdz. klawisz Q, nie moę coś wstawić linka time.
Edycja:
Muszę tu sprostować wykorzystanie procesora gdy tworzone jest okno w OpenGL w każdym przypadku wynosi 0%, mój błąd wziął się stąd że mój manager internetu z plusa zużywa ok. 40% mocy procesora zobaczyłem to dopiero teraz(wczoraj skończył mi się limit i dokupiłem dodatkowy, i cały czas mnie inwigilują chyba?). Sorry jeśli wprowadziłem w błąd. 



P-85732
1 « 2 » 3
Poprzednia strona Strona 2 z 3 Następna strona