如何使用 GLSLshader::operator[]
How to use GLSLshader::operator[]
我一直在阅读一本关于OpenGL的书,其中说你可以使用GLSLshader::operator[]和我想要位置的属性的名称来获取该位置。但是,当我使用它时(下面的示例(,程序崩溃了。
GLuint program_id;
...
glLinkProgram(program_id);
...
...
...
glEnableVertexAttribArray(program_id["position");
glVertexAttribPointer(program_id["position"], ... );
当我调试时,即使我希望它返回 0,它也返回 105。我已经指定该位置应为 0,当我对其进行硬编码时,它按预期工作:
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, ... );
这是顶点着色器中的线条:
layout(location = 0) in vec3 position;
我不确定我是否误解了如何使用它。到目前为止,我一直对属性位置进行硬编码,但我希望能够以这种方式做到这一点。我知道我也可以使用
glGetAttribLocation(program_id, "position");
并且有效(它返回我指定的位置(,但着色器["位置"]对我来说看起来更清晰,如果使用 [] 运算符是一种方法,我想知道如何做到这一点,而不是只是找到一个解决方法让它工作。
所以我的问题是你能使用 GLSLshader::operator[] (例如着色器["位置"(来获取属性的位置吗?如果是这样,你能想到我可能正在做什么让它不起作用吗?
GLSLshader 将是你正在阅读的书中定义的一个类。将定义一个运算符 []。这个 GLSLshader 类不是默认的(也因为 OpenGL 实际上是一个不存在类的 C 库(。
仅供参考:GLuint
只是一个固定的 32 位无符号数字的 typedef。(例如C++:uint32_t
(
相关文章:
- 为什么 std::optional::operator=(U&&) 要求你是非标量类型?
- 'operator='已弃用:改用 QDir::setPath()
- 过载'operator new'如何导致无限循环?
- 与'operator='不匹配(操作数类型'String'且"void")
- SegFault 同时使用 std::string::operator+= 和函数作为参数
- 处理"no operator found"
- 如何编写 operator= 用于使用虚拟方法与非平凡成员的匿名联合
- 运算符重载:"operator+"必须采用零个或一个参数
- 使用 operator() 扩展 Eigen::EigenBase
- 错误消息:使用"string* +="后"no match for 'operator+='"
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- "operator +="行为异常的定义
- C++ "error: use of overloaded operator '*' is ambiguous"似乎只有一场比赛
- 错误:二进制'operator*' 'float'和'float[0]'类型的操作数无效
- 在 Eclipse: "error: no match for 'operator='" 中获取错误消息
- 为什么 operator() 处的指针成员不起作用?
- 为什么 string_view::operator== 按值接受参数
- "operator()"在重载运算符方法中是什么意思,在priority_queue(STL)中用作C++中的比较器?
- Valarray 切片数组与 'operator*' 不匹配
- 如何使用 GLSLshader::operator[]