Existing "selector" mode (which was unused and has been used to
implement ORM textures has been renamed to metallic-roughness, and new
modes have been added for occlusion and occlusion-metallic-roughness.
New GLSL input names have been added. The .egg format has been
extended. The Assimp loader has been updated. The shader generator now
handles occlusion maps, and a unit test for that is added.
This prevents accessing a texture (the shadow map) that we're currently rendering into. Hopefully a reasonable driver was already optimizing out the access properly due to the color write being off, but it could cause unnecessary work in the driver
This will have the effect of the shader generator generating a different shader for the shadow pass than for the main pass, ideally we optimize the shader generator a bit more so that there are fewer shaders generated for the shadow pass.
This vector implementation does is optimized for the case of having only a small number of elements, which are stored directly on the vector object rather than being allocated from the heap. If the capacity exceeds this small number, then a heap allocation is done.
This should improve performance in a couple of cases where vectors typically store 1 element and rarely more than that.
In gp5fp and glslf profiles, we can rely on per-fragment point coordinates to be available, otherwise we have to emulate support by calculating it from the fragment pixel coordinates
In particular, these optimize the traversal of nodes that are not in view, which are discarded more efficiently.
This change affects both the cull and collision traversers.
See #981. Setting `vertex-colors-prefer-packed` to false will make Panda default to OpenGL-style vertex colors, which is useful if are targeting OpenGL and not DirectX 9, avoiding a potential performance cost.
LODNode will now correctly calculate LOD for individual instances.
It turns out implementing it for FadeLODNode is hard (wrt. tracking state for individual instances) so I have not bothered with supporting it - FadeLODNode instead calculates a single switch level for all instances based on the centroid of the visible instances.