为何glxinfo中depth=32的Visual ID 23的alphaSize为0?
关于GLX Visual ID 23的depth与通道尺寸疑问
我在本地执行glxinfo -v得到如下相关输出:
Visual ID: 22 depth=24 class=DirectColor, type=(none) bufferSize=24 level=0 renderType=rgba doubleBuffer=1 stereo=0 rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=0 float=N sRGB=Y auxBuffers=4 depthSize=24 stencilSize=8 accum: redSize=16 greenSize=16 blueSize=16 alphaSize=16 multiSample=0 multiSampleBuffers=0 visualCaveat=None Opaque. SwapMethod=Unknown value Visual ID: 23 depth=32 class=TrueColor, type=(none) bufferSize=24 level=0 renderType=rgba doubleBuffer=1 stereo=0 rgba: redSize=8 greenSize=8 blueSize=8 alphaSize=0 float=N sRGB=Y auxBuffers=4 depthSize=24 stencilSize=8 accum: redSize=16 greenSize=16 blueSize=16 alphaSize=16 multiSample=0 multiSampleBuffers=0 visualCaveat=None Opaque. SwapMethod=Unknown value
ID 22的信息符合预期,但ID 23的depth为32,却显示alphaSize=0。我原本认为该ID应支持8,8,8,8的通道(即alphaSize=8),且各通道尺寸总和应为32而非24。请问这是bug还是我对输出的理解有误?
解答
这不是bug,是对GLX输出字段的理解偏差:
depth指的是整个像素的总位数,包含颜色通道、硬件填充位等额外位,并非严格等于颜色通道总和。很多GPU为了32位内存对齐,会给24位RGB格式额外分配8位填充位,所以depth显示32,但alpha通道依然是0。bufferSize才是颜色通道的总位数,这里显示24,和rgba字段的RGB各8位、alpha 0位完全匹配。- 若需要8位alpha的RGBA格式,需查找
bufferSize=32且alphaSize=8的Visual ID,这类格式的depth通常也是32,刚好对应RGBA各8位,无填充位。
内容的提问来源于stack exchange,提问作者The Bic Pen
相关产品推荐
相关产品推荐

