compile method

Set compile(
  1. Object3D scene,
  2. Camera camera, [
  3. Object3D? targetScene
])

Implementation

Set compile(Object3D scene, Camera camera, [Object3D? targetScene]) {
  targetScene ??= scene;

  currentRenderState = renderStates.get(targetScene);
  currentRenderState!.init(camera);
  renderStateStack.add(currentRenderState!);

  targetScene.traverseVisible((object) {
    if (object is Light && object.layers.test(camera.layers)) {
      currentRenderState!.pushLight(object);

      if (object.castShadow) {
        currentRenderState!.pushShadow(object);
      }
    }
  });

  if ( scene != targetScene ) {
    scene.traverseVisible((object){
      if (object is Light && object.layers.test( camera.layers ) ) {
        currentRenderState!.pushLight( object );
        if ( object.castShadow ) {
          currentRenderState!.pushShadow( object );
        }
      }
    });
  }
  currentRenderState!.setupLights();

  final materials = Set();

  scene.traverse((object) {
    if( ! ( object is Mesh || object is Points || object is Line || object is Sprite ) ) {
      return;
    }

    final material = object.material;

    if (material != null) {
      if (material is GroupMaterial) {
        for (int i = 0; i < material.children.length; i++) {
          final material2 = material.children[i];
          prepareMaterial(material2, targetScene, object);//getProgram(material2, scene, object);
          materials.add( material2 );
        }
      } else {
        prepareMaterial(material, targetScene, object);//getProgram(material, scene, object);
        materials.add( material );
      }
    }
  });

  currentRenderState = renderStateStack.removeLast();
  return materials;
}