c++ - 在 OpenGL 中使用和绑定多个 vbo
问题描述
我正在尝试并学习如何使用多个 VBO 在 OpenGL 中绘制非常不同的对象。第一个 VBO 只是一个文本渲染器,现在与主 VBO 一起使用的着色器只是一个基本的顶点着色器
attribute vec3 vPosition;
void main()
{
gl_Position = vec4(vPosition, 1.0);
}
测试片段着色器:
void main()
{
gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0);
}
代码可以很好地呈现文本,但是只要我调用 UseProgram 并绑定 VAO,就会出现黑屏。
这是我对上述 VAO 的初始化:
//random polygon
points[0]= vec3(-0.5, 0.5, 0.3);
points[1]= vec3(-0.5, -0.5, 0.2);
points[2]= vec3(0.5, -0.5, 0.3);
points[3]= vec3(0.5, 0.5, 0.4);
//Returns a uInt name for a shader program
shader = InitShader("vshader.glsl", "fshader.glsl");
glGenVertexArrays(1, &vao);
glGenBuffers(1, &buffer);
glBindVertexArray(vao);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW);
GLuint loc = glGetAttribLocation(shader, "vPosition");
glEnableVertexAttribArray(loc);
glVertexAttribPointer(loc, 3, GL_FLOAT, GL_FALSE, 3*sizeof(float), BUFFER_OFFSET(0));
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
glClearColor(1.0f, 1.0f, 1.0f, 1.0f); // white background
其中 vao 和 buffer 是以前未初始化的 GLuint,在调试后它们不返回 -1。
这是我要绘制的代码
glUseProgram(shader);
glBindBuffer(GL_ARRAY_BUFFER, buffer);
glBindVertexArray(vao);
glDrawArrays(GL_POLYGON, 0, 4);
glBindVertexArray(0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
解决方案
感谢大家的帮助,我发现在绑定我的第二个 VBO 和 VAO 并绘制它们之前,我需要调用 glFlush() 。
推荐阅读
- vb.net - 使用 Visual Studio 代码,编码 vb.net,如何启动我的程序然后进入调试模式?
- string - PySpark 类型从 String 到 Int 的转换问题
- javascript - 如何在 ASP 中向 JQGrid 中的列添加下拉列表并将其与数据值绑定?
- c++ - 替换为单个 Blackslash 在 Qt 中添加“
- php - 插入替换为 codeigniter 和多个复选框
- javascript - 调用ajax函数从html提交表单如何传递输入值?
- json - 如何在单个数据数组中序列化不同的 protobuf 并在以后提取它们?
- scala - 不使用 val 存储值
- php - Laravel SQL[23000] 删除错误
- java - Postman IllegalArgumentException: 目标对象不能为空",