mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-09 13:22:24 +03:00
0026122: Visualization, TKOpenGl - clipping and capping is broken when ffp is disabled on Linux
OpenGl_Clipping - do not setup clipping planes using FFP when it is disabled. OpenGl_ShaderManager - apply 2d texture coordinates transformation in GLSL programs. OpenGl_Context::SetTextureMatrix() - move texture matrix assignment from OpenGl_Workspace::setTextureParams() to OpenGl_Context. Add test case demo/samples/dimensionsglsl with FFP turned OFF. Add test case v3d/glsl/texture_trsf applying texture transformation. Small correction of test case for issue CR26122
This commit is contained in:
@@ -36,11 +36,20 @@ namespace
|
||||
|
||||
#define EOL "\n"
|
||||
|
||||
//! Definition of VertColor varying.
|
||||
//! Definition of TexCoord varying.
|
||||
const char THE_VARY_TexCoord_OUT[] =
|
||||
EOL"THE_SHADER_OUT vec2 TexCoord;";
|
||||
EOL"THE_SHADER_OUT vec4 TexCoord;";
|
||||
const char THE_VARY_TexCoord_IN[] =
|
||||
EOL"THE_SHADER_IN vec2 TexCoord;";
|
||||
EOL"THE_SHADER_IN vec4 TexCoord;";
|
||||
//! Compute TexCoord value in Vertex Shader
|
||||
const char THE_VARY_TexCoord_Trsf[] =
|
||||
EOL" float aRotSin = occTextureTrsf_RotationSin();"
|
||||
EOL" float aRotCos = occTextureTrsf_RotationCos();"
|
||||
EOL" vec2 aTex2 = (occTexCoord.xy + occTextureTrsf_Translation()) * occTextureTrsf_Scale();"
|
||||
EOL" vec2 aCopy = aTex2;"
|
||||
EOL" aTex2.x = aCopy.x * aRotCos - aCopy.y * aRotSin;"
|
||||
EOL" aTex2.y = aCopy.x * aRotSin + aCopy.y * aRotCos;"
|
||||
EOL" TexCoord = vec4(aTex2, occTexCoord.zw);";
|
||||
|
||||
//! Auxiliary function to transform normal
|
||||
const char THE_FUNC_transformNormal[] =
|
||||
@@ -1026,8 +1035,8 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFont()
|
||||
{
|
||||
Handle(Graphic3d_ShaderProgram) aProgramSrc = new Graphic3d_ShaderProgram();
|
||||
TCollection_AsciiString aSrcVert = TCollection_AsciiString()
|
||||
+ THE_VARY_TexCoord_OUT
|
||||
+ EOL"void main()"
|
||||
+ EOL"THE_SHADER_OUT vec2 TexCoord;"
|
||||
EOL"void main()"
|
||||
EOL"{"
|
||||
EOL" TexCoord = occTexCoord.st;"
|
||||
EOL" gl_Position = occProjectionMatrix * occWorldViewMatrix * occModelWorldMatrix * occVertex;"
|
||||
@@ -1043,7 +1052,7 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFont()
|
||||
#endif
|
||||
|
||||
TCollection_AsciiString aSrcFrag = TCollection_AsciiString() +
|
||||
+ THE_VARY_TexCoord_IN
|
||||
+ EOL"THE_SHADER_IN vec2 TexCoord;"
|
||||
+ aSrcGetAlpha
|
||||
+ EOL"void main()"
|
||||
EOL"{"
|
||||
@@ -1193,11 +1202,10 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramFlat (Handle(OpenGl_Shad
|
||||
{
|
||||
aSrcVertExtraOut += THE_VARY_TexCoord_OUT;
|
||||
aSrcFragExtraOut += THE_VARY_TexCoord_IN;
|
||||
aSrcVertExtraMain +=
|
||||
EOL" TexCoord = occTexCoord.st;";
|
||||
aSrcVertExtraMain += THE_VARY_TexCoord_Trsf;
|
||||
|
||||
aSrcFragGetColor =
|
||||
EOL"vec4 getColor(void) { return occTexture2D(occActiveSampler, TexCoord.st); }";
|
||||
EOL"vec4 getColor(void) { return occTexture2D(occActiveSampler, TexCoord.st / TexCoord.w); }";
|
||||
}
|
||||
else if ((theBits & OpenGl_PO_TextureEnv) != 0)
|
||||
{
|
||||
@@ -1440,14 +1448,13 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramGouraud (Handle(OpenGl_S
|
||||
{
|
||||
aSrcVertExtraOut += THE_VARY_TexCoord_OUT;
|
||||
aSrcFragExtraOut += THE_VARY_TexCoord_IN;
|
||||
aSrcVertExtraMain +=
|
||||
EOL" TexCoord = occTexCoord.st;";
|
||||
aSrcVertExtraMain += THE_VARY_TexCoord_Trsf;
|
||||
|
||||
aSrcFragGetColor =
|
||||
EOL"vec4 getColor(void)"
|
||||
EOL"{"
|
||||
EOL" vec4 aColor = gl_FrontFacing ? FrontColor : BackColor;"
|
||||
EOL" return occTexture2D(occActiveSampler, TexCoord.st) * aColor;"
|
||||
EOL" return occTexture2D(occActiveSampler, TexCoord.st / TexCoord.w) * aColor;"
|
||||
EOL"}";
|
||||
}
|
||||
}
|
||||
@@ -1560,14 +1567,13 @@ Standard_Boolean OpenGl_ShaderManager::prepareStdProgramPhong (Handle(OpenGl_Sha
|
||||
{
|
||||
aSrcVertExtraOut += THE_VARY_TexCoord_OUT;
|
||||
aSrcFragExtraOut += THE_VARY_TexCoord_IN;
|
||||
aSrcVertExtraMain +=
|
||||
EOL" TexCoord = occTexCoord.st;";
|
||||
aSrcVertExtraMain += THE_VARY_TexCoord_Trsf;
|
||||
|
||||
aSrcFragGetColor =
|
||||
EOL"vec4 getColor(void)"
|
||||
EOL"{"
|
||||
EOL" vec4 aColor = " thePhongCompLight ";"
|
||||
EOL" return occTexture2D(occActiveSampler, TexCoord.st) * aColor;"
|
||||
EOL" return occTexture2D(occActiveSampler, TexCoord.st / TexCoord.w) * aColor;"
|
||||
EOL"}";
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user