Below here is c# code, the library I'm using is OpenTK. As far as I can tell from various tests is that the VBO data is infact correct.
But I'm not sure about the VAO code. I've referenced the VBO construction further down.

As you can see from the above image the colours are correct (the clouds seem to have the correct alpha, which is the fourth element of the colour). I've had to set the Scale to 20.0 because otherwise you don't see anything, which I believe means the Geometry shader thinks inScale is 0, even though it's somewhere between 20 and 100 according to the c# debugger...

First, you meticulously provide a layout(location) for every input and output... except for `Position`. Why? Is there something wrong with assigning it?

Second, you then meticulously assign an attribute index to inputs... to the geometry shader. The geometry shader doesn't have attributes. So you're not doing anything productive there. You cannot pass attributes directly to the GS; the GS gets its inputs from the vertex shader.

If you had linked your program together, you'd have gotten a linker error because of the third problem: `inScale` is never defined in the vertex shader. The VS never defines an output variable for location 1, so the GS gets undefined values in location 1. That's how it works. There's no magic passing of values from attributes directly to the GS. If the GS needs data, the VS must feed it data.

wow, that's a massive eye-opener, here I was thinking the geometry shader came first. I didn't assign 'Position' because it was the only one that consistently worked haha. Thanks I understand it a lot better now. I wonder why it didn't error though :/ maybe my drivers are a bit too friendly if you know what I mean.

P.S. I Love you <3 . You're a life saver
P.S.S I'm sorry about the confusing code