Процедурное текстурирование в SFML

У меня проблема с попыткой сделать процедурные текстуры в SFML у меня есть этот код

sf::Texture* CreateTexture(int w, int h){
sf::Image tempImage;
sf::Texture* Tex = new sf::Texture();
Tex->create(w,h);
sf::Uint8 *pixelData = GeneratePNoise(w,h);

tempImage.create(w, h, pixelData);
Tex->update(tempImage);
//Tex->loadFromImage(tempImage);
return Tex;
}
sf::Uint8* GeneratePNoise(int w,int h){
std::vector<sf::Uint8> data(w*h*4);

for (int i=0;i<w*h*4;i++){
data[i]=128;
if (i+1%4)data[i]=255;
}

return data.data();
}
sf::Texture CreateTexturens(int w, int h){
sf::Image tempImage;
sf::Texture Tex;
Tex.create(w,h);
sf::Uint8 *pixelData = GeneratePNoise(w,h);

tempImage.create(w, h, pixelData);
Tex.update(tempImage);
return Tex;
}

У меня также есть этот код, который использует вышеуказанный код

void Star::createStar(){
sf::CircleShape star(r,30);
star.setPosition(x,y);
sf::Texture* t = CreateTexture(256,256);
star.setTexture(t,false);
std::cout << "Done!"<<std::endl;
}

Похоже, это ничего не делает, я думаю, что речь идет о коде, вращающемся вокруг создания и применения текстуры, вся помощь приветствуется!

0

Решение

В функции GeneratePNoise () вы возвращаете data () из вектора, который будет уничтожен при возврате этой функции, и, таким образом, данные больше не будут доступны.

Вместо вектора я бы порекомендовал создать unique_ptr и вернуть этот unique_ptr из функции, например:

unique_ptr<sf::Uint8[]> GeneratePNoise(int w, int h)
{
unique_ptr<sf::Uint8[]> data(new sf::Uint8[w * h * 4]);

for (int i = 0; i  < w * h * 4; i++) {
data[i] = 128;
if (i + 1 % 4)
data[i] = 255;
}

return data;
}

В этом случае вам даже не нужно удалять ресурс, который был возвращен. Вы должны сделать то же самое с функцией CreateTexture ().

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]