c# – 在Windows应用商店应用中使用SharpDX加载纹理
发布时间:2020-12-16 00:03:07 所属栏目:百科 来源:网络整理
导读:我已经将我的C#游戏从OpenTK(OpenGL)转换为SharpDX(DirectX)并从Visual Studio 2010开始运行.我还在 Windows 8开发人员预览版中使用Metro中的Visual Studio 11运行它.然而,Metro构建仍然缺乏纹理,因此我的多边形现在只是着色.问题是Metro DLL中没有用于加载
我已经将我的C#游戏从OpenTK(OpenGL)转换为SharpDX(DirectX)并从Visual Studio 2010开始运行.我还在
Windows 8开发人员预览版中使用Metro中的Visual Studio 11运行它.然而,Metro构建仍然缺乏纹理,因此我的多边形现在只是着色.问题是Metro DLL中没有用于加载图像的方法. Windows Store App中的Texture2D类(继承自Resource类)中缺少这些方法:
SharpDX.Direct3D11.Resource.FromStream SharpDX.Direct3D11.Resource.FromFile SharpDX.Direct3D11.Resource.FromMemory 有谁知道这些最终是否会在Metro中实施?或者我可以使用另一种方法吗?请记住,在此之前我从来不知道关于DirectX或SharpDX的事情,所以我仍然非常湿透. 为SharpDX寻找任何类型的帮助或信息并不容易,这是一种耻辱,因为它似乎是使用C#在Metro中使用3D的一个很好的解决方案. 解决方法
我不确定我是否清楚地理解了你的问题,但在SharpDX示例中,我发现类’TextureLoader’有两种方法:’LoadBitmap’和’CreateTexture2DFromBitmap’.
?看,你可以使用这个函数从.bmp,.png,.jpg文件加载BitmapSource: public static BitmapSource LoadBitmap(ImagingFactory2 factory,string filename) { var bitmapDecoder = new SharpDX.WIC.BitmapDecoder( factory,filename,SharpDX.WIC.DecodeOptions.CacheOnDemand ); var result = new SharpDX.WIC.FormatConverter(factory); result.Initialize( bitmapDecoder.GetFrame(0),SharpDX.WIC.PixelFormat.Format32bppPRGBA,SharpDX.WIC.BitmapDitherType.None,null,0.0,SharpDX.WIC.BitmapPaletteType.Custom); return result; } 要从BitmapSource获取Texture2D,您可以使用: public static Texture2D CreateTexture2DFromBitmap(Device device,BitmapSource bitmapSource) { // Allocate DataStream to receive the WIC image pixels int stride = bitmapSource.Size.Width * 4; using (var buffer = new SharpDX.DataStream(bitmapSource.Size.Height * stride,true,true)) { // Copy the content of the WIC to the buffer bitmapSource.CopyPixels(stride,buffer); return new SharpDX.Direct3D11.Texture2D(device,new SharpDX.Direct3D11.Texture2DDescription() { Width = bitmapSource.Size.Width,Height = bitmapSource.Size.Height,ArraySize = 1,BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource,Usage = SharpDX.Direct3D11.ResourceUsage.Immutable,CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None,Format = SharpDX.DXGI.Format.R8G8B8A8_UNorm,MipLevels = 1,OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None,SampleDescription = new SharpDX.DXGI.SampleDescription(1,0),},new SharpDX.DataRectangle(buffer.DataPointer,stride)); } } 为了使它更容易,我创建了这个函数: public static Texture2D LoadFromFile(Device device,ImagingFactory2 factory,string fileName) { var bs = LoadBitmap(factory,fileName); var texture = CreateTexture2DFromBitmap(device,bs); return texture; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |