C++ Visual Studio 2008上HelloWorld OpenGL程序中未处理的异常错误
下面是我的opengl代码,它可能做不了什么有意义的事情。我在代码中使用了freeglut库。以下是所有代码的详细信息:C++ Visual Studio 2008上HelloWorld OpenGL程序中未处理的异常错误,c++,opengl,C++,Opengl,下面是我的opengl代码,它可能做不了什么有意义的事情。我在代码中使用了freeglut库。以下是所有代码的详细信息: #include <glload/gll.h> #include <glload/gl_3_0.h> #include <GL/glut.h> #include "glfw3.h" void ChangeSize(int w, int h) { glViewport(0, 0, w, h); } void RenderScene
#include <glload/gll.h>
#include <glload/gl_3_0.h>
#include <GL/glut.h>
#include "glfw3.h"
void ChangeSize(int w, int h)
{
glViewport(0, 0, w, h);
}
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
glLoadIdentity();
glLineWidth(1);
glColor3f(1.0f, 0.0f, 0.0f);
glBegin(GL_LINE);
glVertex3f(0.0f, 0.0f, 0.5f);
glVertex3f(0.0f, 1.0f, 0.5f);
glVertex3f(1.0f, 1.0f, 0.5f);
glEnd();
glMatrixMode(GL_PROJECTION);
glOrtho(-2.0,2.0,-2.0,2.0,-1.0,1.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
int main (int argc, char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH | GLUT_STENCIL);
glutInitWindowSize(800, 600);
glutCreateWindow("Triangle");
// glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
// glShadeModel(GL_SMOOTH);
glutReshapeFunc(ChangeSize);
glutDisplayFunc(RenderScene);
glutMainLoop();
return 0;
}
请注意,我注释掉了两行代码,我没有得到这个错误。为什么在代码中添加这两行中的一行时会出现此错误 您使用空地址调用了函数。调试器将准确地告诉您
在不知道库、上下文等情况下,我猜想您的gl*函数都在“glload/gll.h”或“glfw3.h”中声明为指针。删除这些包含项并将其替换为
#include
,如您在评论中所述
我的目标是OpenGL 4.4.0
出现“访问冲突”错误的原因是您在OpenGL中使用了许多不推荐使用的函数
以下函数是OpenGL 3.1版中不推荐使用的一些函数
- glMatrixMode()
- glLoadIdentity()
- glBegin()
- 格伦德()
- glVertex3*()
- glTexCoord*()
- glNormal*()
- glColor*()
glBegin()
,glEnd()
等被弃用的原因。是因为不推荐使用整个即时模式渲染。现在假设您使用with(和IBOs)
沃
顶点数组对象(VAO)是一个OpenGL对象,它封装了指定顶点数据所需的所有状态(下面有一个小的例外)。它们定义顶点数据的格式以及顶点数组的源。注意,VAO不包含数组本身;数组存储在缓冲区对象中(见下文)。VAO只是引用已经存在的缓冲区对象
资料来源:
VBO
顶点缓冲区对象(VBO)是用作顶点数组数据源的缓冲区对象。它与任何其他缓冲区对象没有区别,用于变换反馈或异步像素传输的缓冲区对象可以用作顶点数组的源值
来源:您的目标是哪个版本的OpenGL?我的目标是OpenGL 4.4.0。请阅读我刚刚发布的答案。嗯,似乎我忘了在我的问题文本中提到我是OpenGL世界的新手。:)在你的回答之后,我从代码中得到这个错误是有道理的。那么,在这种情况下,我是否应该假设在代码顶部添加的所有库都在处理旧的不推荐的函数,这样开发人员就不必处理实现“即时模式”渲染的细节了?@ErdemKAYA您总是可以简单地针对OpenGL的旧版本,比如1.5版之类的。我不确定我是否100%理解您对其余函数的意思,但是,您应该只在实际使用不推荐的函数时,而不只是通过加载库来获得这些错误。关于即时模式的事情,正如我在回答的底部写的,今天我们不使用它,我们使用带VBOs的VAOs,这是一种可以将顶点数据加载到其中并存储在GPU上的缓冲区。
Unhandled exception at 0x00000000 in HelloGL5.exe: 0xC0000005: Access violation.