mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-04-05 18:16:23 +03:00
0029508: Visualization, TKOpenGl - visual artifacts on Adreno 305/308
OpenGl_ShaderManager now: - prefers GLSL ES 100 over GLSL ES 300 on devices reporting OpenGL ES 3.0; - prefers GLSL ES 300 on devices reporting OpenGL ES 3.1+. to workaround known buggy implementations of OpenGL ES 3.0 drivers.
This commit is contained in:
parent
12d6e15582
commit
c5a65111c4
@ -1197,8 +1197,10 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFont()
|
|||||||
aProgramSrc->SetHeader ("#version 150");
|
aProgramSrc->SetHeader ("#version 150");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 1))
|
||||||
{
|
{
|
||||||
|
// prefer "100 es" on OpenGL ES 3.0 devices
|
||||||
|
// and "300 es" on newer devices (3.1+)
|
||||||
aProgramSrc->SetHeader ("#version 300 es");
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1532,6 +1534,12 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFlat (Handle(OpenGl_Shad
|
|||||||
{
|
{
|
||||||
aProgramSrc->SetNbFragmentOutputs (2);
|
aProgramSrc->SetNbFragmentOutputs (2);
|
||||||
aProgramSrc->SetWeightOitOutput (true);
|
aProgramSrc->SetWeightOitOutput (true);
|
||||||
|
#if defined(GL_ES_VERSION_2_0)
|
||||||
|
if (myContext->IsGlGreaterEqual (3, 0))
|
||||||
|
{
|
||||||
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
TCollection_AsciiString aSrcVertEndMain;
|
TCollection_AsciiString aSrcVertEndMain;
|
||||||
@ -1541,6 +1549,7 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFlat (Handle(OpenGl_Shad
|
|||||||
#if defined(GL_ES_VERSION_2_0)
|
#if defined(GL_ES_VERSION_2_0)
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 0))
|
||||||
{
|
{
|
||||||
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
hasGlslBitOps = true;
|
hasGlslBitOps = true;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -1611,8 +1620,10 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFlat (Handle(OpenGl_Shad
|
|||||||
aProgramSrc->SetHeader ("#version 150");
|
aProgramSrc->SetHeader ("#version 150");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 1))
|
||||||
{
|
{
|
||||||
|
// prefer "100 es" on OpenGL ES 3.0 devices
|
||||||
|
// and "300 es" on newer devices (3.1+)
|
||||||
aProgramSrc->SetHeader ("#version 300 es");
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -1885,6 +1896,12 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramGouraud (Handle(OpenGl_S
|
|||||||
{
|
{
|
||||||
aProgramSrc->SetNbFragmentOutputs (2);
|
aProgramSrc->SetNbFragmentOutputs (2);
|
||||||
aProgramSrc->SetWeightOitOutput (true);
|
aProgramSrc->SetWeightOitOutput (true);
|
||||||
|
#if defined(GL_ES_VERSION_2_0)
|
||||||
|
if (myContext->IsGlGreaterEqual (3, 0))
|
||||||
|
{
|
||||||
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Standard_Integer aNbLights = 0;
|
Standard_Integer aNbLights = 0;
|
||||||
@ -1929,8 +1946,10 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramGouraud (Handle(OpenGl_S
|
|||||||
aProgramSrc->SetHeader ("#version 150");
|
aProgramSrc->SetHeader ("#version 150");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 1))
|
||||||
{
|
{
|
||||||
|
// prefer "100 es" on OpenGL ES 3.0 devices
|
||||||
|
// and "300 es" on newer devices (3.1+)
|
||||||
aProgramSrc->SetHeader ("#version 300 es");
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -2089,13 +2108,19 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramPhong (Handle(OpenGl_Sha
|
|||||||
aProgramSrc->SetHeader ("#version 150");
|
aProgramSrc->SetHeader ("#version 150");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 1))
|
||||||
{
|
{
|
||||||
|
// prefer "100 es" on OpenGL ES 3.0 devices
|
||||||
|
// and "300 es" on newer devices (3.1+)
|
||||||
aProgramSrc->SetHeader ("#version 300 es");
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
}
|
}
|
||||||
else if (isFlatNormal)
|
else if (isFlatNormal)
|
||||||
{
|
{
|
||||||
if (myContext->oesStdDerivatives)
|
if (myContext->IsGlGreaterEqual (3, 0))
|
||||||
|
{
|
||||||
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
|
}
|
||||||
|
else if (myContext->oesStdDerivatives)
|
||||||
{
|
{
|
||||||
aProgramSrc->SetHeader ("#extension GL_OES_standard_derivatives : enable");
|
aProgramSrc->SetHeader ("#extension GL_OES_standard_derivatives : enable");
|
||||||
}
|
}
|
||||||
@ -2325,8 +2350,10 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramStereo (Handle(OpenGl_Sh
|
|||||||
aProgramSrc->SetHeader ("#version 150");
|
aProgramSrc->SetHeader ("#version 150");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
if (myContext->IsGlGreaterEqual (3, 0))
|
if (myContext->IsGlGreaterEqual (3, 1))
|
||||||
{
|
{
|
||||||
|
// prefer "100 es" on OpenGL ES 3.0 devices
|
||||||
|
// and "300 es" on newer devices (3.1+)
|
||||||
aProgramSrc->SetHeader ("#version 300 es");
|
aProgramSrc->SetHeader ("#version 300 es");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user