Trade-offs between RGBA and BGRA formats for Metal textures
I am developing an iOS application using Metal and have the choice of using either RGBA or BGRA for texture formats. The application will be:
- Rendering into textures
- Drawing textures on screen
- Generating
UIImages
from textures - Initialising textures from
UIImages
Are there any performance trade-offs for choosing RGBA over BGRA? The latter two points lead me to RGBA, but I also notice that MTKTextureLoader
defaults to BGRA textures. I was unable to find any application notes addressing difference between RGBA and BRGA in Metal.
ios opengl-es metal
add a comment |
I am developing an iOS application using Metal and have the choice of using either RGBA or BGRA for texture formats. The application will be:
- Rendering into textures
- Drawing textures on screen
- Generating
UIImages
from textures - Initialising textures from
UIImages
Are there any performance trade-offs for choosing RGBA over BGRA? The latter two points lead me to RGBA, but I also notice that MTKTextureLoader
defaults to BGRA textures. I was unable to find any application notes addressing difference between RGBA and BRGA in Metal.
ios opengl-es metal
I'll note that thepixelFormat
ofCAMetalLayer
andMTKView
default to BRGA.
– Ken Thomases
Nov 19 '18 at 16:55
1
I think Ken meant to say that they default toBGRA
because I don't think there's aBRGA
pixel format. Under macOS 10.14, if you create a basicMTKView
usinginitWithFrame:device
, then the pixel format isMTLPixelFormatBGRA8Unorm
.
– kennyc
Nov 20 '18 at 9:44
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51
add a comment |
I am developing an iOS application using Metal and have the choice of using either RGBA or BGRA for texture formats. The application will be:
- Rendering into textures
- Drawing textures on screen
- Generating
UIImages
from textures - Initialising textures from
UIImages
Are there any performance trade-offs for choosing RGBA over BGRA? The latter two points lead me to RGBA, but I also notice that MTKTextureLoader
defaults to BGRA textures. I was unable to find any application notes addressing difference between RGBA and BRGA in Metal.
ios opengl-es metal
I am developing an iOS application using Metal and have the choice of using either RGBA or BGRA for texture formats. The application will be:
- Rendering into textures
- Drawing textures on screen
- Generating
UIImages
from textures - Initialising textures from
UIImages
Are there any performance trade-offs for choosing RGBA over BGRA? The latter two points lead me to RGBA, but I also notice that MTKTextureLoader
defaults to BGRA textures. I was unable to find any application notes addressing difference between RGBA and BRGA in Metal.
ios opengl-es metal
ios opengl-es metal
edited Nov 20 '18 at 7:42
Hristo
asked Nov 19 '18 at 16:31
HristoHristo
2,33531632
2,33531632
I'll note that thepixelFormat
ofCAMetalLayer
andMTKView
default to BRGA.
– Ken Thomases
Nov 19 '18 at 16:55
1
I think Ken meant to say that they default toBGRA
because I don't think there's aBRGA
pixel format. Under macOS 10.14, if you create a basicMTKView
usinginitWithFrame:device
, then the pixel format isMTLPixelFormatBGRA8Unorm
.
– kennyc
Nov 20 '18 at 9:44
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51
add a comment |
I'll note that thepixelFormat
ofCAMetalLayer
andMTKView
default to BRGA.
– Ken Thomases
Nov 19 '18 at 16:55
1
I think Ken meant to say that they default toBGRA
because I don't think there's aBRGA
pixel format. Under macOS 10.14, if you create a basicMTKView
usinginitWithFrame:device
, then the pixel format isMTLPixelFormatBGRA8Unorm
.
– kennyc
Nov 20 '18 at 9:44
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51
I'll note that the
pixelFormat
of CAMetalLayer
and MTKView
default to BRGA.– Ken Thomases
Nov 19 '18 at 16:55
I'll note that the
pixelFormat
of CAMetalLayer
and MTKView
default to BRGA.– Ken Thomases
Nov 19 '18 at 16:55
1
1
I think Ken meant to say that they default to
BGRA
because I don't think there's a BRGA
pixel format. Under macOS 10.14, if you create a basic MTKView
using initWithFrame:device
, then the pixel format is MTLPixelFormatBGRA8Unorm
.– kennyc
Nov 20 '18 at 9:44
I think Ken meant to say that they default to
BGRA
because I don't think there's a BRGA
pixel format. Under macOS 10.14, if you create a basic MTKView
using initWithFrame:device
, then the pixel format is MTLPixelFormatBGRA8Unorm
.– kennyc
Nov 20 '18 at 9:44
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51
add a comment |
1 Answer
1
active
oldest
votes
BGRA is the default and most optimal format for textures and image data on iOS devices. While RGBA is supported, use of RGBA format can result in real performance issues when reading RGBA textures with UIImage and CoreGraphics because these layers can silently reorder the bytes for each pixel (this hurts performance for every pixel). BGRA native data can be copied via memcpy() on the device.
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378966%2ftrade-offs-between-rgba-and-bgra-formats-for-metal-textures%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
BGRA is the default and most optimal format for textures and image data on iOS devices. While RGBA is supported, use of RGBA format can result in real performance issues when reading RGBA textures with UIImage and CoreGraphics because these layers can silently reorder the bytes for each pixel (this hurts performance for every pixel). BGRA native data can be copied via memcpy() on the device.
add a comment |
BGRA is the default and most optimal format for textures and image data on iOS devices. While RGBA is supported, use of RGBA format can result in real performance issues when reading RGBA textures with UIImage and CoreGraphics because these layers can silently reorder the bytes for each pixel (this hurts performance for every pixel). BGRA native data can be copied via memcpy() on the device.
add a comment |
BGRA is the default and most optimal format for textures and image data on iOS devices. While RGBA is supported, use of RGBA format can result in real performance issues when reading RGBA textures with UIImage and CoreGraphics because these layers can silently reorder the bytes for each pixel (this hurts performance for every pixel). BGRA native data can be copied via memcpy() on the device.
BGRA is the default and most optimal format for textures and image data on iOS devices. While RGBA is supported, use of RGBA format can result in real performance issues when reading RGBA textures with UIImage and CoreGraphics because these layers can silently reorder the bytes for each pixel (this hurts performance for every pixel). BGRA native data can be copied via memcpy() on the device.
answered Nov 19 '18 at 21:48
MoDJMoDJ
3,10711648
3,10711648
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53378966%2ftrade-offs-between-rgba-and-bgra-formats-for-metal-textures%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
I'll note that the
pixelFormat
ofCAMetalLayer
andMTKView
default to BRGA.– Ken Thomases
Nov 19 '18 at 16:55
1
I think Ken meant to say that they default to
BGRA
because I don't think there's aBRGA
pixel format. Under macOS 10.14, if you create a basicMTKView
usinginitWithFrame:device
, then the pixel format isMTLPixelFormatBGRA8Unorm
.– kennyc
Nov 20 '18 at 9:44
Yes, thanks and sorry for the confusion. I meant BGRA.
– Ken Thomases
Nov 20 '18 at 16:51