Czy trzymać sf::RectangleShape w pamięci oraz inteligentne wskaźniki
Ostatnio zmodyfikowano dzisiaj: 25 min
tBane Temat założony przez niniejszego użytkownika |
Czy trzymać sf::RectangleShape w pamięci oraz inteligentne wskaźniki » 2025-10-28 13:18:15 Cześć. Za radą pekfosa przepisuje kod mojego programu w taki sposób, by nie trzymać sf::Sprite w pamięci i generować je tylko podczas renderowania. Mam jednak kolejne pytanie. Często w moim programie korzystam z sf::RectangleShape i też je trzymam w pamięci. Czy potraktować je tak samo jak sf::Sprite i zastąpić przez sf::IntRect do obliczeń? class ColoredButtonWithText { public: sf::RectangleShepe _rect; sf::Text * _text; sf::Color _selectColor; sf::Color _idleColor; sf::Color _hoverColor; sf::Color _pressColor; sf::Vector2f _position; ButtonState _state; std::function < void() > _hover_func; std::function < void() > _onclick_func; sf::Time _clickTime; ColoredButtonWithText( std::wstring text, sf::Vector2f size, sf::Vector2f position = sf::Vector2f( 0, 0 ) ); ~ColoredButtonWithText(); };
|
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 13:50:12 Tak jest dobrze? void ColoredButtonWithText::draw() { sf::RectangleShape rect( sf::Vector2f( _rect.size ) ); switch( _state ) { case ButtonState::Pressed: rect.setFillColor( _pressColor ); rect.setOutlineThickness( dialog_border_width ); rect.setOutlineColor( sf::Color( dialog_border_color ) ); case ButtonState::Hover: rect.setFillColor( _hoverColor ); rect.setOutlineThickness( dialog_border_width ); rect.setOutlineColor( sf::Color( dialog_border_color ) ); case ButtonState::Idle: if( _isSelected ) { rect.setFillColor( _selectColor ); rect.setOutlineThickness( dialog_border_width ); rect.setOutlineColor( sf::Color( dialog_border_color ) ); } else { rect.setFillColor( _idleColor ); rect.setOutlineThickness( dialog_border_width ); rect.setOutlineColor( sf::Color( dialog_border_color ) ); }; }; rect.setPosition( _position ); window->draw( rect ); window->draw( * _text ); }
|
|
DejaVu |
» 2025-10-28 13:52:16 Doczytaj po prostu które operacje są ciężkie. Ciężkie jest ładowanie sf::Image oraz sf::Texture do pamięci. Ciężkie są też operacje związane z fontami (wczytanie ich do pamięci). Pozostałe operacje zazwyczaj są lekkie. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 14:06:32 O to chodzi?
sf::RectangleShape Size: 352 bytes Alignmanet: 8 bytes
sf::Sprite Size: 280 bytes Alignmanet: 8 bytes
|
|
DejaVu |
» 2025-10-28 14:13:48 Chodzi o to co robi w rzeczywistości klasa. Przykładowo: - sf::Image: musi zdekompresować plik *.png lub *.jpg czyli wykonać złożony algorytm przy wczytywaniu obrazku - im większy obraz tym więcej obliczeń, aby utworzyć zdekompresowany obraz w postaci pikseli. - sf::Texture: musi wziąć obraz (wszystkie piksele) i przekopiować je z z RAM (CPU) do VRAM (GPU), aby móc je efektywnie później wykorzystywać używając nadanego ID. - sf::Font: podobny scenariusz jak wyżej. - sf::Sprite: musi wziąć 'identyfikator' tekstury, ustawić pozycję i rozmiar i wysłać te metadane do GPU, aby to wyświetliło - po stronie CPU nie ma praktycznie pracy (i o to chodzi). - sf::RectangleShape: musi wysłać metadane do GPU (gdzie ma być prostokąt, jakiego ma być koloru ramka) - po stronie CPU nie ma praktycznie pracy, bo wysyłasz małą ilość informacji do GPU (kilka instrukcji OpenGL). |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 14:35:18 Kurde a ja już przepisałem wszystkie sf::RectangleShape. Tak samo jak sprajty by ograniczyć zużycie pamięci |
|
tBane Temat założony przez niniejszego użytkownika |
» 2025-10-28 14:55:34 I co teraz? cofnąć te zmiany ?
-sf::Sprite generowany tylko w funkcjach draw() -sf::RectangleShape przerobiony na sf::IntRect i generowany tylko w funkcjach draw() |
|
skovv |
» 2025-10-28 15:45:19 Moim zdaniem przy tak mały programie nie warto się bawić w zbytnie optymalizacje bo normalny komputer nie powinien się nawet zająknąć przy tak małym poborze ram i procka.. A jak za dużo pokombinujesz to przy odrobinie niefarta jeszcze coś popsujesz |
|
| « 1 » 2 3 4 5 |