gpt4 book ai didi

opengl - 为什么存在 glVertexAttribPointer 的不同变体?

转载 作者:行者123 更新时间:2023-12-04 00:41:47 27 4
gpt4 key购买 nike


glVertexAttribPointer()
glVertexAttribIPointer()
glVertexAttribLPointer()

据我所知, glVertexAttribPointer可以用来代替其他两个。

如果是这样,为什么 IL是否存在变异?

最佳答案

进行测试,您将了解其中的区别。

假设您正在使用以下顶点着色器进行变换反馈:

#version 450 core
layout(location = 0) in int input;
layout(xfb_offset = 0) out float output;

void main()
{
output = sqrt(input);
}

这是你的“顶点数据”:
GLint data[] = { 1, 2, 3, 4, 5 };

然后,如果您像这样设置顶点属性:
glVertexAttribPointer(0, 1, GL_INT, GL_FALSE, 0, nullptr);

你会得到错误和奇怪的结果。

如果您在顶点着色器中更改此行
output = sqrt(input);


output = sqrt(intBitsToFloat(input));

或者

在 C++ 代码中更改这一行:
glVertexAttribPointer(0, 1, GL_FLOAT, GL_FALSE, 0, nullptr);
^^^^^^^^
does not match the real input type
but stops glVertexAttribPointer() converting them

它会起作用的。但这不是一种自然的方式。

现在 glVertexAttribIPointer()前来帮忙:
--- glVertexAttribPointer(0, 1, GL_INT, GL_FALSE, 0, nullptr);
+++ glVertexAttribIPointer(0, 1, GL_INT, 0, nullptr);

然后你会得到正确的结果。

(我为此奋斗了整个下午,直到找到 glVertexAttribIPointer() 。)

关于opengl - 为什么存在 glVertexAttribPointer 的不同变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28014864/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com