Hello,
I'm actually using irrlicht 1.5 and I need to access the back buffer in read-only, impossible to find how to do it ?
Could someone help about it please ?
Thank you very much
SIrrlichtCreationParameters param;
...
param.AntiAlias = false; // <- if set to true, depth buffer get broken
...
IrrlichtDevice* device = createDeviceEx(param);
IVideoDriver* driver = device->getVideoDriver();
...
virtual bool copyBackBufferTo(ITexture* dest);
bool CD3D9Driver::copyBackBufferTo(ITexture* dest)
{
// see implementation at end of this post
}
virtual bool copyBackBufferTo(ITexture* dest) { return (false); }
//----------------------------------------------------
// implementation of the copyBackBufferTo function
//----------------------------------------------------
bool CD3D9Driver::copyBackBufferTo(ITexture* dest)
{
if (dest->getDriverType() != EDT_DIRECT3D9)
return (false);
CD3D9Texture* tex = (CD3D9Texture*)dest;
IDirect3DSurface9* destSurface = tex->getRenderTargetSurface();
if (destSurface == NULL)
return (false);
IDirect3DSurface9* backBuffer;
if (pID3DDevice->GetBackBuffer(0, 0, D3DBACKBUFFER_TYPE_MONO, &backBuffer) != D3D_OK)
return (false);
if (pID3DDevice->StretchRect(backBuffer, NULL, destSurface, NULL, D3DTEXF_LINEAR) != D3D_OK)
return (false);
return (true);
}
virtual bool copyBackBufferTo(ITexture* dest)
{
return (false);
}
int APIENTRY _tWinMain( [...] )
{
[...]
IrrlichtDevice* pDevice = NULL;
SIrrlichtCreationParameters param;
param.DriverType = EDT_DIRECT3D9;
param.[...]
pDevice = createDeviceEx(param);
if (pDevice == 0)
return false;
pDevice->setResizeAble(false);
[...]
IVideoDriver* driver = pDevice->getVideoDriver();
ISceneManager* smgr = pDevice->getSceneManager();
// until here everything is fine, all instances are properly set (not NULL)
// any of the following calls (dereferencing a member from IVideoDriver instance) cause the application to fail
driver->checkDriverReset();
driver->getFPS();
driver->getName();
driver->getScreenSize();
Users browsing this forum: No registered users and 1 guest