Explorar el Código

SFXResource multi read

SFXResource was always creating a new file for each sound resource. Sometimes this would happen 3 times since the asset was creating a resource, then the profile, then the object that was using it.

Now if the sfxResource exists and we call openStream it returns the sfxFileStream linked to that file instead of just creating a new one.
marauder2k7 hace 1 año
padre
commit
352afa3f0f
Se han modificado 2 ficheros con 12 adiciones y 9 borrados
  1. 5 4
      Engine/source/sfx/sfxResource.cpp
  2. 7 5
      Engine/source/sfx/sfxResource.h

+ 5 - 4
Engine/source/sfx/sfxResource.cpp

@@ -64,10 +64,11 @@ Resource< SFXResource > SFXResource::load( String filename )
    return ResourceManager::get().load( filename );
    return ResourceManager::get().load( filename );
 }
 }
 
 
-SFXResource::SFXResource( String fileName, SFXStream *stream )
+SFXResource::SFXResource( String fileName, const ThreadSafeRef<SFXStream>& stream)
    : mFileName( fileName ),
    : mFileName( fileName ),
      mFormat( stream->getFormat() ),
      mFormat( stream->getFormat() ),
-     mDuration( stream->getDuration() )
+     mDuration( stream->getDuration() ),
+     mStream(stream)
 {
 {
 }
 }
 
 
@@ -76,7 +77,7 @@ bool SFXResource::exists( String filename )
    return SFXFileStream::exists( filename );
    return SFXFileStream::exists( filename );
 }
 }
 
 
-SFXStream* SFXResource::openStream()
+ThreadSafeRef<SFXStream> SFXResource::openStream()
 {
 {
-   return SFXFileStream::create( mFileName );
+   return mStream;
 }
 }

+ 7 - 5
Engine/source/sfx/sfxResource.h

@@ -30,9 +30,9 @@
    #include "core/resource.h"
    #include "core/resource.h"
 #endif
 #endif
 
 
-
-class SFXStream;
-
+#ifndef _SFXSTREAM_H_
+#include "sfx/sfxStream.h"
+#endif
 
 
 /// This is the base class for all sound file resources including
 /// This is the base class for all sound file resources including
 /// streamed sound files.  It acts much like an always in-core
 /// streamed sound files.  It acts much like an always in-core
@@ -68,10 +68,12 @@ class SFXResource
 
 
       /// The length of the sample in milliseconds.
       /// The length of the sample in milliseconds.
       U32 mDuration;
       U32 mDuration;
+
+      ThreadSafeRef<SFXStream> mStream;
       
       
       /// Construct a resource instance for the given file.  Format and duration
       /// Construct a resource instance for the given file.  Format and duration
       /// are read from the given stream.
       /// are read from the given stream.
-      SFXResource( String fileName, SFXStream* stream );
+      SFXResource( String fileName, const ThreadSafeRef<SFXStream>& stream);
       
       
    public:
    public:
 
 
@@ -103,7 +105,7 @@ class SFXResource
       const SFXFormat& getFormat() const { return mFormat; }
       const SFXFormat& getFormat() const { return mFormat; }
 
 
       /// Open a stream for reading the resource's sample data.
       /// Open a stream for reading the resource's sample data.
-      SFXStream* openStream();
+      ThreadSafeRef<SFXStream> openStream();
 
 
       // Internal.
       // Internal.
       struct _NewHelper;
       struct _NewHelper;