Dynamically Load Entire Folder Of Textures At One Time

Started by
3 comments, last by laztrezort 11 years, 8 months ago
I have recently started playing around with XNA and have run into a problem.
In all the tutorials / help guides I have read, they tell you to "hard code" every texture / image your going to use.

My project has hundreds of textures, which change all the time - Is there a way to load an entire file at once, and can you provide a working example of how to do this in XNA 4.0 ?

Thanks.

I cannot remember the books I've read any more than the meals I have eaten; even so, they have made me.

~ Ralph Waldo Emerson

Advertisement
The ContentManager in XNA is the main route from disk contents to game memory for every asset you want to use. There are a couple options:

1) Write your own importer for the ContentManager that takes a folder name and processes all the internal contents
2) Don't mess with the ContentManager classes, but write utility classes/methods that do dynamic loading/unloading of content and simplify the work for you a bit (these will still have to call ContentManager functions at some level)

The XNA Framework provides high-level but simple and straightforward utilities. Tutorials are only going to target the basic cases for these utilities to show how they're used. It's the difference between "how to swing a hammer" and "how to use a hammer to build a victorian-era gazebo". It's up to the programmer to use those basic tools to build something more complex and fitting to their particular requirements. You could potentially google around for open source XNA projects and see how they set up any kind of abstract asset manager pipeline. I would expect asset I/O to be coupled with game state management (for example, on level switching).

When you say "hundreds of textures which change all the time" are you referring to changing the individual textures' contents, or swapping out textures currently in use?

Edit: Spoke from experience, looks like there are some utility methods that let you deal with filestreams directly, see later post.

Hazard Pay :: FPS/RTS in SharpDX (gathering dust, retained for... historical purposes)
DeviantArt :: Because right-brain needs love too (also pretty neglected these days)

I am referring to a 2D level editor, that accepts custom .png textures from the user.
As it is written right now, each user has 6 private resource files ( unlimited textures in each one), and can have unlimited shared resource files ( downloaded from server ).

ContentManager and pipeline searches in Google isn't turning up anything useful as far as dynamic loading / unloading

I cannot remember the books I've read any more than the meals I have eaten; even so, they have made me.

~ Ralph Waldo Emerson

Found a link to someone suggesting Texture2D.FromStream, that would let you avoid the need for knowing the asset's "friendly name" at compile time

Note: This won't work on the XBox.

Hazard Pay :: FPS/RTS in SharpDX (gathering dust, retained for... historical purposes)
DeviantArt :: Because right-brain needs love too (also pretty neglected these days)

Note that when using Texture2D.FromStream, you will have to handle compression, mipmaps and/or premultiplied alpha yourself, see here: http://forums.create.msdn.com/forums/p/61813/380463.aspx

This topic is closed to new replies.

Advertisement