小编alc*_*ado的帖子

std :: conditional如何工作

我们有一个这里std::conditional描述的这个小元编程奇迹.在同一参考文献中,它表示可能的实现方式

template<bool B, class T, class F>
struct conditional { typedef T type; };

template<class T, class F>
struct conditional<false, T, F> { typedef F type; };
Run Code Online (Sandbox Code Playgroud)

所以如果在代码中我做了类似的事情

typename std::conditional<true,int,double>::type a;
Run Code Online (Sandbox Code Playgroud)

编译器将遵循第一个定义,如果我做了类似的事情

typename std::conditional<false,int,double>::type b
Run Code Online (Sandbox Code Playgroud)

编译器将采取第二个.为什么这样做?这里有什么编译规则?

c++ templates template-specialization template-meta-programming c++11

10
推荐指数
2
解决办法
3450
查看次数

自定义构建文件更改不会触发 VS 2017 中的项目重建

在我的 C++ VS 项目中,我添加了一个自定义目标来编译着色器文件并将其设置为初始目标。这是项目的xml

<Project InitialTargets="CompileShaders" DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 
 ..... Normal Default VS C++ content here ......

 <ItemGroup>
    <GLSLShader Include="SPIR-V\canvas2D.vert" />
    <GLSLShader Include="SPIR-V\canvas2D.frag" />
</ItemGroup>
 
  
  
  <Target Name="CompileShaders" Inputs="@(GLSLShader)" Outputs="SPIR-V\shaders_bytecode.h" >
    <PropertyGroup>
      <OriginalFileName>%(GLSLShader.Filename)%(GLSLShader.Extension)</OriginalFileName>
    </PropertyGroup>
    <Message Text="Start Compiling GSLANG @(GLSLShader) " />
    <Message Condition="'$(VULKAN_SDK)'==''" Text="Error, cant find environment variable VULKAN_SDK, Make sure that the  Lunar  Vulkan SDK is installed" />
    <Message Condition="'$(VULKAN_SDK)'!=''" Text="$(VULKAN_SDK)\Bin\glslangValidator.exe %(GLSLShader.Filename)%(GLSLShader.Extension) -V --vn $([System.String]::Copy('%(GLSLShader.Filename)%(GLSLShader.Extension)').Replace('.','_')) -o %(GLSLShader.Filename)%(GLSLShader.Extension).h" />
    <Exec Condition="'$(VULKAN_SDK)'!=''" Command="$(VULKAN_SDK)\Bin\glslangValidator.exe %(GLSLShader.Filename)%(GLSLShader.Extension) -V --vn $([System.String]::Copy('%(GLSLShader.Filename)%(GLSLShader.Extension)').Replace('.','_')) -o %(GLSLShader.Filename)%(GLSLShader.Extension).h" WorkingDirectory="$(ProjectDir)\SPIR-V" />
    <Exec …
Run Code Online (Sandbox Code Playgroud)

c++ msbuild visual-studio-2017

4
推荐指数
1
解决办法
1367
查看次数

vkCmdPipelineBarrier 适用于什么管道?

vkCmdPipelineBarrier 没有获取任何 vkPipeline 作为参数。所以我想知道 vkCmdPipelineBarrier 适用于哪个管道。

是在命令缓冲区中之前调用的 vkCmdBindPipeline 命令中指定的命令吗?如果命令缓冲区中尚未指定管道怎么办?

vulkan

1
推荐指数
1
解决办法
1995
查看次数