1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
#define GLEW_NO_GLU
#define GLFW_NO_GLU
#include <GL/glew.h>
#include <GLFW/glfw3.h>
int main()
{
glfwInit();
glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR,3);
glfwWindowHint(GLFW_OPENGL_PROFILE,GLFW_OPENGL_COMPAT_PROFILE);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
GLFWwindow* window = glfwCreateWindow(800, 600, "My Game", NULL, NULL);
glfwMakeContextCurrent(window);
glewExperimental = true;
glewInit();
GLchar* vertexshadersrc="#version 330\n"
"in vec4 position;"
"void main()"
"{"
"gl_Position=position;"
"}";
GLchar* fragmentshadersrc="#version 330\n"
"out vec 4 color;"
"void main()"
"{"
"color=vec4(1.0,0.0,0.0,1.0)"
"}";
GLuint vertexshader=glCreateShader(GL_VERTEX_SHADER);
glShaderSource(vertexshader,1,(const GLchar**)&vertexshadersrc,0);
glCompileShader(vertexshader);
GLuint fragmentshader=glCreateShader(GL_FRAGMENT_SHADER);
glShaderSource(fragmentshader,1,(const GLchar**)&fragmentshadersrc,0);
glCompileShader(fragmentshader);
GLuint programm=glCreateProgram();
glAttachShader(programm,vertexshader);
glAttachShader(programm,fragmentshader);
glLinkProgram(programm);
glDeleteShader(vertexshader);
glDeleteShader(fragmentshader);
GLfloat vertex[]=
{
-0.7f,-0.5f,0.0f,
0.7f,-0.5f,0.0f,
0.0f,0.5f,0.0f,
};
GLuint vertexbuffer;
glGenBuffers(1,&vertexbuffer);
glBindBuffer(GL_ARRAY_BUFFER,vertexbuffer);
glBufferData(GL_ARRAY_BUFFER,sizeof(vertex),vertex,GL_STATIC_DRAW);
GLuint position=glGetAttribLocation(programm,"position");
glVertexAttribPointer(position,3,GL_FLOAT,GL_FALSE,sizeof(GLfloat)*3,(void*)0);
glUseProgram(programm);
glEnableVertexAttribArray(position);
while (!glfwWindowShouldClose(window))
{
glClear(GL_COLOR_BUFFER_BIT);
glDrawArrays(GL_TRIANGLES,0,3);
glfwSwapBuffers(window);
glfwPollEvents();
}
}
|