c++ - Vulkan 结构的许多小类还是一个大类?
问题描述
我正在学习 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();
...
}
编译器会在这里用代码替换整个函数调用还是会创建一个跳转?如果它们经常发生,跳跃是不是很糟糕?我在哪里可以阅读这个主题?
解决方案
由于 3D 图形不会以渲染单个三角形结束,因此有一个建议。
尝试使用多个图像渲染多个复杂的网格和/或使用不同的渲染模型进行照明。在此过程中,您将遇到许多挑战,以将 Vulkan 代码保持在最低限度。例如,您不想复制“n”粘贴着色器模块加载/创建代码、纹理加载代码等。渲染通道和帧缓冲区(用于离屏渲染,不是教程中唯一的交换链和隐式图像视图)、管道和描述符集- 这些是你最关注的,需要管理的项目。对您而言,初始化过程和扩展列表的表示不太可能是最大的问题。
掌握 C++ 祝你好运(无论你是否使用类)。更实际一点,不要试图从一开始就优化一切。通常,泛化来自于从已经编写的代码中提取相似的部分,而不是从头开始。
推荐阅读
- sql - 日期与 substr & like 查询显示不正确
- javascript - 为什么 React Native (RN) 不能将 main.bundle.js 转换为原生代码以避免 VM 和 Native Modules 之间的 RN Bridge
- apache-spark - 在决定 spark-structured-streaming 与微服务时要考虑什么,都从 Kafka 读取数据
- python - Django动态模型权限使用请求方法
- java - 如何使用 Ant build 构建 React 应用程序?
- amazon-web-services - 参数 groupName 不能与参数子网一起使用
- java - 如何访问firebase阵列
- python - 在 Pyspark 中列出保存顺序的数据框列
- node.js - 如何使用nodejs在mongodb中为具有唯一和多个电话号码的人创建模式
- mule - 如何循环或迭代数组列表,然后连接 Dataweave 中的值