gpt4 book ai didi

c++ - 如何在 C++/DirectX 和 HLSL 之间共享结构?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:55 32 4
gpt4 key购买 nike

我正在学习 C++ 和 DirectX,我注意到在尝试使 HLSL 着色器中的结构与 C++ 代码保持同步时存在大量重复。我想分享这些结构,因为这两种语言具有相同的 #include 语义和头文件结构。我遇到了成功

// ColorStructs.h
#pragma once

#ifdef __cplusplus

#include <DirectXMath.h>
using namespace DirectX;

using float4 = XMFLOAT4;

namespace ColorShader
{

#endif

struct VertexInput
{
float4 Position;
float4 Color;
};

struct PixelInput
{
float4 Position;
float4 Color;
};

#ifdef __cplusplus
}
#endif

不过,问题是在这些着色器的编译过程中,FXC 告诉我关于我的像素着色器的主要功能的输入参数“输入”缺少语义:

#include "ColorStructs.h"

void main(PixelInput input)
{
// Contents elided
}

我知道我需要像 float4 Position : POSITION 这样的语义,但我想不出一种不违反 C++ 语法的方法。

有没有办法让 HLSL 和 C++ 之间的结构保持通用?或者它不可行,需要复制两个源代码树之间的结构?

最佳答案

您可以在编译 C++ 时使用函数宏来删除语义说明符

#ifdef __cplusplus
#define SEMANTIC(sem)
#else
#define SEMANTIC(sem) : sem
#endif

struct VertexInput
{
float4 Position SEMANTIC(POSITION0);
float4 Color SEMANTIC(COLOR0);
};

关于c++ - 如何在 C++/DirectX 和 HLSL 之间共享结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34886497/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com