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

Sety - czyli zbiory tekstur i powtarzające się elementy

Ostatnio zmodyfikowano 2024-10-26 18:00
Autor Wiadomość
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.
C/C++
sf::Texture * tile = new sf::Texture(); // potencjalny wyciek pamięci
tile->loadFromImage( tex.copyToImage(), sf::IntRect( x, y, tile_width, tile_height ) ); // cała tekstura z GPU do CPU, kopiujesz do GPU fragment, reszta do kosza
sf::Image img1 = tile->copyToImage(); // tamten fragment ściągasz z GPU, chociaż miałeś go przed chwilą
P-181765
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.
P-181766
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ą..

C/C++
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;
   
   
//cout << image_width << "x" << image_height << "\n";
   
   
int counter = 0;
   
   
for( short y = 0; y < image_height; y += tile_height )
       
 for( short x = 0; x < image_width; x += tile_width ) {
       
       
// create tile - fragment of texture
       
sf::Image tile;
       
tile.copy( image, 0, 0, sf::IntRect( x, y, tile_width, tile_height ) ); // tu chyba powoduje błąd
       
        // searching - exist doubles or no
       
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 no exist then add
       
if( existed == false ) {
           
Texture * new_texture = new Texture( pathfile + "_" + to_string( counter ), tile );
           
//cout << "created texture: " << pathfile + "_" + to_string(counter) << "\n";
           
cout << "create a texture\n";
           
textures.push_back( new_texture );
           
           
counter += 1;
           
       
}
       
    }
   
}
P-181767
pekfos
» 2024-10-26 13:10:54
C/C++
sf::Image tile;
tile.copy( image, 0, 0, sf::IntRect( x, y, tile_width, tile_height ) ); // tu chyba powoduje błąd
copy() nadpisuje piksele w obrazie docelowym, więc musisz go najpierw mieć. Dorzuć tile.create(tile_width, tile_height).
P-181769
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 ?
P-181770
pekfos
» 2024-10-26 14:42:11
https://www.sfml-dev.org/documentation/2.6.1/classsf_1_1Image.php#a2a67930e2fd9ad97cf004e918cf5832b
Dokumentacja 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
C/C++
void Image::copy( const Image & source, unsigned int destX, unsigned int destY, const IntRect & sourceRect, bool applyAlpha )
{
   
// Make sure that both images are valid
   
if(( source.m_size.x == 0 ) ||( source.m_size.y == 0 ) ||( m_size.x == 0 ) ||( m_size.y == 0 ) )
       
 return;
   
P-181771
tBane
Temat założony przez niniejszego użytkownika
» 2024-10-26 17:28:09
Ja w dokumentacji nie mam czegoś takiego.

P-181772
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.
P-181773
1 « 2 »
Poprzednia strona Strona 2 z 2