gpt4 book ai didi

c++ - 食人魔 3d : RenderTexture bigger than RenderWindow

转载 作者:太空狗 更新时间:2023-10-29 12:37:16 24 4
gpt4 key购买 nike

我有两个食人魔应用程序:

1) 子应用程序,渲染到窗口和纹理(使用相同的相机)。纹理被“导出”到共享内存(linux 中的 shm)

2) 主应用程序,其中一个平面显示 (1)“子应用程序”中发生的事情,从共享内存加载纹理。

(1) 渲染的纹理与 (2) 中平面使用的纹理大小相同。例如:512x512

如果 RenderWindow 大于或等于 RenderTexture,一切正常。您在 (1) 中看到的内容以良好的 fps 反射(reflect)在 (2) 平面中。共享内存很强大!

但是如果渲染窗口小于纹理,只有一部分纹理被更新

这就是发生在我身上的事情: renderwindow smaller than rendertexture

一些示例显示了 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?还是我做错了?

  • 操作系统:Linux
  • 食人魔:版本 1.7.3 (Cthugha)
  • GL_VERSION = 4.0.0 NVIDIA 256.53

最佳答案

我不确定它是否有很大帮助(而且可能为时已晚),但前段时间我读到 OpenGL 无法渲染比它使用的窗口大的纹理。 DX 可以做到这一点,但 OGL 不行。

顺便说一句,抱歉,这是回答而不是评论,但我还不能写评论;]

关于c++ - 食人魔 3d : RenderTexture bigger than RenderWindow,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7930306/

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