TemporaryRef<TextureHost> CreateBackendIndependentTextureHost(uint64_t aID, const SurfaceDescriptor& aDesc, ISurfaceAllocator* aDeallocator, TextureFlags aFlags) { RefPtr<TextureHost> result; switch (aDesc.type()) { case SurfaceDescriptor::TSurfaceDescriptorShmem: { const SurfaceDescriptorShmem& descriptor = aDesc.get_SurfaceDescriptorShmem(); result = new ShmemTextureHost(aID, descriptor.data(), descriptor.format(), aDeallocator, aFlags); break; } case SurfaceDescriptor::TSurfaceDescriptorMemory: { const SurfaceDescriptorMemory& descriptor = aDesc.get_SurfaceDescriptorMemory(); result = new MemoryTextureHost(aID, reinterpret_cast<uint8_t*>(descriptor.data()), descriptor.format(), aFlags); break; } default: { NS_WARNING("No backend independent TextureHost for this descriptor type"); } } return result; }
already_AddRefed<TextureHost> CreateBackendIndependentTextureHost(const SurfaceDescriptor& aDesc, ISurfaceAllocator* aDeallocator, TextureFlags aFlags) { RefPtr<TextureHost> result; switch (aDesc.type()) { case SurfaceDescriptor::TSurfaceDescriptorShmem: { const SurfaceDescriptorShmem& descriptor = aDesc.get_SurfaceDescriptorShmem(); result = new ShmemTextureHost(descriptor.data(), descriptor.format(), aDeallocator, aFlags); break; } case SurfaceDescriptor::TSurfaceDescriptorMemory: { const SurfaceDescriptorMemory& descriptor = aDesc.get_SurfaceDescriptorMemory(); result = new MemoryTextureHost(reinterpret_cast<uint8_t*>(descriptor.data()), descriptor.format(), aFlags); break; } #ifdef XP_WIN case SurfaceDescriptor::TSurfaceDescriptorDIB: { result = new DIBTextureHost(aFlags, aDesc); break; } case SurfaceDescriptor::TSurfaceDescriptorFileMapping: { result = new TextureHostFileMapping(aFlags, aDesc); break; } #endif default: { NS_WARNING("No backend independent TextureHost for this descriptor type"); } } return result.forget(); }