C++ OpenGL,绘制形状返回错误
Posted
技术标签:
【中文标题】C++ OpenGL,绘制形状返回错误【英文标题】:C++ OpenGL, drawing shapes is returning an error 【发布时间】:2020-01-13 20:51:03 【问题描述】:我正在尝试在我的应用程序上绘制形状。我已将#include <glad/glad.h>
添加到我的代码中。
我在头文件中将顶点数组、顶点缓冲区和索引缓冲区设置为无符号整数。
在我的 application.h 文件中我添加了这个:
unsigned int m_FCvertexArray; // Textured Phong VAO
unsigned int m_FCvertexBuffer;// Textured Phong VBO
unsigned int m_FCindexBuffer; // Index buffer for texture Phong cube
在我的构造函数的 application.cpp 中,我添加了这个:
Application::Application()
//------------- OPENGL VALUES -----------//
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
// Enabling backface culling to ensure triangle vertices are correct ordered (CCW)
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
////--------DRAW VERTICES---------//
float FCvertices[3 * 3] =
-0.5f, -0.5f, 0.0f,
0.5f, -0.5f, 0.0f,
0.0f, 0.5f, 0.0f
;
glGenVertexArrays(1, &m_FCvertexArray);
glBindVertexArray(m_FCvertexArray);
glCreateBuffers(1, &m_FCvertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_FCvertexBuffer);
//
//
glBufferData(GL_ARRAY_BUFFER, sizeof(FCvertices), FCvertices, GL_STATIC_DRAW);
glEnableVertexAttribArray(0);
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)0);
glEnableVertexAttribArray(1);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 6 * sizeof(float), (void*)(sizeof(float) * 3));
////--------DRAW INDICES---------//
glCreateBuffers(1, &m_FCindexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, m_FCindexBuffer);
unsigned int indices[3] = 0, 1, 2;
glBufferData(GL_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
在我的void Application::run()
中我添加了:
glUseProgram(m_FCprogram);
glBindVertexArray(m_FCvertexArray);
glDrawElements(GL_TRIANGLES, 3, GL_UNSIGNED_INT, nullptr);
现在的问题是当我运行代码时,它给了我标题中提到的错误:
Exception thrown at 0x000000005D78F420 (nvoglv64.dll) in Sandbox.exe: 0xC0000005: Access violation reading location 0x0000000000000000.
我一直在尝试解决此问题的方法,但似乎不起作用。如果我注释掉 glDrawElements,代码会运行并且可以工作,但不会绘制任何形状(很明显)。
【问题讨论】:
你打电话给gladLoadGLLoader
吗?
@Rabbid76 我在哪里叫它,我写什么?
见glad
【参考方案1】:
创建索引缓冲区时,需要使用 GL_ELEMENT_ARRAY_BUFFER 而不是 GL_ARRAY_BUFFER。
【讨论】:
以上是关于C++ OpenGL,绘制形状返回错误的主要内容,如果未能解决你的问题,请参考以下文章