/* static */ TemporaryRef<CompositableHost> CompositableHost::Create(const TextureInfo& aTextureInfo) { RefPtr<CompositableHost> result; switch (aTextureInfo.mCompositableType) { case COMPOSITABLE_IMAGE: result = new ImageHost(aTextureInfo); break; case BUFFER_IMAGE_BUFFERED: result = new DeprecatedImageHostBuffered(aTextureInfo); break; case BUFFER_IMAGE_SINGLE: result = new DeprecatedImageHostSingle(aTextureInfo); break; case BUFFER_TILED: result = new TiledContentHost(aTextureInfo); break; case BUFFER_CONTENT: result = new ContentHostSingleBuffered(aTextureInfo); break; case BUFFER_CONTENT_DIRECT: result = new ContentHostDoubleBuffered(aTextureInfo); break; case BUFFER_CONTENT_INC: result = new ContentHostIncremental(aTextureInfo); break; default: MOZ_CRASH("Unknown CompositableType"); } if (result) { RefPtr<CompositableBackendSpecificData> data = CreateCompositableBackendSpecificDataOGL(); result->SetCompositableBackendSpecificData(data); } return result; }
/* static */ TemporaryRef<CompositableHost> CompositableHost::Create(const TextureInfo& aTextureInfo) { RefPtr<CompositableHost> result; switch (aTextureInfo.mCompositableType) { case BUFFER_BRIDGE: MOZ_CRASH("Cannot create an image bridge compositable this way"); break; case BUFFER_CONTENT_INC: result = new ContentHostIncremental(aTextureInfo); break; case BUFFER_TILED: case BUFFER_SIMPLE_TILED: result = new TiledContentHost(aTextureInfo); break; case COMPOSITABLE_IMAGE: result = new ImageHost(aTextureInfo); break; case COMPOSITABLE_CONTENT_SINGLE: result = new ContentHostSingleBuffered(aTextureInfo); break; case COMPOSITABLE_CONTENT_DOUBLE: result = new ContentHostDoubleBuffered(aTextureInfo); break; default: MOZ_CRASH("Unknown CompositableType"); } // We know that Tiled buffers don't use the compositable backend-specific // data, so don't bother creating it. if (result && aTextureInfo.mCompositableType != BUFFER_TILED) { RefPtr<CompositableBackendSpecificData> data = CreateCompositableBackendSpecificDataOGL(); result->SetCompositableBackendSpecificData(data); } return result; }