- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
再次嗨,欢迎来到另一个“如果我们将两件我真的不了解的事情结合起来会不会很棒”-问题;)
这一集:OpenGL 制服和 C++ 模板
想法:如果您可以编写一个模板函数来在 OpenGL 着色器中设置制服,那不是很好吗?
问题:着色器中的制服是使用许多 glUniform* 函数设置的。它们的不同之处在于:
类型:制服可以采用多种类型。这导致 OpenGL 中的不同函数名称看起来像:glUniform1f、glUniform1i、glUniform1fv 等。
使用函数重载可以很容易地“统一”这些。但这会产生大量类似的函数。
第一个问题:这个地方可以用模板吗?据我了解模板,您必须专门针对每个新功能。最后,您将拥有与简单重载相同数量的函数。
参数个数:glUniform函数中的个数是指给定参数的个数。有 1 到 4 个参数与简单值相关,最多包含 4 个元素的 vector 。
第二个问题:是否可以使用模板实现“动态”参数计数?
矩阵:让事情变得复杂的是另一类发送矩阵的统一函数,但由于我并没有真正使用它们,所以我对它们并不真正感兴趣。
可能没有真正的方法来简化统一方法......但也许有人可以使用强大的模板想出一个很好的解决方案?
亲切的问候,弗洛里安
最佳答案
1 :是的,是的,但至少当编译器提示它无法在 float 和 double 重载之间进行选择时,你可以非常简单地强制他,即 setUniform<float>(blah)
而不是 setUniform(blah)
2:这次重载是一个更简单的解决方案:)
3:问题是什么?
问题是,你为什么要做这样的事情?
关于c++ - 使用模板管理 glUniform 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3386687/
我正在使用 OpenGL 和 GLSL 在简单的网格上绘制纹理。 我的问题是,当我使用 glUniform1i 设置 sampler2D uniform 的值时,它没有被设置。例如在这段代码中: gl
我想知道 glUniformXXv 是否会阻塞,直到指针所指的数据被复制到 GPU。换句话说,如果 GPU 很忙,这段代码会导致问题吗? int i=5; glUniform1iv(location,
GLSL 代码和传递数据的 native 代码之间的类型必须匹配到什么程度? 例如,假设我有着色器代码: uniform float uFloat; uniform int uInt; in floa
当我调用 glUniform2fv 时到底会发生什么? 它是同步复制传递的缓冲区还是只是接受指针并稍后使用该数据?它保留缓冲区吗? 换句话说:在函数中传递本地创建的或非保留的缓冲区是否安全,或者由我来
再次嗨,欢迎来到另一个“如果我们将两件我真的不了解的事情结合起来会不会很棒”-问题;) 这一集:OpenGL 制服和 C++ 模板 想法:如果您可以编写一个模板函数来在 OpenGL 着色器中设置制服
我已经阅读了khronos的规范,我知道glProgramUniform*()将数据上传到指定的程序对象,而glUniform*()将数据上传到当前绑定(bind)的程序对象。但我想知道这两者之间是否
我目前正在编写一个 openGL 着色器类。我没有使用函数来设置每个统一类型,而是尝试将统一函数(例如 glUniform1f)作为参数传递。 我目前的尝试看起来像这样: template void
如果我有一个看起来像这样的片段着色器: #version 450 #define MAX_NUM_LIGHTS 10 #define NUM_CASCADES 6 uniform sampler2D
我正在关注 OpenGL v3.3 教程,该教程指示我使用 glUniform4f 修改片段着色器中的统一属性(请参阅下面的代码)。据我了解,OpenGL 是一个状态机,我们不会取消绑定(bind)当
背景 我目前正在围绕 OpenGL 的 glUniform 编写包装器C++ 中的函数,努力使它们类型安全。我有一堆 set_uniform 函数被重载以接受 OpenGL POD(GLint、GLu
我是一名优秀的程序员,十分优秀!