我正在为 vulkan 编写着色器,必须将其编译为 spir-v。我有一个非常好的批处理文件,它将使用 GLSlangvalidator 为我构建着色器。我正在尝试使用按键在 VsCode 中运行我的批处理文件,以便我可以检查我的代码是否有错误并构建它。我有以下几点:
{
"key": "f5",
"label": "build",
"type": "shell",
"command": "workbench.action.terminal.sendSequence",
"args" : {"text": ".\\compile.bat"},
"presentation" : {
"reveal": "always"
}
Run Code Online (Sandbox Code Playgroud)
这几乎有效 - 但我仍然必须专注于内置终端面板并按回车键。当然有一种方法可以执行命令,而不仅仅是输入字符串?谢谢!
我正在尝试编写一个 Unity 风格的获取组件方法。这是我到目前为止的代码。它会编译,但会返回它找到的第一个组件,而不是正确的组件。我认为我使用 static_cast 是错误的。有什么更好的方法来做到这一点?请注意,我不想对组件类型进行硬编码,我希望能够编译此引擎并使用从 Component 继承的任何内容以便能够使用此系统。另请注意,每个组件都需要作为其自身返回,而不是组件*,因为这会隐藏子功能。
compStruct.components 是组件 *s 的向量。
template <typename CompType>
inline CompType getComponent()
{
for(Component * currComp : compStruct.components)
{
if (static_cast<CompType>(currComp)!= nullptr)
{
return static_cast<CompType>(currComp);
}
}
return nullptr;
}
Run Code Online (Sandbox Code Playgroud)
这是通用组件的示例
#pragma once
#include "Component.h"
#include "Animation2D.h"
class AnimationComponent : public Component
{
public:
AnimationComponent(GameObject*x) :Component(x) {}
~AnimationComponent() {}
void stepAnimation(double delta);
//add overload for 3d animations
int addAnimation(Animation2D);
void setAnimation(int);
private:
};
Run Code Online (Sandbox Code Playgroud)
以及组件基类:
#pragma once
class GameObject;
class Component
{
public:
Component(GameObject * h) …Run Code Online (Sandbox Code Playgroud)