0

Sprite別の をベースに白黒を作成しようとしていますSprite。スプライト ピクセル データを作成してキャッシュした後は、スプライト ピクセル データにアクセスできないため、 にImage基づいて新しい を作成し、画像データを変更してから、 を に変更し、Image最後Textureに に変更して、これを回避していSpriteます。黒と白。

問題は、Imageから生成されたを使用するRenderTextureと、実際には描画されませんが、RenderTexture::saveToFile後で生成された png 画像を使用すると、正常に動作することです。

ほぼ同じ方法で構築されているため、問題なく表示できるはずです。唯一の違いはoutput_sprite、ディスク上の既存のファイルから構築されるのに対して、.sceneImageRenderTexture

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);

で使用される前に GPU がテクスチャをレンダリングする機会がないことを超えて、Sprite何が起こるかはよくわかりません。オプション A と B の両方が同じ方法でレンダリングされるように探していますが、現在、ソースとして既存のファイルを使用するものだけImageが機能しています。

4

1 に答える 1