当前位置: 首页 > 知识库问答 >
问题:

偏移和步幅

松铭
2023-03-14

有人能解释一下这里出了什么问题吗。我猜这是有偏移和步幅的东西,但是...

glBindVertexBuffer(0, m_vboID, 0, sizeof(float) * 2);
glBindVertexBuffer(1, m_vboID, offsetof(Vertex, color), sizeof(GLubyte) * 4);
glBindVertexBuffer(2, m_vboID, offsetof(Vertex, tex), sizeof(float) * 2);

glVertexAttribFormat(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex));
glVertexAttribBinding(0, 0);

glVertexAttribFormat(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex));
glVertexAttribBinding(1, 1);

glVertexAttribFormat(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex));
glVertexAttribBinding(2, 2);

顶点包含位置结构和2个浮点,颜色结构和4个GLubyte和Tex结构和2个浮点。

如果我用这段代码替换它,它工作得很好。

glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));
glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), (void*)offsetof(Vertex, color));
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, tex));

共有1个答案

余弘毅
2023-03-14

stride是缓冲区内元素之间的距离。如果您有一个缓冲区,其中每个顶点属性元组包含8个组件,4个为float类型,4个为ubyte类型,例如(x,y,r,g,b,a,u,v),则stride为4*sizeof(float)+4*sizeof(GLubyte)(分别为sizeof(vertex)):

GLsizei stride = 4*sizeof(float) + 4*sizeof(GLubyte);
glBindVertexBuffer(0, m_vboID, 0, stride);
glBindVertexBuffer(1, m_vboID, offsetof(Vertex, color), stride);
glBindVertexBuffer(2, m_vboID, offsetof(Vertex, tex), stride);
 类似资料:
  • 我正在制作这个程序,需要渲染彩色四分形。我正在使用VBOs为此。 这就是我如何存储顶点和颜色的数据: 以下是我在渲染时的调用: (注意im使用映射的vbos,这就是为什么没有实际的数据绑定): 我不能得到偏移和步幅是正确的,所以当我渲染时,我看到这个奇怪的工件…

  • 我有一个Kafka消费者,我从它消费数据从一个特定的主题,我看到下面的例外。我使用的是Kafka版本。 我添加了这两个额外的消费者属性,但仍然没有帮助: 那个错误意味着什么?我该如何解决它?我需要添加一些其他消费者属性吗?

  • 我正在使用镜像制作器 2 进行灾难恢复。 Kafka 2.7 应支持自动消费者偏移同步 下面是我正在使用的yaml文件(我使用strimzi来创建它) 所有源群集主题都在目标群集中复制。还有…检查点。内部主题是在包含所有同步的源集群偏移量的目标集群中创建的,但我没有看到这些偏移量被转换为目标集群_consumer_offsets主题,这意味着当我在目标集群中启动消费者(同一消费者组)时,它将从一开

  • 我有一个关于Kafka自动提交机制的问题。我正在使用启用自动提交的Spring-Kafka。作为一个实验,我在系统空闲(主题中没有新消息,没有正在处理的消息)的情况下,将我的消费者与Kafka的连接断开了30秒。重新连接后,我收到了如下几条消息: 第一,我不明白有什么好犯的?系统空闲(所有以前的消息都已提交)。第二,断开时间为30秒,比max.poll.interval.ms的5分钟(300000

  • 为什么实际主题中的偏移值与同一主题中的偏移值不同?PFB偏移位置以及使用的命令。 我错过了什么?

  • 在我的例子中,我们有auto.commit.enable=false,以便在处理消息后将offset提交给Zookeeper。如果处理失败,那么offset将不会被提交,我们应该尝试在某个配置的时间内再次处理相同的消息,从zookeeper的offset开始。但它不起作用,因为,我假设,Apache Kafka客户端在内存中保留了偏移量。 我发现kafka.consumer.consumerite