首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vulkan中R16_UINT-3D纹理碎片着色器的采样值

Vulkan中R16_UINT-3D纹理碎片着色器的采样值
EN

Stack Overflow用户
提问于 2016-05-25 10:00:30
回答 2查看 1.2K关注 0票数 4

我使用的纹理教程从Sascha和它的工作没有任何问题。然后,我将纹理从2D纹理更改为没有符号16位的3D纹理。

我设置了正确的深度,然后更改以下值:

代码语言:javascript
运行
复制
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 };

在阴影中:

代码语言:javascript
运行
复制
sampler2D -> sampler3D

但是我从纹理(volumeTexture,textPos).r中得到的所有值现在都是零。我想要做的是上传一个UINT16图像,但是将它从片段着色器中作为浮动进行采样。

如果我打开RenderDoc,纹理看起来很好。

/private/i7dqw7pm0snkbf40eyywg

这就是我在opengl中所做的:

代码语言:javascript
运行
复制
  const auto& glType           = GL_SHORT;
  const auto& glFormat         = GL_LUMINANCE;
  const auto& glInternalFormat = GL_LUMINANCE16F_ARB;
  const auto& glClampMode      = GL_CLAMP_TO_EDGE;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-05-25 15:01:35

这就是我在opengl中所做的:

OpenGL的像素传递功能被要求接受不愉快或缓慢的事情。Vulkan不知道。

您在OpenGL中所做的是强制驱动程序将16位未签名的归一化定点值中的每个像素转换为16位IEEE-754浮点值。几乎可以肯定,这种转换是在CPU上完成的。

Vulkan没有训练轮,而Vulkan司机也不为你工作。Vulkan有格式,规范详细说明了它们的含义。如果您的数据与您最终希望使用的格式不匹配,则由您进行转换。

票数 3
EN

Stack Overflow用户

发布于 2016-05-25 11:18:49

你能再加些信息吗?你所说的“从纹理中读取”是指在片段着色器中取样吗?您从验证层中得到任何错误吗?您的实现支持来自R16_UINT的采样吗?

如果RenderDoc显示您的纹理,但它在您的应用程序中是“不可见的”,您也可能会错过适当的图像布局转换,至少在需要它们的硬件上是这样。这也包括正确的资源范围。

请看一下https://www.khronos.org/registry/vulkan/specs/1.0/xhtml/vkspec.html#resources-image-views提供的桌子

并确保您的图像和视图参数适合三维纹理。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37433749

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档