unsafe static VirtualFileStream GetStreamByOgreStream(void */*MyOgreVirtualDataStream*/ stream)
        {
            if (lastOpenedOgreStream == stream)
            {
                return(lastOpenedStream);
            }

            VirtualFileStream s = openedStreams[(IntPtr)stream];

            lastOpenedOgreStream = (MyOgreVirtualDataStream *)stream;
            lastOpenedStream     = s;
            return(s);
        }
        unsafe static void close(void */*MyOgreVirtualDataStream*/ stream)
        {
            VirtualFileStream s = GetStreamByOgreStream(stream);

            s.Dispose();

            bool removed = openedStreams.Remove((IntPtr)stream);

            Trace.Assert(removed);
            if (lastOpenedOgreStream == stream)
            {
                lastOpenedOgreStream = null;
                lastOpenedStream     = null;
            }

            //Log.Info( "totalTime: {0}, openings: {1}, calls: {2}", totalTime, openings, calls );
        }
        //static double totalTime;
        //static double startTime;
        //static int openings;
        //static int calls;

        //static void BeginCounter()
        //{
        //   //xx xx;
        //   startTime = RendererWorld.renderTimerManager.GetSystemTime();
        //   calls++;
        //}

        //static void EndCounter()
        //{
        //   double t = RendererWorld.renderTimerManager.GetSystemTime() - startTime;
        //   totalTime += t;
        //}

        unsafe static bool open(void */*MyOgreVirtualDataStream*/ stream, string fileName,
                                ref int streamSize, ref bool fileNotFound)
        {
            //!!!!!right?
            EngineThreading.CheckMainThread();

            //!!!!!посмотреть, что тут грузится. по сути не надо это ведь совсем. ну для шейдеров разве чтоли. тогда будет ли работать с мультипотоке?

            //openings++;
            //Log.Info( "OPEN: " + fileName );

            streamSize   = 0;
            fileNotFound = false;

            VirtualFileStream s;

            try
            {
                //watermark
                //if( fileName == WmImage.GetName() )
                //   s = WmImage.Open();
                //else
                s = VirtualFile.Open(fileName);
            }
            catch (FileNotFoundException)
            {
                fileNotFound = true;
                return(false);
            }
            catch
            {
                return(false);
            }
            streamSize = (int)s.Length;

            openedStreams.Add((IntPtr)stream, s);
            lastOpenedOgreStream = (MyOgreVirtualDataStream *)stream;
            lastOpenedStream     = s;

            return(true);
        }