private Texture2D(GraphicsDevice graphicsDevice, Stream stream) { byte[] bytes = new byte[stream.Length]; stream.Read(bytes, 0, (int)stream.Length); _texture2D = new PssTexture2D(bytes, false); width = _texture2D.Width; height = _texture2D.Height; this.format = SurfaceFormat.Color; //FIXME HACK this.levelCount = 1; }
public Texture(string path, int quality, bool repeat, bool flipY) { #if OPENTK texId = LoadTexture(VFS.GenerateRealPath(path), quality, repeat, flipY); #elif PSM #warning TODO : Implement FlipY tex = new Tex(VFS.GenerateRealPath(path), false); tex.SetWrap(Sce.PlayStation.Core.Graphics.TextureWrapMode.Repeat); if(quality == 0)tex.SetFilter(Sce.PlayStation.Core.Graphics.TextureFilterMode.Linear); else if(quality == 1)tex.SetFilter(Sce.PlayStation.Core.Graphics.TextureFilterMode.Nearest); #endif }
internal Texture2D(GraphicsDevice graphicsDevice, int width, int height, bool mipmap, SurfaceFormat format, bool renderTarget) { if (graphicsDevice == null) throw new ArgumentNullException("Graphics Device Cannot Be Null"); this.GraphicsDevice = graphicsDevice; this.width = width; this.height = height; this.format = format; this.levelCount = 1; if (mipmap) { int size = Math.Max(this.width, this.height); while (size > 1) { size = size / 2; this.levelCount++; } } #if DIRECTX // TODO: Move this to SetData() if we want to make Immutable textures! var desc = new SharpDX.Direct3D11.Texture2DDescription(); desc.Width = width; desc.Height = height; desc.MipLevels = levelCount; desc.ArraySize = 1; desc.Format = SharpDXHelper.ToFormat(format); desc.BindFlags = SharpDX.Direct3D11.BindFlags.ShaderResource; desc.CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.None; desc.SampleDescription.Count = 1; desc.SampleDescription.Quality = 0; desc.Usage = SharpDX.Direct3D11.ResourceUsage.Default; desc.OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None; if (renderTarget) desc.BindFlags |= SharpDX.Direct3D11.BindFlags.RenderTarget; _texture = new SharpDX.Direct3D11.Texture2D(graphicsDevice._d3dDevice, desc); #elif PSM _texture2D = new Sce.PlayStation.Core.Graphics.Texture2D(width, height, mipmap, PSSHelper.ToFormat(format)); #else this.glTarget = TextureTarget.Texture2D; Threading.BlockOnUIThread(() => { // Store the current bound texture. var prevTexture = GraphicsExtensions.GetBoundTexture2D(); GenerateGLTextureIfRequired(); format.GetGLFormat(out glInternalFormat, out glFormat, out glType); if (glFormat == (GLPixelFormat)All.CompressedTextureFormats) { var imageSize = 0; switch (format) { case SurfaceFormat.RgbPvrtc2Bpp: case SurfaceFormat.RgbaPvrtc2Bpp: imageSize = (Math.Max(this.width, 8) * Math.Max(this.height, 8) * 2 + 7) / 8; break; case SurfaceFormat.RgbPvrtc4Bpp: case SurfaceFormat.RgbaPvrtc4Bpp: imageSize = (Math.Max(this.width, 16) * Math.Max(this.height, 8) * 4 + 7) / 8; break; case SurfaceFormat.Dxt1: imageSize = ((this.width + 3) / 4) * ((this.height + 3) / 4) * 8 * 1; break; case SurfaceFormat.Dxt3: case SurfaceFormat.Dxt5: imageSize = ((this.width + 3) / 4) * ((this.height + 3) / 4) * 16 * 1; break; default: throw new NotImplementedException(); } GL.CompressedTexImage2D(TextureTarget.Texture2D, 0, glInternalFormat, this.width, this.height, 0, imageSize, IntPtr.Zero); GraphicsExtensions.CheckGLError(); } else { GL.TexImage2D(TextureTarget.Texture2D, 0, #if IOS || ANDROID (int)glInternalFormat, #else glInternalFormat, #endif this.width, this.height, 0, glFormat, glType, IntPtr.Zero); GraphicsExtensions.CheckGLError(); } // Restore the bound texture. GL.BindTexture(TextureTarget.Texture2D, prevTexture); GraphicsExtensions.CheckGLError(); }); #endif }