Beispiel #1
0
        public override IntPtr LoadTexture(RuntimeConnector_TextureContext context)
        {
            SDL.MTS_SDL_TextureDescr texdescr = new SDL.MTS_SDL_TextureDescr();

            //we should have made sure this is legal when baking
            Functions.TryGetTextureFormat(context.ImageBuffer.Format, out texdescr.format);

            texdescr.width  = context.ImageBuffer.Width;
            texdescr.height = context.ImageBuffer.Height;
            texdescr.levels = 1;

            //var rawData = context.Reader.ReadBytes(context.ImageInfo);
            var rawData = context.ImageBuffer.Data;

            //SDL.MTS_SDL_Texture tex;
            //fixed (byte* pTexbuf = rawData)
            //{
            //	texdescr.pixels = new IntPtr(pTexbuf);
            //	tex = SDL.Functions.mts_sdl_Texture_Create(ref texdescr);
            //}
            //return tex.ptr;

            //quick workaround for brute bug
            fixed(byte *pTexbuf = rawData)
            {
                texdescr.pixels = new IntPtr(pTexbuf);
                var tex = SDL.Functions.mts_sdl_Texture_Create(ref texdescr);

                return(tex.ptr);
            }
        }
Beispiel #2
0
        void PrivateInterfaces.ITextureLoaders.LoadSolidColor(int width, int height, uint color)
        {
            info        = new ImageInfo();
            info.Width  = width;
            info.Height = height;

            int nPixels = width * height;

            //well, this was a nice experiment, but it's hard to really do this generally
            //uhhh it's possible I could only support a certain texture format, perhaps, that I know how to synthesize the input for (i.e. RGBA8)

            MemoryStream ms = new MemoryStream(width * height * 4);
            BinaryWriter bw = new BinaryWriter(ms);

            for (int i = 0; i < nPixels; i++)
            {
                bw.Write(color);
            }
            bw.Flush();
            ms.Position = 0;

            var resLoaderContext = new RuntimeConnector_TextureContext();

            resLoaderContext.ImageBuffer = new ImageBuffer();
            //resLoaderContext.Reader = brRaw; //meaningless now, should be restored later
            resLoaderContext.ImageBuffer.Data   = ms.GetBuffer();
            resLoaderContext.ImageBuffer.Width  = info.Width;
            resLoaderContext.ImageBuffer.Height = info.Height;
            resLoaderContext.ImageBuffer.Format = TextureFormat.RGBA8;
            mHandle = this.Manager.RuntimeConnector.LoadTexture(resLoaderContext);
        }
Beispiel #3
0
        bool IBakedLoader.LoadBaked(PipelineLoadBakedContext context)
        {
            Console.WriteLine("Texture.LoadBaked: " + context.ContentPath);

            var br = context.BakedReader;

            info        = new ImageInfo();
            info.Width  = br.ReadInt32();
            info.Height = br.ReadInt32();
            TextureFormat format = (TextureFormat)br.ReadInt32();

            int rawSize  = br.ReadInt32();
            int comprLen = br.ReadInt32();

            byte[] temp   = br.ReadBytes(comprLen);
            byte[] rawbuf = new byte[rawSize];

            //apply standard uncompression, for now
            fixed(byte *pOutBuf = rawbuf)
            fixed(byte *pInBuf = temp)
            {
                MTS.Engine.Native.zlib_uncompress(pOutBuf, pInBuf, rawSize, comprLen);
            }

            var ms               = new MemoryStream(rawbuf);
            var brRaw            = new BinaryReader(ms);
            var resLoaderContext = new RuntimeConnector_TextureContext();

            resLoaderContext.ImageBuffer = new ImageBuffer();
            //resLoaderContext.Reader = brRaw; //meaningless now, should be restored later
            resLoaderContext.ImageBuffer.Data   = rawbuf;
            resLoaderContext.ImageBuffer.Width  = info.Width;
            resLoaderContext.ImageBuffer.Height = info.Height;
            resLoaderContext.ImageBuffer.Format = format;
            mHandle     = this.Manager.RuntimeConnector.LoadTexture(resLoaderContext);
            mOwnsHandle = true;
            return(true);
        }