【发布时间】:2014-03-13 19:05:48
【问题描述】:
我正在基于 Lwjgl 构建我自己的小型 Opengl 库。目前我使用 HashMaps 来存储诸如渲染对象、场景或着色器程序之类的东西,因为我希望在 Class 上有用户可以看到,并且有创建方法来修改、创建,我不知道......其他对象或类受到保护。 所以,解释一下:
有一个类叫做“ShaderProgram”。而是允许用户创建一个,使用 ShaderProgram s = new ShaderProgram(...); ,我在我的“主类”中创建一个名为“createShaderProgram”的方法,给它参数,创建一个着色器程序并将其放入名为 shaderPrograms 的 hashMap 中,名称由用户决定。例如使用 MyClass.createShaderProgram("particle_shader", ...) 我可以为我的粒子创建一个着色器,然后使用 MyClass.binShaderProgram("particle_shader") 或类似的东西,我可以使用它。
但是:这够快吗?还是有其他理由将其更改为 int 索引,或者完全允许用户使用所有类?因为例如我也创建了这样的渲染对象,并且在每个帧中执行 MyClass.getRenderObject("ACube").move(...) ...我可以这样做吗?你怎么看待这件事?
【问题讨论】:
-
哈希图非常快(平均情况 O(1))。话虽如此,您应该在这里考虑您的 API 设计。您是否希望用户可以访问这些类,以便他们可以按照自己的意愿存储 ShaderProgram?那么
createShaderProgram可能真的应该是Factoy Method,这样用户就可以控制他们的ShaderProgram。 -
谢谢你,我想这个。
标签: java performance opengl hashmap lwjgl