get method

Texture? get(
  1. Texture? texture
)

Implementation

Texture? get(Texture? texture) {
  if (texture != null) {
    final mapping = texture.mapping;

    bool isEquirectMap = (mapping == EquirectangularReflectionMapping || mapping == EquirectangularRefractionMapping);
    bool isCubeMap = (mapping == CubeReflectionMapping || mapping == CubeRefractionMapping);

    // equirect/cube map to cubeUV conversion
    if (isEquirectMap || isCubeMap) {
      RenderTarget? renderTarget = cubeUVmaps.get( texture );
				final currentPMREMVersion = renderTarget != null ? renderTarget.texture.pmremVersion : 0;

      if (texture.isRenderTargetTexture && texture.pmremVersion != currentPMREMVersion) {
					if ( pmremGenerator == null ) pmremGenerator = new PMREMGenerator( renderer );

					renderTarget = isEquirectMap ? pmremGenerator?.fromEquirectangular( texture, renderTarget ) : pmremGenerator?.fromCubemap( texture, renderTarget );
					renderTarget?.texture.pmremVersion = texture.pmremVersion;

					cubeUVmaps.set( texture, renderTarget );

					return renderTarget?.texture;
      }
      else {
        if (renderTarget != null) {
          return renderTarget.texture;
        }
        else {
          final image = texture.image;

          if ((isEquirectMap && image != null && image.height > 0) ||
              (isCubeMap && image != null && isCubeTextureComplete(image))) {
            pmremGenerator ??= PMREMGenerator(renderer);

            renderTarget = isEquirectMap ? pmremGenerator!.fromEquirectangular(texture) : pmremGenerator!.fromCubemap(texture);
            cubeUVmaps.set(texture, renderTarget);

            texture.addEventListener('dispose', onTextureDispose);

            return renderTarget.texture;
          }
          else {
            // image not yet ready. try the conversion next frame

            return null;
          }
        }
      }
    }
  }

  return texture;
}