open world loading texture on different threads

I am making an open world game. I split the world into segments, 9 of which are always loaded, the player in the center. Move over a segment and I load the next apropriate segments before the player reaches them.

I wanted to do this loading on a seperate thread, but with LWJGL if I load a texture from another thread it cannot be displayed. (I don’t have the error but can recreate for it. I found this was the problem from an IRC log google gave me :smiley: )

Each segment may have different textures, and may share some with other segments. Too many texture exist in total to have every single one loaded onto one atlas. If I load everything in the same thread as the rendering is done, there would be a significant pause when you reach the end of a segment. Does anyone have any experience with open worlds and streaming in world data they can share? Specifically though this thread business is my problem.

You can load/decode images from any thread; but you will want to upload the bytes to the GPU on the same thread as the rest of your OpenGL calls.

SlickUtil will not be a great candidate for async texture loading. Instead, I’d suggest checking out out Matthias’ TextureLoader.

More importantly; how are you storing/rendering your maps? If you aren’t using tiled maps (or a similar technique) then you may want to consider it. Loading a single sprite sheet at startup (and streaming “map” data) is much more efficient than decoding many large images. If all of your tiles don’t fit in a few 1024x1024 textures (seems unlikely), you can organize the sprite sheets by “area” and load/unload them as necessary.

libgdx has an AssetManager class which can load textures and other stuff on a separate thread. The upload is of course done on the GL thread.

I am using tiles, currently for creating maps I have a map editor which just stores a texture per tile and I’m just binding each texture for each tile as its only a map editor for me. I think I’ll have a go with libgdx though, looks really nice. Thanks to you both

Does anyone know why my LWJGL window automatically resizes whenever the window is reselected after it has been minimized? Can’t find anything in the Display docs