编译opengl编程指南第八版示例代码通过

最近在编译opengl编程指南第八版的示例代码,如下

 1 #include <iostream>

 2 #include "vgl.h"

 3 #include "LoadShaders.h"

 4 

 5 using namespace std;

 6 

 7 

 8 enum VAO_IDs { Triangles, NumVAOs };

 9 enum Buffer_IDs { ArrayBuffer, NumBuffers };

10 enum Attrib_IDs { vPosition = 0 };

11 GLuint VAOs[NumVAOs];

12 GLuint Buffers[NumBuffers];

13 const GLuint NumVertices = 6;

14 

15 void

16 init(void)

17 {

18     glGenVertexArrays(NumVAOs, VAOs);

19     glBindVertexArray(VAOs[Triangles]);

20     GLfloat vertices[NumVertices][2] = {

21         { -0.90, -0.90 }, // Triangle 1

22         { 0.85, -0.90 },

23         { -0.90, 0.85 },

24         { 0.90, -0.85 }, // Triangle 2

25         { 0.90, 0.90 },

26         { -0.85, 0.90 }

27     };

28     glGenBuffers(NumBuffers, Buffers);

29     glBindBuffer(GL_ARRAY_BUFFER, Buffers[ArrayBuffer]);

30     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices),

31         vertices, GL_STATIC_DRAW);

32     ShaderInfo shaders[] = {

33         { GL_VERTEX_SHADER, "triangles.vert" },

34         { GL_FRAGMENT_SHADER, "triangles.frag" },

35         { GL_NONE, NULL }

36     };

37     GLuint program = LoadShaders(shaders);

38     glUseProgram(program);

39     glVertexAttribPointer(vPosition, 2, GL_FLOAT,

40         GL_FALSE, 0, BUFFER_OFFSET(0));

41     glEnableVertexAttribArray(vPosition);

42 }

43 

44 void

45 display(void)

46 {

47     glClear(GL_COLOR_BUFFER_BIT);

48     glBindVertexArray(VAOs[Triangles]);

49     glDrawArrays(GL_TRIANGLES, 0, NumVertices);

50     glFlush();

51 }

52 

53 int

54 main(int argc, char** argv)

55 {

56     glutInit(&argc, argv);

57     glutInitDisplayMode(GLUT_RGBA);

58     glutInitWindowSize(512, 512);

59     glutInitContextVersion(4, 3);

60     glutInitContextProfile(GLUT_CORE_PROFILE);

61     glutCreateWindow(argv[0]);

62     if (glewInit()) {

63         cerr << "Unable to initialize GLEW ... exiting" << endl;

64         exit(EXIT_FAILURE);

65     }

66     init();

67     glutDisplayFunc(display);

68     glutMainLoop();

69 }

shader代码如下:

//顶点shader

#version 430 core



layout(location = 0) in vec4 vPosition;



void main(){

    gl_Position = vPosition;

}
//片元shader

#version 430 core



out vec4 fColor;



void main(){

    fColor = vec4(0.0, 0.0, 1.0, 1.0);

}

在编译成功运行的时候老是在glGenVertexArrays和glBindVertexArray两个函数出crash,在stackoverflow上面找到了解决的办法,GLEW has trouble accessing some parts of the opengl core profile by default, so saying "glewExperimental = GL_TRUE;" before your call to glewInit() might help.因此只需要加这么一行代码就可以了

 1 int

 2 main(int argc, char** argv)

 3 {

 4     glutInit(&argc, argv);

 5     glutInitDisplayMode(GLUT_RGBA);

 6     glutInitWindowSize(512, 512);

 7     glutInitContextVersion(4, 3);

 8     glutInitContextProfile(GLUT_CORE_PROFILE);

 9     glutCreateWindow(argv[0]);

10     glewExperimental = GL_TRUE;//add

11     if (glewInit()) {

12         cerr << "Unable to initialize GLEW ... exiting" << endl;

13         exit(EXIT_FAILURE);

14     }

15     init();

16     glutDisplayFunc(display);

17     glutMainLoop();

18 }

运行结果如下

 

编译opengl编程指南第八版示例代码通过

你可能感兴趣的:(OpenGL)