#define EOL "\n"
+//! Definition of VertColor varying.
+const char THE_VARY_VertColor[] =
+ EOL"varying vec4 VertColor;";
+
+const char THE_VARY_TexCoord[] =
+ EOL"varying vec2 TexCoord;";
+
//! Auxiliary function to transform normal
const char THE_FUNC_transformNormal[] =
EOL"vec3 transformNormal (in vec3 theNormal)"
EOL" gl_FragColor = aColor;";
}
}
+ else
+ {
+ if ((theBits & OpenGl_PO_TextureRGB) != 0)
+ {
+ aSrcVertExtraOut += THE_VARY_TexCoord;
+ aSrcFragExtraOut += THE_VARY_TexCoord;
+ aSrcVertExtraMain +=
+ EOL" TexCoord = occTexCoord.st;";
+
+ aSrcFragGetColor =
+ EOL"vec4 getColor(void) { return texture2D(occActiveSampler, TexCoord.st); }";
+ }
+ }
if ((theBits & OpenGl_PO_VertColor) != 0)
{
- aSrcVertExtraOut += EOL"varying vec4 VertColor;";
+ aSrcVertExtraOut += THE_VARY_VertColor;
aSrcVertExtraMain += EOL" VertColor = occVertColor;";
- aSrcFragExtraOut += EOL"varying vec4 VertColor;";
+ aSrcFragExtraOut += THE_VARY_VertColor;
aSrcFragGetColor = EOL"vec4 getColor(void) { return VertColor; }";
}
if ((theBits & OpenGl_PO_ClipPlanes) != 0)
{
Handle(Graphic3d_ShaderProgram) aProgramSrc = new Graphic3d_ShaderProgram();
TCollection_AsciiString aSrcVert, aSrcVertColor, aSrcVertExtraOut, aSrcVertExtraMain, aSrcFrag, aSrcFragExtraOut, aSrcFragExtraMain;
+ TCollection_AsciiString aSrcFragGetColor = EOL"vec4 getColor(void) { return gl_FrontFacing ? FrontColor : BackColor; }";
if ((theBits & OpenGl_PO_Point) != 0)
{
#if defined(GL_ES_VERSION_2_0)
{
aSrcVertColor = EOL"vec4 getVertColor(void) { return occVertColor; }";
}
+ if ((theBits & OpenGl_PO_Point) != 0)
+ {
+ if ((theBits & OpenGl_PO_TextureRGB) != 0)
+ {
+ aSrcFragGetColor =
+ EOL"vec4 getColor(void)"
+ EOL"{"
+ EOL" vec4 aColor = gl_FrontFacing ? FrontColor : BackColor;"
+ EOL" return texture2D(occActiveSampler, gl_PointCoord) * aColor;"
+ EOL"}";
+ }
+ }
+ else
+ {
+ if ((theBits & OpenGl_PO_TextureRGB) != 0)
+ {
+ aSrcVertExtraOut += THE_VARY_TexCoord;
+ aSrcFragExtraOut += THE_VARY_TexCoord;
+ aSrcVertExtraMain +=
+ EOL" TexCoord = occTexCoord.st;";
+
+ aSrcFragGetColor =
+ EOL"vec4 getColor(void)"
+ EOL"{"
+ EOL" vec4 aColor = gl_FrontFacing ? FrontColor : BackColor;"
+ EOL" return texture2D(occActiveSampler, TexCoord.st) * aColor;"
+ EOL"}";
+ }
+ }
if ((theBits & OpenGl_PO_ClipPlanes) != 0)
{
const char THE_POS_VARY[] =
+ EOL"varying vec4 FrontColor;"
EOL"varying vec4 BackColor;"
+ aSrcFragExtraOut
+ + aSrcFragGetColor
+ EOL"void main()"
EOL"{"
+ aSrcFragExtraMain
- + EOL" gl_FragColor = gl_FrontFacing ? FrontColor : BackColor;"
+ + EOL" gl_FragColor = getColor();"
EOL"}";
aProgramSrc->AttachShader (Graphic3d_ShaderObject::CreateFromSource (Graphic3d_TOS_VERTEX, aSrcVert));
Standard_Boolean OpenGl_ShaderManager::prepareStdProgramPhong (Handle(OpenGl_ShaderProgram)& theProgram,
const Standard_Integer theBits)
{
+ #define thePhongCompLight "computeLighting (normalize (Normal), normalize (View), Position, gl_FrontFacing)"
+
Handle(Graphic3d_ShaderProgram) aProgramSrc = new Graphic3d_ShaderProgram();
- TCollection_AsciiString aSrcVert, aSrcVertExtraOut, aSrcVertExtraMain, aSrcFrag, aSrcFragGetColor, aSrcFragExtraMain;
+ TCollection_AsciiString aSrcVert, aSrcVertExtraOut, aSrcVertExtraMain, aSrcFrag, aSrcFragExtraOut, aSrcFragGetVertColor, aSrcFragExtraMain;
+ TCollection_AsciiString aSrcFragGetColor = EOL"vec4 getColor(void) { return " thePhongCompLight "; }";
if ((theBits & OpenGl_PO_Point) != 0)
{
#if defined(GL_ES_VERSION_2_0)
}
if ((theBits & OpenGl_PO_VertColor) != 0)
{
- aSrcVertExtraOut += EOL"varying vec4 VertColor;";
+ aSrcVertExtraOut += THE_VARY_VertColor;
aSrcVertExtraMain += EOL" VertColor = occVertColor;";
aSrcFragGetColor = EOL"varying vec4 VertColor;"
EOL"vec4 getVertColor(void) { return VertColor; }";
}
+
+ if ((theBits & OpenGl_PO_Point) != 0)
+ {
+ if ((theBits & OpenGl_PO_TextureRGB) != 0)
+ {
+ aSrcFragGetColor =
+ EOL"vec4 getColor(void)"
+ EOL"{"
+ EOL" vec4 aColor = " thePhongCompLight ";"
+ EOL" return texture2D(occActiveSampler, gl_PointCoord) * aColor;"
+ EOL"}";
+ }
+ }
+ else
+ {
+ if ((theBits & OpenGl_PO_TextureRGB) != 0)
+ {
+ aSrcVertExtraOut += THE_VARY_TexCoord;
+ aSrcFragExtraOut += THE_VARY_TexCoord;
+ aSrcVertExtraMain +=
+ EOL" TexCoord = occTexCoord.st;";
+
+ aSrcFragGetColor =
+ EOL"vec4 getColor(void)"
+ EOL"{"
+ EOL" vec4 aColor = " thePhongCompLight ";"
+ EOL" return texture2D(occActiveSampler, TexCoord.st) * aColor;"
+ EOL"}";
+ }
+ }
+
if ((theBits & OpenGl_PO_ClipPlanes) != 0)
{
aSrcFragExtraMain += THE_FRAG_CLIP_PLANES;
EOL"varying vec3 Normal;"
EOL"varying vec3 View;"
+ EOL
- + aSrcFragGetColor
+ + aSrcFragExtraOut
+ + aSrcFragGetVertColor
+ aLights
+ + aSrcFragGetColor
+ EOL
EOL"void main()"
EOL"{"
+ aSrcFragExtraMain
- + EOL" gl_FragColor = computeLighting (normalize (Normal), normalize (View), Position, gl_FrontFacing);"
+ + EOL" gl_FragColor = getColor();"
EOL"}";
aProgramSrc->AttachShader (Graphic3d_ShaderObject::CreateFromSource (Graphic3d_TOS_VERTEX, aSrcVert));