我使用的纹理教程从Sascha和它的工作没有任何问题。然后,我将纹理从2D纹理更改为没有符号16位的3D纹理。
我设置了正确的深度,然后更改以下值:
VK_FORMAT_BC3_UNORM_BLOCK -> VK_FORMAT_R16_UINT
VK_IMAGE_TYPE_2D -> VK_IMAGE_TYPE_3D
and just one component -> view.components = { VK_COMPONENT_SWIZZLE_R };在阴影中:
sampler2D -> sampler3D但是我从纹理(volumeTexture,textPos).r中得到的所有值现在都是零。我想要做的是上传一个UINT16图像,但是将它从片段着色器中作为浮动进行采样。
如果我打开RenderDoc,纹理看起来很好。
/private/i7dqw7pm0snkbf40eyywg
这就是我在opengl中所做的:
const auto& glType = GL_SHORT;
const auto& glFormat = GL_LUMINANCE;
const auto& glInternalFormat = GL_LUMINANCE16F_ARB;
const auto& glClampMode = GL_CLAMP_TO_EDGE;发布于 2016-05-25 15:01:35
这就是我在opengl中所做的:
OpenGL的像素传递功能被要求接受不愉快或缓慢的事情。Vulkan不知道。
您在OpenGL中所做的是强制驱动程序将16位未签名的归一化定点值中的每个像素转换为16位IEEE-754浮点值。几乎可以肯定,这种转换是在CPU上完成的。
Vulkan没有训练轮,而Vulkan司机也不为你工作。Vulkan有格式,规范详细说明了它们的含义。如果您的数据与您最终希望使用的格式不匹配,则由您进行转换。
发布于 2016-05-25 11:18:49
你能再加些信息吗?你所说的“从纹理中读取”是指在片段着色器中取样吗?您从验证层中得到任何错误吗?您的实现支持来自R16_UINT的采样吗?
如果RenderDoc显示您的纹理,但它在您的应用程序中是“不可见的”,您也可能会错过适当的图像布局转换,至少在需要它们的硬件上是这样。这也包括正确的资源范围。
请看一下https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#resources-image-views提供的桌子
并确保您的图像和视图参数适合三维纹理。
https://stackoverflow.com/questions/37433749
复制相似问题