【发布时间】:2016-10-04 16:16:00
【问题描述】:
例如见this Qt example中的第二个代码sn-p。
这样做:
rttFramebuffer.name = "OffscreenRenderTarget";
我没有在 C++ OpenGL 代码中看到这个,这意味着它可能是 Canvas3D 的东西或 Canvas3D 继承的 WebGL 的东西。然而,快速的谷歌搜索并没有发现任何相关信息。
谁能解释一下为什么这样做以及它做了什么?
【问题讨论】:
-
使用这样的字符串在“动态”编程语言中很常见,顶级性能不是问题。不,你不会在 C 或 C++ 中看到很多,因为它在快速代码路径中效率非常低。但也有一些例外——例如 gstreamer。由于它是高度动态和模块化的,枚举没有意义,而是使用字符串来指定对象类型。
-
@ddriver: "Stringly-typed" (<10k)
-
@ddriver 鉴于有问题的代码相当于
QObject::setProperty("name", "OffscreenRenderTarget"),我不知道你在说什么,真的......一个足够聪明的运行时只会查找一次属性并且每次后续调用都使用QMetaProperty::write;不过,我不记得 Qt Quick 在其当前的化身中是否这样做了。这段代码一点也不低效。它不是用字符串替换GL_枚举! -
@KubaOber - 鉴于该名称不是必需的,也不需要在示例中的其他任何地方引用,我不知道为什么要首先设置它。无论如何,我是在概括,这一定让你感到困惑。我错误地认为设置它必须是出于预期的未来用途,但事实似乎并非如此。
标签: javascript qt qml qtquick2