Forum Discussion
Phildo3
6 years agoProtege
Using Vulkan + OpenXR, getting strange transparency results on quest (not present in PCVR)
The long story short is that alpha values are behaving very strangely: transitioning reasonably between 1.0 to 0.5, but from 0.5 to 0.0 transitioning from half-opacity-{color} to opaque-black.
^ this is my font renderer (captured from quest beamed to iphone) with the shader replaced with:
^ this is my font renderer (captured from quest beamed to iphone) with the shader replaced with:
#version 450
#extension GL_KHR_vulkan_glsl : enable
#extension GL_ARB_separate_shader_objects : enable
#extension GL_EXT_multiview : enable
layout(set = 0, binding = 2) uniform sampler2D colorSampler;
layout(location = 0) in vec2 fragUV;
layout(location = 0) out vec4 outColor;
void main()
{
float x = (sin(gl_FragCoord.x/20.0)+1.0)/2.0;
outColor = vec4(1.0,0.0,0.0,x)
}
My pipeline blend config is:VkPipelineColorBlendAttachmentState colorBlendAttachment = {};The wackiest bit is that this works perfectly (as expected) when run from pcvr (with no major differences in code paths between the two: same spirv, same pipeline generation, etc...).
//alpha blend
colorBlendAttachment.colorWriteMask =
VK_COLOR_COMPONENT_R_BIT |
VK_COLOR_COMPONENT_G_BIT |
VK_COLOR_COMPONENT_B_BIT |
VK_COLOR_COMPONENT_A_BIT |
0;
colorBlendAttachment.blendEnable = VK_TRUE;
colorBlendAttachment.srcColorBlendFactor = VK_BLEND_FACTOR_SRC_ALPHA;
colorBlendAttachment.dstColorBlendFactor = VK_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA;
colorBlendAttachment.colorBlendOp = VK_BLEND_OP_ADD;
colorBlendAttachment.srcAlphaBlendFactor = VK_BLEND_FACTOR_ONE;
colorBlendAttachment.dstAlphaBlendFactor = VK_BLEND_FACTOR_ZERO;
colorBlendAttachment.alphaBlendOp = VK_BLEND_OP_ADD; VkPipelineColorBlendStateCreateInfo colorBlendInfo = {};
colorBlendInfo.sType = VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_STATE_CREATE_INFO;
colorBlendInfo.logicOpEnable = VK_FALSE;
colorBlendInfo.logicOp = VK_LOGIC_OP_COPY;
colorBlendInfo.attachmentCount = 1;
colorBlendInfo.pAttachments = &colorBlendAttachment;
colorBlendInfo.blendConstants[0] = 0.0f;
colorBlendInfo.blendConstants[1] = 0.0f;
colorBlendInfo.blendConstants[2] = 0.0f;
colorBlendInfo.blendConstants[3] = 0.0f;
1 Reply
- Phildo3ProtegeSome additional clarification: the image is _supposed_ to be showing the quads that would normally be used to render some text (working) fading from opaque red (working) to transparent (broken) according to the sin of the fragment x coordinate (working). The problem is that rather than a fade-to-transparent-red, they fade-to-opaque-black-with-some-transparency-in-between. I have no idea where the black is coming from.
Additionally, the shader/pipeline parameters work perfectly on PCVR, so it isn't a simple math/code flow bug.
Quick Links
- Horizon Developer Support
- Quest User Forums
- Troubleshooting Forum for problems with a game or app
- Quest Support for problems with your device