Я пытаюсь создать черно-белый Sprite
на основе другого Sprite
. Поскольку у меня нет доступа к данным пикселя спрайта после его создания и кэширования, я работаю над ним, создав новый Image
на основе, затем изменив данные изображения, затем поверните Image
в Texture
, а затем, наконец, в Sprite
снова, теперь черный и белый.Создано RenderTexture Изображение не отображается
Проблема заключается в том, что, когда я использую Image
генерируемый из RenderTexture
, это на самом деле не сделать это, но когда я использую изображение в формате PNG, порожденную RenderTexture::saveToFile
впоследствии, он отлично работает.
Похоже, я должен быть в состоянии видеть output_sprite
на scene
просто отлично, так как он строится примерно так же, единственное отличие заключается в Image
построен из существующего файла на диске в сравнении справа от RenderTexture
.
cocos2d::Sprite* anvil_sprite = cocos2d::Sprite::createWithSpriteFrameName("anvil.png");
anvil_sprite->setAnchorPoint(Vec2::ZERO);
anvil_sprite->setPosition(0,0);
RenderTexture* rt = RenderTexture::create(anvil_sprite->getContentSize().width, anvil_sprite->getContentSize().height);
rt->begin();
anvil_sprite->visit();
rt->end();
//generates a file so I can confirm it's generating correctly in the OS's
//image viewer
rt->saveToFile("test_FILE.png");
Image* output_image = new Image;
// Either use the png generated from a previous run's RenderTexture (which works)
// or use a new Image generated on this run.
// If I use the existing png, this works as intended, but I'd like to be
// able to use the texture I generate right away instead of needing to save
// it to disk first
/* OPTION A */
output_image->initWithImageFile("test_FILE.png"); // works
/* OPTION B */
output_image = rt->newImage(); //doesn't render anything
auto output_texture = new Texture2D;
output_texture->initWithImage(output_image);
Sprite* output_sprite = cocos2d::Sprite::createWithTexture(output_texture);
scene->addChild(output_sprite);
Beyond возможно GPU не имея возможности вынести текстуру, прежде чем она используется в Sprite
, я не совсем уверен, что это произойдет. Я ищу варианты A и B для отображения одинаково, но сейчас работает только тот, у которого существующий файл в качестве источника для Image
.
Я использую версию 3.10, я думаю, что, может быть, это ошибка и он будет разрешен tween now и v3.14, но я застрял, пока они не добавят поддержку C++ для Cocos Creator. – TankorSmash