【发布时间】:2026-01-01 08:15:02
【问题描述】:
我正在学习 vlukan,并在他们的主页上完成了教程,直到您在屏幕上看到第一个三角形。在本教程中,所有内容都放入 main.cpp 中,并且可以轻松增长超过 1000 LOC。
我想强调我的目标是更多地了解 C++ 以及它在“幕后”的行为方式。
现在我的问题是我是否应该将这个大类重构为多个小类,以及这对编译后的代码有什么影响:
假设我想要以下:
VkInstance
为此我需要以下内容:
VkInstanceCreateInfo(结构体创建又需要的实例)
std::vector<VkLayerProperties>(图层属性数组,例如支持 GLFW 窗口)
std::vector<const char*>(扩展名数组,例如要写入控制台的调试工具)
我的想法是创建我自己的类的以下结构:
class Instance{
InstanceLayers layers;
InstanceExtensions extensions;
};
在构造函数中,我将拥有以下内容:
Instance::Instance(){
...
const auto requiredExtensions = extensions->getExtensions();
...
}
编译器会在这里用代码替换整个函数调用还是会创建一个跳转?如果经常发生跳跃是不是很糟糕?我可以在哪里阅读有关此主题的信息?
【问题讨论】:
-
这些都是非常广泛的问题,这使得它不适合 SO。此外,每个问题都应该限制在一个问题上,你一次问了太多事情。关于性能:不可能从这样一个模糊的想法中分辨出来,性能应该根据具体的实现来衡量
-
关于国防部:您根本没有在这里提到任何类型的输入数据。在主要是网格和纹理的 3D 渲染中,它与您的渲染 API 本身几乎没有关系(除了 API 可能支持有助于处理您的数据的某些操作)
-
std::vector<VkLayerProperties>已经使用 RAII 进行分配和清理。你的班级会有什么不同? -
类从来都不是必需的。任何可以用类完成的事情都可以在没有类的情况下完成,只是需要更多的代码。
标签: c++ assembly compilation vulkan project-structure