Too Many Shader Instructions

This only can happen if you have at least one set_shader() or set_shader_auto() method call in your application, or you are using a postprocessing filter from CommonFilters.

Too Many Vertex Shader Instructions

Try to simplify your scene. Objects that are far away don’t need millions of vertices. Look at LODNode and FadeLODNode.

Too Many Fragment/Pixel Shader Instructions

An easy way to detect whether this is a bottleneck in your application, try resizing the window. If the framerate heavily varies with the window size or screen resolution, you’re most likely dealing with this problem.

If your frame rate strongly depends on the window or screen resolution, this may be a hint that your fragment shader has too many instructions. Another problem is if your depth complexity is too high. Try to look at your scene from different angles and positions. If your frame rate varies, then the overdraw from one specific view angle is to high.

Try to minimize the objects Panda3D needs to draw. Use set_far(), or fall back to a simpler fragment shaders for objects that are far away. If an object is far away from the viewer it doesn’t make sense to apply normal mapping. LODNode or FadeLODNode may help.

If your fragment shader is self-made, then try to offload some work to your vertex shader.

There is a simple method to test your scene. Replace your whole fragment shader with the following snippet (if using GLSL):

gl_FragColor = vec4(1.0, 0.0, 1.0, 0.0);

Or the following (if using Cg):

o_color = float4(1.0, 0.0, 1.0, 0.0);

If the frame rate doesn’t change, then it is the depth complexity. It if changes, it may be the depth complexity or the shader.