mirror of
https://git.dev.opencascade.org/repos/occt.git
synced 2025-08-14 13:30:48 +03:00
0025282: Visualization, OpenGl_PrimitiveArray - provide built-in GLSL programs as alternative to FFP
Enumerations Visual3d_TypeOfModel, V3d_TypeOfShadingModel. - Remove unused values V3d_MULTICOLOR, V3d_HIDDEN, Visual3d_TOM_INTERP_COLOR. - Add per-pixel shading mode - V3d_PHONG, Visual3d_TOM_FRAGMENT. Draw Harness command vrenderparams. Add option -shadingModel to setup Shading Model. OpenGl_Caps::ffpEnable - new option to switch FFP/built-in GLSL programs. OpenGl_ShaderManager - add built-in GLSL programs. Draw Harness command vcaps. - Fix command syntax to meet coding rules. - Add option -ffp to activate/disable built-in GLSL programs. GLSL API changes. - Rename vertex attribute occColor -> occVertColor. - Introduce vec4 occColor uniform variable for light-less shaders. - Introduce float occPointSize uniform variable for marker programs. OpenGl_VertexBuffer::bindAttribute() - activate normalization for non-GL_FLOAT types, since color attribute is defined as 32-bit vector of 4 unsigned byte values. OpenGl_Context - add methods SetColor4fv() and SetPointSize() for parameters redirection to active GLSL program (as alternative to glColor4fv() and glPointSize()). OpenGl_ShaderProgram - define default precision for float types in Fragment Shader within OpenGL ES 2.0+ context. OpenGl_AspectMarker, initialize Aspect_TOM_O_POINT display list in the same way as sprite texture. OpenGl_Texture, do not use sized internal formats on OpenGL ES.
This commit is contained in:
@@ -59,7 +59,10 @@ Standard_CString OpenGl_ShaderProgram::PredefinedKeywords[] =
|
||||
"occTextureEnable", // OpenGl_OCCT_TEXTURE_ENABLE
|
||||
"occDistinguishingMode", // OpenGl_OCCT_DISTINGUISH_MODE
|
||||
"occFrontMaterial", // OpenGl_OCCT_FRONT_MATERIAL
|
||||
"occBackMaterial" // OpenGl_OCCT_BACK_MATERIAL
|
||||
"occBackMaterial", // OpenGl_OCCT_BACK_MATERIAL
|
||||
"occColor", // OpenGl_OCCT_COLOR
|
||||
|
||||
"occPointSize" // OpenGl_OCCT_POINT_SIZE
|
||||
|
||||
};
|
||||
|
||||
@@ -208,9 +211,23 @@ Standard_Boolean OpenGl_ShaderProgram::Initialize (const Handle(OpenGl_Context)&
|
||||
}
|
||||
|
||||
TCollection_AsciiString aSource = aDeclarations + anIter.Value()->Source();
|
||||
if (anIter.Value()->Type() == Graphic3d_TOS_VERTEX)
|
||||
switch (anIter.Value()->Type())
|
||||
{
|
||||
aSource = TCollection_AsciiString ("#define VERTEX_SHADER\n") + aSource;
|
||||
case Graphic3d_TOS_VERTEX:
|
||||
{
|
||||
aSource = TCollection_AsciiString ("#define VERTEX_SHADER\n") + aSource;
|
||||
break;
|
||||
}
|
||||
case Graphic3d_TOS_FRAGMENT:
|
||||
{
|
||||
#if defined(GL_ES_VERSION_2_0)
|
||||
TCollection_AsciiString aPrefix (theCtx->hasHighp
|
||||
? "precision highp float;\n"
|
||||
: "precision mediump float;\n");
|
||||
aSource = aPrefix + aSource;
|
||||
#endif
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!aShader->LoadSource (theCtx, aSource))
|
||||
@@ -267,7 +284,7 @@ Standard_Boolean OpenGl_ShaderProgram::Initialize (const Handle(OpenGl_Context)&
|
||||
SetAttributeName (theCtx, Graphic3d_TOA_POS, "occVertex");
|
||||
SetAttributeName (theCtx, Graphic3d_TOA_NORM, "occNormal");
|
||||
SetAttributeName (theCtx, Graphic3d_TOA_UV, "occTexCoord");
|
||||
SetAttributeName (theCtx, Graphic3d_TOA_COLOR, "occColor");
|
||||
SetAttributeName (theCtx, Graphic3d_TOA_COLOR, "occVertColor");
|
||||
|
||||
if (!Link (theCtx))
|
||||
{
|
||||
|
Reference in New Issue
Block a user