Jump to content
  • Advertisement
Sign in to follow this  
footnick

Creating MipMaps in code with XNA

This topic is 2466 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

We have an XNA app targetting .NET (WPF) and Silverlight in which we create textures on the fly and would like to know how to create associated mip maps.

We've tried two approaches the first using RenderTarget2D as follows:

[indent=1][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]RenderTarget2D[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] mipMappedTexture = [/font][/font]

[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"] new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]RenderTarget2D[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](graphicsDevice, width, height, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]true[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"], [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]SurfaceFormat[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].Color, [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]DepthFormat[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].None);[/font][/font]

[indent=1][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]SpriteBatch[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] sb = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]SpriteBatch[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"]([/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]gcXna[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].GraphicsDevice);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]SetRenderTarget(mipMappedTexture);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"][font="Consolas"][size="2"]graphicsDevice[/font].Clear([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](0f, 0f, 0f, 0f));[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]sb.Begin();[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]sb.Draw(newTexture, [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Vector2[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].Zero, [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].White);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]sb.End();[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"][font="Consolas"][size="2"]graphicsDevice.[/font].SetRenderTarget([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]null[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"]);[/font][/font]


This works fine in a simple test app and works in our main app as far as the mip mapped textures are concerned but causes other rendering errors with some objects missing or drawn in the wrong zorder. In the WPF app we use a RenderTarget2D for rendering the actual models, and in Silverlight all the rendering including mip map creation has to be done within the DrawingSurface Draw event. In both cases we use the BasicEffect shader and we get the same errors in both.

We call Clear and reset Matrices etc. Is there anything we should be doing to reset the device in some way between creating the mipmaps and rendering the actual scene.

The second approach attempts to create and apply the mipmap levels directly as follows:


[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] width = parentBitmap.PixelWidth;[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] height = parentBitmap.PixelHeight;[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] bytesPerPixel = 4;[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] stride = width * bytesPerPixel;[/font][/font]

[indent=1][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][] pixels = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][width * height];[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]var[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] pixelBuffer = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][height * stride];[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]parentBitmap.CopyPixels(pixelBuffer, stride, 0);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]?[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] y = 0; y < height; y++)[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=2][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] x = 0; x < width; x++)[/font][/font]
[indent=2][font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] offset = (y * stride + x * bytesPerPixel);[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] pixel = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])pixelBuffer[offset + 2], ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])pixelBuffer[offset + 1], ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])pixelBuffer[offset], ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])pixelBuffer[offset + 3]);[/font][/font]
[indent=3][font="Consolas"][size="2"][font="Consolas"][size="2"]pixels[x + (y * width)] = pixel;[/font][/font]
[indent=2][font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]?[/font][/font]

[indent=1][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Texture2D[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] newTexture = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Texture2D[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"]([/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]gcXna[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].GraphicsDevice, width, height, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]true[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"], [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]SurfaceFormat[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"].Color);[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]newTexture.SetData<[/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"]>(0, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Rectangle[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](0, 0, width, height), pixels, 0, width * height);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]AddMipMapLevels(newTexture, pixels, width/2, 1, 1);[/font][/font]



[font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]public[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]static[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]void[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] AddMipMapLevels([/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Texture2D[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] texture, [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][] pixels, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] size,[/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] minSize, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] nextLevel )[/font][/font]
[font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]if[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] (size < minSize)[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=2][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]return[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"];[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]

[indent=1][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][] newPixels = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"][size * size];[/font][/font]
[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] prevSize = size * 2;[/font][/font]

[indent=1][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] y = 0; y < size; y++)[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=2][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]for[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] x = 0; x < size; x++)[/font][/font]
[indent=2][font="Consolas"][size="2"][font="Consolas"][size="2"]{[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] offset1 = y * 2 * prevSize + x * 2 ;[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]int[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] offset2 = (y * 2 + 1) * prevSize + x * 2;[/font][/font]

[indent=3][font="Consolas"][size="2"][color="#008000"][font="Consolas"][size="2"][color="#008000"][font="Consolas"][size="2"][color="#008000"]// For each channel get the average of 4 pixels from the original pixel array[/font][/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] red= ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])((pixels[offset1].R +pixels[offset1 + 1].R + pixels[offset2 ].R +pixels[offset2 + 1].R) / 4);[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] green= ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])((pixels[offset1].G +pixels[offset1 + 1].G + pixels[offset2 ].G +pixels[offset2 + 1].G) / 4);[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] blue= ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])((pixels[offset1].B + pixels[offset1 + 1].B + pixels[offset2 ].B +pixels[offset2 + 1].B) / 4);[/font][/font]
[indent=3][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] alpha= ([/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]byte[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"])((pixels[offset1].A +pixels[offset1 + 1].A + pixels[offset2 ].A +pixels[offset2 + 1].A) / 4);[/font][/font]

[indent=3][font="Consolas"][size="2"][font="Consolas"][size="2"]newPixels[y * size + x] = [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](red, green, blue, alpha);[/font][/font]
[indent=2][font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]?[/font][/font]
[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]texture.SetData<[/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Color[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"]>(nextLevel, [/font][/font][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"][font="Consolas"][size="2"][color="#0000ff"]new[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"] [/font][/font][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"][font="Consolas"][size="2"][color="#2b91af"]Rectangle[/font][/font][/font][font="Consolas"][size="2"][font="Consolas"][size="2"](0, 0, size, size), newPixels, 0, size * size);[/font][/font]

[indent=1][font="Consolas"][size="2"][font="Consolas"][size="2"]AddMipMapLevels(texture, newPixels, size/2, nextLevel++, minSize);[/font][/font]
[font="Consolas"][size="2"][font="Consolas"][size="2"]?[/font][/font]
[font="Consolas"][size="2"][font="Consolas"][size="2"]}[/font][/font]


If we set mipmap to false in the Texture2D constructor and only add the top level pixels the texture works fine albeit without mipmapping, but if we set mipmap to true then we get no texture even when we add the mimmap levels.

Is this the correct approach for creating mipmaps code and if so is there anything else we have to set to get the texture to render.

Thanks

Nick

Share this post


Link to post
Share on other sites
Advertisement
Sign in to follow this  

×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!