# HG changeset patch # User David Reepmeyer # Date 1516124750 21600 # Branch v0-8 # Node ID d8df60aa4ec9390457ae9beeef991bf2417311cc # Parent 719f80b343e028f51f32ae9379ef77a96bc2bb3d OgreTexture loading proper pixel format when loading image file diff --git a/cegui/include/CEGUI/RendererModules/Ogre/Texture.h b/cegui/include/CEGUI/RendererModules/Ogre/Texture.h --- a/cegui/include/CEGUI/RendererModules/Ogre/Texture.h +++ b/cegui/include/CEGUI/RendererModules/Ogre/Texture.h @@ -88,7 +88,7 @@ //! destructor. virtual ~OgreTexture(); //! construct an empty texture - void createEmptyOgreTexture(); + void createEmptyOgreTexture(PixelFormat pixel_format); //! release the underlying Ogre texture. void freeOgreTexture(); //! updates cached scale value used to map pixels to texture co-ords. diff --git a/cegui/src/RendererModules/Ogre/Texture.cpp b/cegui/src/RendererModules/Ogre/Texture.cpp --- a/cegui/src/RendererModules/Ogre/Texture.cpp +++ b/cegui/src/RendererModules/Ogre/Texture.cpp @@ -79,7 +79,7 @@ d_texelScaling(0, 0), d_name(name) { - createEmptyOgreTexture(); + createEmptyOgreTexture(Texture::PF_RGBA); } //----------------------------------------------------------------------------// @@ -91,7 +91,6 @@ d_texelScaling(0, 0), d_name(name) { - createEmptyOgreTexture(); loadFromFile(filename, resourceGroup); } @@ -103,7 +102,7 @@ d_texelScaling(0, 0), d_name(name) { - createEmptyOgreTexture(); + createEmptyOgreTexture(Texture::PF_RGBA); // throw exception if no texture was able to be created if (d_texture.isNull()) @@ -214,6 +213,7 @@ const Ogre::PixelBox* pixelBox = new Ogre::PixelBox(buffer_size.d_width, buffer_size.d_height, 1, toOgrePixelFormat(pixel_format), bufferCopy); + createEmptyOgreTexture(pixel_format); d_texture->freeInternalResources(); d_texture->setWidth(buffer_size.d_width); d_texture->setHeight(buffer_size.d_height); @@ -242,7 +242,7 @@ // than allow that to dictate poor choices in our own APIs, we choose to // address the issue as close to the source of the problem as possible. Ogre::PixelBox pb(area.getWidth(), area.getHeight(), - 1, Ogre::PF_A8R8G8B8, const_cast(sourceData)); + 1, d_texture->getFormat(), const_cast(sourceData)); Ogre::Image::Box box(area.left(), area.top(), area.right(), area.bottom()); d_texture->getBuffer()->blitFromMemory(pb, box); } @@ -254,7 +254,7 @@ return; Ogre::PixelBox pb(d_size.d_width, d_size.d_height, - 1, Ogre::PF_A8R8G8B8, targetData); + 1, d_texture->getFormat(), targetData); d_texture->getBuffer()->blitToMemory(pb); } @@ -400,13 +400,13 @@ } //----------------------------------------------------------------------------// -void OgreTexture::createEmptyOgreTexture() +void OgreTexture::createEmptyOgreTexture(Ogre::PixelFormat pixel_format) { // try to create a Ogre::Texture with given dimensions d_texture = Ogre::TextureManager::getSingleton().createManual( getUniqueName(), "General", Ogre::TEX_TYPE_2D, 1, 1, 0, - Ogre::PF_A8B8G8R8); + toOgrePixelFormat(pixel_format)); }