1
0
mirror of https://git.dev.opencascade.org/repos/occt.git synced 2025-08-19 13:40:49 +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:
kgv
2014-10-02 13:46:27 +04:00
committed by bugmaster
parent 25b97fac40
commit 8625ef7e94
40 changed files with 1261 additions and 445 deletions

View File

@@ -2061,8 +2061,13 @@ void OpenGl_Context::ReleaseDelayed()
// function : BindProgram
// purpose :
// =======================================================================
void OpenGl_Context::BindProgram (const Handle(OpenGl_ShaderProgram)& theProgram)
Standard_Boolean OpenGl_Context::BindProgram (const Handle(OpenGl_ShaderProgram)& theProgram)
{
if (core20fwd == NULL)
{
return Standard_False;
}
if (theProgram.IsNull()
|| !theProgram->IsValid())
{
@@ -2071,9 +2076,53 @@ void OpenGl_Context::BindProgram (const Handle(OpenGl_ShaderProgram)& theProgram
core20fwd->glUseProgram (OpenGl_ShaderProgram::NO_PROGRAM);
myActiveProgram.Nullify();
}
return;
return Standard_False;
}
myActiveProgram = theProgram;
core20fwd->glUseProgram (theProgram->ProgramId());
return Standard_True;
}
// =======================================================================
// function : SetColor4fv
// purpose :
// =======================================================================
void OpenGl_Context::SetColor4fv (const OpenGl_Vec4& theColor)
{
if (!myActiveProgram.IsNull())
{
myActiveProgram->SetUniform (this, myActiveProgram->GetStateLocation (OpenGl_OCCT_COLOR), theColor);
}
#if !defined(GL_ES_VERSION_2_0)
else if (core11 != NULL)
{
core11->glColor4fv (theColor.GetData());
}
#endif
}
// =======================================================================
// function : SetPointSize
// purpose :
// =======================================================================
void OpenGl_Context::SetPointSize (const Standard_ShortReal theSize)
{
if (!myActiveProgram.IsNull())
{
myActiveProgram->SetUniform (this, myActiveProgram->GetStateLocation (OpenGl_OCCT_POINT_SIZE), theSize);
#if !defined(GL_ES_VERSION_2_0)
//myContext->core11fwd->glEnable (GL_VERTEX_PROGRAM_POINT_SIZE);
#endif
}
#if !defined(GL_ES_VERSION_2_0)
//else
{
core11fwd->glPointSize (theSize);
if (core20fwd != NULL)
{
//myContext->core11fwd->glDisable (GL_VERTEX_PROGRAM_POINT_SIZE);
}
}
#endif
}