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); }