This last bit is taken from C# game programming book so I guess it should work, I only made it static as well as the dictionary.

At the end of the LoadTexture method, the returned texture is added to the content list.

But if for instance I have three texture a.png, b.png and c.png, whether I try to access a, b or c I only get c and no error. I try to debug and I can see the different names but they all seem to point to the same texture in memory in the end. And I know it only takes the last one as I tried to change the name order and realized that if a becomes d then I get the new d.

Also, the dictionary has Count equals to 3 so it is all there, only teh texture is wrong.

Does ilutGLBindTexImage really return the id? Have you tried debugging the values it gives to your textures? At least the method's name sounds like it would just bind the texture, and probably returns an error code or something.