私は2つの鬼のアプリケーションを持っています:
1)サブアプリケーション。ウィンドウとテクスチャにレンダリングします(同じカメラを使用)。テクスチャは共有メモリに「エクスポート」されます(Linuxではshm)
2)メインアプリケーション。プレーンは(1)「サブアプリケーション」で何が起こっているかを示し、共有メモリからテクスチャをロードします。
(1)がレンダリングするテクスチャは、(2)の平面で使用されるテクスチャと同じサイズです。例:512x512
RenderWindowがRenderTextureより大きいか等しい場合、すべて正常に機能します。(1)で見たものは、まともなfpsで(2)平面に反映されます。共有メモリは強力です!
ただし、レンダリングウィンドウがテクスチャよりも小さい場合は、テクスチャの一部のみが更新されます。
これが私に起こっていることです:
いくつかの例は1x1ウィンドウと大きなレンダリングテクスチャを示しているので、ウィンドウよりも大きなレンダリングテクスチャを持つことは可能だと思います。
ウィンドウの作成方法は次のとおりです。
window_ = root_->createRenderWindow("blablah"), 256, 256, false);
レンダリングテクスチャは次のように作成されます。
TextureManager* tm = TextureManager::getSingletonPtr();
TexturePtr rttTexture = tm->createManual(
/**/"MainRTT"
/**/, ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME
/**/, TEX_TYPE_2D
/**/, 512
/**/, 512
/**/, 0
/**/, PF_R8G8B8A8
/**/, TU_RENDERTARGET);
RenderTexture* renderTarget = rttTexture->getBuffer()->getRenderTarget();
renderTarget->addViewport(camera_);
renderTarget->setAutoUpdated(false);
Viewport* vp = renderTarget->getViewport(0);
vp->setClearEveryFrame(true);
vp->setOverlaysEnabled(true);
vp->setBackgroundColour(ColourValue::Black);
これは私がレンダリングテクスチャを更新する方法です:
class ShmTexUpdater: public Ogre::FrameListener {
public:
ShmTexUpdater(const int& width, const int& height, void* data,
const TexturePtr& tex) :
/**/width_(width)
/**/, height_(height)
/**/, data_(data)
/**/, tex_(tex)
/**/, buf_(tex->getBuffer())
/**/, renderTarget_(tex->getBuffer()->getRenderTarget()){
}
virtual ~ShmTexUpdater() {
}
private:
virtual bool frameStarted(const FrameEvent& evt) {
FrameWork::instance()->window()->update();
buf_->lock(Ogre::HardwareBuffer::HBL_NORMAL);
renderTarget_->update();
tex_->getBuffer()->blitToMemory(
/**/PixelBox(width_, height_, 1, ShmTexture4k::FORMAT, data_));
buf_->unlock();
return true;
}
int const width_;
int const height_;
void* const data_;
TexturePtr const tex_;
HardwarePixelBufferSharedPtr buf_;
RenderTexture* renderTarget_;
};
RenderWindowとRenderTextureの説明を読んで、これは私が期待していることではありません。だから...これは鬼のバグですか、それともopenglですか?それとも私はそれを間違っていますか?
- OS:Linux
- 鬼:バージョン1.7.3(Cthugha)
- GL_VERSION = 4.0.0 NVIDIA 256.53