【发布时间】:2016-12-06 18:40:39
【问题描述】:
我正在 Visual Studio 2015 中处理 DirectX 着色器和 C++ 代码,我只想编写一个代码,所以我开始使用宏,因为我认为它是统一代码的有效方法。
Visual Studio 中的 HLSL 预处理器与 C++ 预处理器略有不同,例如它不支持可变参数宏;另一方面基本工作是相同的(见documentation)。
我的问题是当我使用以下代码时:
STATIC_TRAITS_DECLARATION SimpleVertexDefinition(PARSER_MEMORY, CONTEXT_MEMORY)
所有术语(SimpleVertexDefinitions、STATIC_TRAITS_DECLARATION、CONTEXT_MEMORY、PARSER_MEMORY)都是宏,一切正常。但是当我尝试通过以下宏来定义它时
#define DECLARE_VERTEX_SHADER_INPUT(type) STATIC_TRAITS_DECLARATION type##Definition(PARSER_MEMORY, CONTEXT_MEMORY)
DECLARE_VERTEX_SHADER_INPUT(SimpleVertex)
我明白了
Error X1516 not enough actual parameters for macro 'SimpleVertexDefinition'
Error X3000 unrecognized identifier 'SimpleVertexDefinition'
顺便说一句
- C++预处理器编译没问题
- 宏连接在其他 hlsl 代码中也能正常工作。
如果有人能解释我出了什么问题,我会很高兴,因为我相信我的宏是根据 documentation...
【问题讨论】: