**已关闭。**此问题是在寻求有关书籍、工具、软件库等内容的建议。它不符合Stack Overflow guidelines。它目前不接受回答。
我们不允许提问以寻求书籍、工具、软件库等方面的建议。您可以编辑问题,以便使用事实和引文回答。
10天前关门了。
这篇文章是编辑并提交审查8天前.
Improve this question的
我有一个C++代码,可以在远程Linux机器上运行,进行数学计算。我正在使用XQuartz(X窗口终端)从M1 Mac访问Linux机器。我希望能够真实的显示数据图。由于前面的响应,我做了一个更正,但现在我在glDrawArrays函数处崩溃了。
#include <GL/glew.h>
#include <GL/glut.h>
#include <math.h>
GLuint vaoid[2];
GLuint vboid[2];
void init()
{
glClearColor (1.0, 1.0, 1.0, 1.0);
glShadeModel (GL_FLAT);
}
void display()
{
glClear (GL_COLOR_BUFFER_BIT);
glColor3f (0.0, 1.0, 0.0);
glLineWidth(3.0f);
glBegin(GL_LINE_STRIP);
int i;
for (i=0; i<100; ++i)
glVertex2f(i*6, 300+100.*cos(i*2.*M_PI/100));
glEnd();
glBindVertexArray(vaoid[0]);
glDrawArrays(GL_LINE_STRIP, 0, 3); // <-- segfault here
glBindVertexArray(0);
glEnd();
glFlush();
}
void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity ();
gluOrtho2D (0.0, (GLdouble) w, 0.0, (GLdouble) h);
}
void createPoints(void)
{
float vertices[6] = {100., 100., 400., 100., 400., 500.};
glGenVertexArrays(1, vaoid);
glBindVertexArray(vaoid[0]);
glGenBuffers(1, vboid);
glBindBuffer(GL_ARRAY_BUFFER, vboid[0]);
glBufferData(GL_ARRAY_BUFFER, 6*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
glBindVertexArray(0);
}
int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB);
glutInitWindowSize (600, 600);
glutInitWindowPosition (100,100);
glutCreateWindow (argv[0]);
glewExperimental = GL_TRUE;
glewInit ();
createPoints();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutMainLoop();
return 0;
}
字符集
1条答案
按热度按时间rpppsulh1#
segfaulting是因为您没有加载GL函数,并且基本上调用了一个弱链接(但未加载)函数(在本例中为
glGenVertexArrays
)。要解决这个问题,请使用GLEW或GLAD等加载器。另请参阅Load GL Functions和OpenGL Loading Library了解更多信息。我不会为苹果的行为而担心。如果你最终创建了一个更大的代码库,你可以引入API抽象,这样不管OpenGL将来是否被弃用。