pekfos |
» 2024-10-25 20:31:37 Nie wiem jak działać z sf::Image Wszystko co tu robisz, robisz na sf::Image, tylko niepotrzebnie przerzucasz dane między urządzeniami używając sf::Texture. Tekstura na GPU jest potrzebna tylko do renderowania, którego tu nie ma w ogóle. sf::Texture * tile = new sf::Texture(); tile->loadFromImage( tex.copyToImage(), sf::IntRect( x, y, tile_width, tile_height ) ); sf::Image img1 = tile->copyToImage(); |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-10-26 12:07:41 Ok. Destruktor już dodany. Zaraz spróbuję jeszcze raz przepisać tę funkcję na sf::Image. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-10-26 12:30:32 Przepisałem funkcję z sf::Texture na sf::Image. Ale jest problem tzn. wczytuje mi tylko jeden kafelek a wszystkie inne wyświetla, że już istnieją.. void loadTextureSets( string pathfile, int tile_width, int tile_height ) { sf::Image image; image.loadFromFile( "assets/" + pathfile + ".png" ); short image_width = image.getSize().x; short image_height = image.getSize().y; int counter = 0; for( short y = 0; y < image_height; y += tile_height ) for( short x = 0; x < image_width; x += tile_width ) { sf::Image tile; tile.copy( image, 0, 0, sf::IntRect( x, y, tile_width, tile_height ) ); bool existed = false; for( short i = 0; i < textures.size(); i++ ) { sf::Image img = textures[ i ]->texture->copyToImage(); if( areImagesEqual( tile, img ) ) { existed = true; cout << "exits now\n"; break; } } if( existed == false ) { Texture * new_texture = new Texture( pathfile + "_" + to_string( counter ), tile ); cout << "create a texture\n"; textures.push_back( new_texture ); counter += 1; } } }
|
|
pekfos |
» 2024-10-26 13:10:54 sf::Image tile; tile.copy( image, 0, 0, sf::IntRect( x, y, tile_width, tile_height ) ); copy() nadpisuje piksele w obrazie docelowym, więc musisz go najpierw mieć. Dorzuć tile.create(tile_width, tile_height). |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-10-26 14:20:53 Działa :-) copy() nadpisuje piksele w obrazie docelowym, więc musisz go najpierw mieć. Dorzuć tile.create(tile_width, tile_height). Skąd to wiesz ? |
|
pekfos |
» 2024-10-26 14:42:11 https://www.sfml-dev.org/documentation/2.6.1/classsf_1_1Image.php#a2a67930e2fd9ad97cf004e918cf5832bDokumentacja nie mówi wprost że obraz docelowy musi istnieć, ale też nie mówi że miałby się powiększyć, a to byłaby dość istotna funkcjonalność. W razie wątpliwości, kod prawdę Ci powie void Image::copy( const Image & source, unsigned int destX, unsigned int destY, const IntRect & sourceRect, bool applyAlpha ) { if(( source.m_size.x == 0 ) ||( source.m_size.y == 0 ) ||( m_size.x == 0 ) ||( m_size.y == 0 ) ) return; |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-10-26 17:28:09 Ja w dokumentacji nie mam czegoś takiego. |
|
pekfos |
» 2024-10-26 18:00:51 To znaczy czego nie masz? Napisałem tylko o rzeczach których tam nie ma. Za to źródła biblioteki możesz pobrać ze strony SFML albo githuba. |
|
1 « 2 » |