Issue 1:
Hey, Three team. I'm reporting a bug happening on Chromium-based browsers preventing Custom Fonts(TTF converted to JSON with https://gero3.github.io/facetype.js/) to be displayed and throwing the following error:

THREE.Object3D.add: object not an instance of THREE.Object3D

This does not occur on Firefox. I have not yet found anything about this one in the issues, so I'm reporting(apologies if duplicate).

A clear and concise description of what the bug is. Before submitting, please remove unnecessary sections.

To Reproduce

Steps to reproduce the behavior:

Download any TTF online and convert it using this tool

Load it using the code below

See error on console

Code

The code I am using is the following:

const loader = new THREE.FontLoader()
loader.load('../assets/fonts/Style Script_Regular.json', function (font) {
// About Me Descr Text 2
let buildAboutMeDescrTextWall2;
(buildAboutMeDescrTextWall2 = function (){
const mainColor = 0xF3B3A6;
const matDark = new THREE.LineBasicMaterial( {
color: mainColor,
side: THREE.DoubleSide,
} );
const mainMessage = "text"
const mainTextgeometry = new THREE.TextGeometry(mainMessage, {
font: font,
size: 30,
height: 5,
});
mainTextgeometry.computeBoundingBox();
const xMid = - 0.5 * ( mainTextgeometry.boundingBox.max.x - mainTextgeometry.boundingBox.min.x );
mainTextgeometry.translate( xMid, 0, 10 );
window.aboutMeDescrTextWall2 = new THREE.Mesh( mainTextgeometry, matDark );
aboutMeDescrTextWall2.position.set(-830, 1450, 1880);
aboutMeDescrTextWall2.rotation.y = Math.PI/2 +1;
aboutMeDescrTextWall2.rotation.x = 0;
aboutMeDescrTextWall2.rotation.z = 0;
})();
})

// some code

scene.add(window.aboutMeDescrTextWall2)

Expected behavior

The text should show as happens on Firefox

Platform:

The issue occurs on both Ubuntu-based latest popOS and on macOS High Sierra. The browsers with this issue are Safari, Chrome and Brave

Issue 2:
This is related to my MeshLineAlt (note, by sheer accident/oversight, it was named exactly the same as Spite's, which was pointed out to me before).

In my implementation, I pre-set the _bufferGeometry with a custom BufferGeometry, depending on the THREE.WebGLGeometries get() function behavior of constructing checking for a _bufferGeometry on a THREE.Geometry before constructing a default one to be used.

if ( geometry._bufferGeometry === undefined ) {

geometry._bufferGeometry = new THREE.BufferGeometry().setFromObject( object );
}
buffergeometry = geometry._bufferGeometry;

However, I think it may be pretty fragile, considering that I'm depending on something that's not part of the API.

Therefore, I want to ask if it's logical/possible to either.

Have THREE.Geometry contain a method like "getBufferGeometry" that returns a THREE.BufferGeometry (or objects derived from it). So the call becomes like...

geometry._bufferGeometry = geometry.getBufferGeometry().setFromObject( object );

Have objects (THREE.Mesh related, not THREE.Object3D) contains a method to return the getBufferGeometry. So the call becomes...

geometry._bufferGeometry = object.getBufferGeometry().setFromObject( object );

Personally, I think the second one is potentially more flexible, as it make more logically sense as geometry itself should not care how the end result is achieved, but the object itself will have the ability, by return a derived THREE.BufferGeometry, to retransform the THREE.Geometry object into ones it can use.