No, you are not correct, my friend!
If halo-less planar.obj is loaded without the bumpmap, it is rendered by FFP on default (menu is checked). But if you uncheck the menu to force PPL, FFP is cancelled, and the figure and cylinder are rendered by PPL's upper part that is called the Blinn-Phong shader. It comes in the
drawUsingProgrammablePipeline() under this condition:
........
// 12-09-2015 ML: !!! can't do "Specular mode" in multishader !!!
// ML 01-18-2018: diffuse only mapping for billboards for now
if (!pMaterial->bumpMapID || bSpecular || isBillboard) {
// Bind the color map texture. // ML: 11-26-2015
glActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
........It utilizes the shader that's called
gR.blinnPhongShader:
........
goto doneBillboard;
}
// Per fragment Blinn-Phong code path.
glUseProgram(gR.blinnPhongShader); // MLL 02-27-2018: bypass billboard code above
// Update shader parameters.
glUniform1f(glGetUniformLocation(gR.blinnPhongShader, "rDoFlat"), rDoFlat); // MLL 03-17-2019:
glUniform1f(glGetUniformLocation(gR.blinnPhongShader, "rDoWire"), rDoWire); // MLL 07-01-2019:
glUniform1i(glGetUniformLocation(gR.blinnPhongShader, "diffMap"), 0);
glUniform1i(glGetUniformLocation(gR.blinnPhongShader, "nLights"), nLights); // ML: 12-11-2015
glUniform1i(glGetUniformLocation(gR.blinnPhongShader, "nLightFlags"), nLightFlags); // ML 02-01-2018:
glUniform1i(glGetUniformLocation(gR.blinnPhongShader, "bDoSpherical"), bDoSpherical); // ML: 11-26-2015
........and it uses the
bDoSpherical boolean uniform to switch on automatic spherical coordinate generation in the shader, which is equivalent to the legacy immediate mode
........
glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP);
glEnable(GL_TEXTURE_GEN_S);
glEnable(GL_TEXTURE_GEN_T);
........commands.
On the other hand, if you try and add a bumpmap to the planar material, then spherical coord autogeneration becomes impossible, and the material is rendered through gR.normalMapShader in the lower else-branch of PPL material evaluation:
........
} else {
// Normal mapping code path.
glUseProgram(gR.normalMapShader);
// Bind the emission map texture. // MLL 12-08-2018:
glActiveTexture(GL_TEXTURE6); bFlagBump = TRUE;
........So, both FFP and PPL have built-in automatics to sense reflective materials with both global (wallpaper-based) and local (refl-based) "ambient" reflectance. The pipelines can simply be toggled with the
Use fixed pipeline menu.
And finally, the
Render->Ambient reflection menu is meant for
any model with
any set of materials to be optionally rendered entirely in the global wallpaper-based fancy "ambient" reflection mode. To me (and I
am an average user in this case) it's as useless and pure fancy as any other shader in that section (gooch, cartoon, x-ray, etc.).
Hopefully, now you understand how "ambient reflection" works in OR and how entirely worthless its immediate mode is against the almighty programmable pipeline.