get method
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;
}