I am trying to load an png data with MTKTextureLoader newTextureWithData,but the result shows wrong at the alpha area.
here is the code, i have an image url, after it download successful, i try to use the data or UIImagePNGRepresentation(image), they all show wrong.
<code>[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
UIImage *tempImg = [UIImage imageWithData:data];
CGImageRef cgRef = tempImg.CGImage;
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
id<MTLTexture> temp1 = [loader newTextureWithData:data options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
NSData *tempData = UIImagePNGRepresentation(tempImg);
id<MTLTexture> temp2 = [loader newTextureWithData:tempData options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
id<MTLTexture> temp3 = [loader newTextureWithCGImage:cgRef options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
}] resume];
</code>
<code>[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
UIImage *tempImg = [UIImage imageWithData:data];
CGImageRef cgRef = tempImg.CGImage;
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
id<MTLTexture> temp1 = [loader newTextureWithData:data options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
NSData *tempData = UIImagePNGRepresentation(tempImg);
id<MTLTexture> temp2 = [loader newTextureWithData:tempData options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
id<MTLTexture> temp3 = [loader newTextureWithCGImage:cgRef options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
}] resume];
</code>
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
UIImage *tempImg = [UIImage imageWithData:data];
CGImageRef cgRef = tempImg.CGImage;
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
id<MTLTexture> temp1 = [loader newTextureWithData:data options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
NSData *tempData = UIImagePNGRepresentation(tempImg);
id<MTLTexture> temp2 = [loader newTextureWithData:tempData options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
id<MTLTexture> temp3 = [loader newTextureWithCGImage:cgRef options:@{MTKTextureLoaderOptionSRGB: @(NO), MTKTextureLoaderOptionTextureUsage: @(MTLTextureUsageShaderRead), MTKTextureLoaderOptionTextureCPUCacheMode: @(MTLCPUCacheModeWriteCombined)} error:nil];
}] resume];
origin. image
wrong image after MTKTextureLoader
New contributor
ynot16 is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.
<code>[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"]
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"Download failed: %@", error);
return;
}
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
// Load texture from raw data
NSError *textureError = nil;
id<MTLTexture> textureFromData = [loader newTextureWithData:data
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from data: %@", textureError);
}
// Convert NSData to UIImage and back, then load
UIImage *tempImage = [UIImage imageWithData:data];
NSData *pngData = UIImagePNGRepresentation(tempImage);
id<MTLTexture> textureFromUIImage = [loader newTextureWithData:pngData
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from UIImage PNG: %@", textureError);
}
// Load texture using CGImage
CGImageRef cgImage = tempImage.CGImage;
id<MTLTexture> textureFromCGImage = [loader newTextureWithCGImage:cgImage
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from CGImage: %@", textureError);
}
}] resume];
</code>
<code>[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"]
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"Download failed: %@", error);
return;
}
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
// Load texture from raw data
NSError *textureError = nil;
id<MTLTexture> textureFromData = [loader newTextureWithData:data
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from data: %@", textureError);
}
// Convert NSData to UIImage and back, then load
UIImage *tempImage = [UIImage imageWithData:data];
NSData *pngData = UIImagePNGRepresentation(tempImage);
id<MTLTexture> textureFromUIImage = [loader newTextureWithData:pngData
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from UIImage PNG: %@", textureError);
}
// Load texture using CGImage
CGImageRef cgImage = tempImage.CGImage;
id<MTLTexture> textureFromCGImage = [loader newTextureWithCGImage:cgImage
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from CGImage: %@", textureError);
}
}] resume];
</code>
[[[NSURLSession sharedSession] dataTaskWithURL:[NSURL URLWithString:@"http://lxcode.bs2cdn.yy.com/da3d9ae1-93a0-4149-9977-babee7ad2fb8.png"]
completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) {
NSLog(@"Download failed: %@", error);
return;
}
MTKTextureLoader *loader = [[MTKTextureLoader alloc] initWithDevice:device];
// Load texture from raw data
NSError *textureError = nil;
id<MTLTexture> textureFromData = [loader newTextureWithData:data
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from data: %@", textureError);
}
// Convert NSData to UIImage and back, then load
UIImage *tempImage = [UIImage imageWithData:data];
NSData *pngData = UIImagePNGRepresentation(tempImage);
id<MTLTexture> textureFromUIImage = [loader newTextureWithData:pngData
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from UIImage PNG: %@", textureError);
}
// Load texture using CGImage
CGImageRef cgImage = tempImage.CGImage;
id<MTLTexture> textureFromCGImage = [loader newTextureWithCGImage:cgImage
options:@{
MTKTextureLoaderOptionSRGB : @(NO),
MTKTextureLoaderOptionTextureUsage : @(MTLTextureUsageShaderRead),
MTKTextureLoaderOptionTextureCPUCacheMode : @(MTLCPUCacheModeWriteCombined)
}
error:&textureError];
if (textureError) {
NSLog(@"Error loading texture from CGImage: %@", textureError);
}
}] resume];
1