如何使用glBufferData使用不同的行tickness

how to use use different line tickness using glBufferData

本文关键字:tickness 何使用 glBufferData      更新时间:2023-10-16

我有这个代码,它不起作用我不知道为什么,我认为它应该起作用,但fir缓冲区数据似乎被第二个替换了。我想要实现的是第一个具有不同于其他线路厚度的

vector<float> vert={-.4,.2,-.2,.6};
vector<float> vert1={-.9,.9,-.2,.6};
glGenBuffers(1, &pbo1);
glBindBuffer(GL_ARRAY_BUFFER, pbo1);
glBufferData(GL_ARRAY_BUFFER, vert1.size()*sizeof(float), &vert1[0], GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)0, 1, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glGenBuffers(1, &pbo);
glBindBuffer(GL_ARRAY_BUFFER, pbo);
glBufferData(GL_ARRAY_BUFFER, vert.size()*sizeof(float), &vert[0],  GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)0, 1, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);

void draw{
glUseProgram(program);
glBindBuffer(GL_ARRAY_BUFFER, pbo);
glLineWidth(8.0f);
glDrawArrays(GL_LINES, 0,  qtv );
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ARRAY_BUFFER, pbo1);
glLineWidth(1.0f);
glDrawArrays(GL_LINES, 0,  qtv );
glBindBuffer(GL_ARRAY_BUFFER, 0);
glUseProgram(0);
}
glVertexAttribPointer((GLuint)0, 1, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);

这些函数不影响当前绑定的CCD_ 1的状态。事实上,仅仅将缓冲区绑定到GL_ARRAY_BUFFER不会以任何方式影响渲染的内容。

如果您不打算使用VAO来封装这种状态,那么您需要在将缓冲区绑定到GL_ARRAY_BUFFER之后,但在渲染之前,调用这两个函数。也就是说,您需要将其作为draw函数的一部分来执行。