I'm trying to implement a custom ContentPipeline extension that writes a Surface object with a Texture2D member.

My input file is an xml with fields for all of my Surfaces and their members. In the xml, my Surface's Texture2D is represented by a path to an image file. In my ContentProcessor, I want to load the Texture2D from the image file path, then write that texture data straight into my object's xnb with the rest of a Surface's members.

Right now, I've got the ContentTypeWriter writing a different ("CompiledSurface") object with a Texture2DContent member. The Texture2DContent is created in the ContentProcessor using BuildAndLoadAsset(string path).

My importer, processor, and writer all seem to be doing their jobs. But in my ContentTypeReader, I can't figure out how to convert the Texture2DContent back to a Texture2D in order to create my runtime object.

Any help is much appreciated.

class Surface
    protected Rectangle bounding_box;
    protected Texture2D texture;

class CompiledSurface
    public Texture2DContent texture;
    public int x;
    public int y;
  • \$\begingroup\$ It would be helpful if you posted the code of the content writer. \$\endgroup\$ Commented Jun 2, 2017 at 4:18

1 Answer 1


I've got it! An extremely simplified example:

Loaded each Texture2D in custom ContentProcessor like this...

// Create external ref to texture source file (.bmp, .png, etc)
ExternalReference<Texture2DContent> tex_ref = new ExternalReference<Texture2DContent>(path_to_image_file);

// Build & Load texture
Texture2DContent texture_content = context.BuildAndLoadAsset<Texture2DContent, Texture2DContent>(tex_ref, "TextureProcessor");

Then serialized Texture2DContent in custom ContentTypeWriter like this...

// Write as Texture2DContent

Conversion happens during de-serialization, in custom ContentTypeReader...

// But read back as Texture2D
Texture2D texture = input.ReadObject<Texture2D>();

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .