1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-14 13:30:48 +03:00

0029020: Visualization, V3d_View - workaround image dump issue on Intel OpenGL driver

Implemented workaround for dump images with width >= 5462 pix on Intel OpenGl driver.
Changes according to OpenGl_Context::myVendor field in lowercase.
This commit is contained in:
mnv
2018-10-01 13:53:37 +03:00
committed by bugmaster
parent 521648ce02
commit 6997ff1c88
7 changed files with 69 additions and 10 deletions

View File

@@ -2753,19 +2753,27 @@ Standard_Boolean V3d_View::ToPixMap (Image_PixMap& theImage,
if (aFBOPtr.IsNull())
{
Standard_Integer aMaxTexSize = MyViewer->Driver()->InquireLimit (Graphic3d_TypeOfLimit_MaxTextureSize);
if (theParams.TileSize > aMaxTexSize)
Standard_Integer aMaxTexSizeX = MyViewer->Driver()->InquireLimit (Graphic3d_TypeOfLimit_MaxViewDumpSizeX);
Standard_Integer aMaxTexSizeY = MyViewer->Driver()->InquireLimit (Graphic3d_TypeOfLimit_MaxViewDumpSizeY);
if (theParams.TileSize > aMaxTexSizeX
|| theParams.TileSize > aMaxTexSizeY)
{
Message::DefaultMessenger()->Send (TCollection_AsciiString ("Image dump can not be performed - specified tile size (")
+ theParams.TileSize + ") exceeds hardware limits (" + aMaxTexSize + ")", Message_Fail);
+ theParams.TileSize + ") exceeds hardware limits (" + aMaxTexSizeX + "x" + aMaxTexSizeY + ")", Message_Fail);
return Standard_False;
}
if (aFBOVPSize.x() > aMaxTexSize
|| aFBOVPSize.y() > aMaxTexSize)
if (aFBOVPSize.x() > aMaxTexSizeX
|| aFBOVPSize.y() > aMaxTexSizeY)
{
aFBOVPSize.x() = Min (aFBOVPSize.x(), aMaxTexSize);
aFBOVPSize.y() = Min (aFBOVPSize.y(), aMaxTexSize);
if (MyViewer->Driver()->InquireLimit (Graphic3d_TypeOfLimit_IsWorkaroundFBO))
{
Message::DefaultMessenger ()->Send (TCollection_AsciiString ("Warning, workaround for Intel driver problem with empty FBO for images with big width is applyed."), Message_Warning);
}
Message::DefaultMessenger()->Send (TCollection_AsciiString ("Info, tiling image dump is used, image size (")
+ aFBOVPSize.x() + "x" + aFBOVPSize.y() + ") exceeds hardware limits (" + aMaxTexSizeX + "x" + aMaxTexSizeY + ")", Message_Info);
aFBOVPSize.x() = Min (aFBOVPSize.x(), aMaxTexSizeX);
aFBOVPSize.y() = Min (aFBOVPSize.y(), aMaxTexSizeY);
isTiling = true;
}