gpt4 book ai didi

c++ - SFML 中的程序纹理

转载 作者:行者123 更新时间:2023-11-28 03:14:39 25 4
gpt4 key购买 nike

我在尝试在 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;
}

这似乎没有渲染任何东西,我相信这是关于围绕创建和应用纹理的代码,感谢所有帮助!

最佳答案

在 GeneratePNoise() 函数中,您从一个 vector 返回 data(),该 vector 将在该函数返回时被销毁,因此数据将不再可用。

我建议创建一个 unique_ptr 并从函数返回该 unique_ptr,而不是 vector ,例如:

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() 函数执行相同的操作。

关于c++ - SFML 中的程序纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17303976/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com