我的GLSL着色器对象/包装器是否应该封装加载/设置VertexArrayObject
Should my GLSL Shader object/wrapper encapsulate loading/setting a VertexArrayObject?
我正在用C++开发一个2d游戏,在OpenGL上有一个简单的渲染层。
我有一个GLSL着色器和着色器程序的包装器,这些包装器将着色器对象封装到C++类中,并自动处理加载/编译/链接和使用着色器程序。
在我看来,VertexArrayObjects基本上是一组配置设置,用于特定的ShaderProgram。
因此,我的问题是:我应该将VAO封装在ShaderProgram对象中,还是封装在Sprite对象中?VAO是在每个着色器的基础上更改的,还是每种类型的可绘制对象都需要一个新的VAO?如果是后者,我需要一个VAO来绘制所有精灵(每个精灵包含4个顶点、一个位置/方向等),还是需要游戏中每个精灵对象一个VA奥?
顶点阵列对象只是用于确定OpenGL从何处获取顶点的设置的容器。它们不与任何着色器相关联;只要顶点属性匹配,就可以对多个着色器使用相同的VAO。因此,他们应该是自己的,独立的阶级。
对于一个基于2D精灵的游戏,你主要是在绘制矩形,我建议你简单地用矩形网格创建一个VAO,并在绘制精灵时使用它。
相关文章:
- std::原子加载和存储都需要吗
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 为什么加载SDF会导致Mobilizer创建闭环错误
- C++atioglxx.pdb未加载错误glBufferData OpenGL
- 如何使用tinyxml2从XML加载父实体和子实体
- 如何在C++中使用pybind11加载一个pickle python列表
- 系统.将数组移交给c#中动态加载的c++DLL时发生AccessViolationException
- 当我尝试加载内核模块时,如何修复C++中的这个 malloc() 错误?
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- Python ctypes:不会按预期加载 dll
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- 保存/加载大量短数组到二进制文件
- 使用 SDL2 和SDL_image C++加载图像
- 无法使用加载库卸载注入的 dll (C++)
- 是否有原子加载非原子值的函数?
- 将 bmp 文件加载到 TSpeedButton 中
- 从外部调用封装类成员函数时不加载SFML纹理
- 我的GLSL着色器对象/包装器是否应该封装加载/设置VertexArrayObject