mirror of
				https://github.com/glfw/glfw.git
				synced 2025-10-31 04:32:26 +00:00 
			
		
		
		
	Convert tearing test to GL2
This commit is contained in:
		
							parent
							
								
									f86edf8d3c
								
							
						
					
					
						commit
						fbb2d5e10d
					
				| @ -35,8 +35,34 @@ | |||||||
| #include <stdlib.h> | #include <stdlib.h> | ||||||
| #include <math.h> | #include <math.h> | ||||||
| 
 | 
 | ||||||
|  | #include "linmath.h" | ||||||
| #include "getopt.h" | #include "getopt.h" | ||||||
| 
 | 
 | ||||||
|  | static const struct | ||||||
|  | { | ||||||
|  |     float x, y; | ||||||
|  | } vertices[4] = | ||||||
|  | { | ||||||
|  |     { -0.25f, -1.f }, | ||||||
|  |     {  0.25f, -1.f }, | ||||||
|  |     {  0.25f,  1.f }, | ||||||
|  |     { -0.25f,  1.f } | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | static const char* vertex_shader_text = | ||||||
|  | "uniform mat4 MVP;\n" | ||||||
|  | "attribute vec2 vPos;\n" | ||||||
|  | "void main()\n" | ||||||
|  | "{\n" | ||||||
|  | "    gl_Position = MVP * vec4(vPos, 0.0, 1.0);\n" | ||||||
|  | "}\n"; | ||||||
|  | 
 | ||||||
|  | static const char* fragment_shader_text = | ||||||
|  | "void main()\n" | ||||||
|  | "{\n" | ||||||
|  | "    gl_FragColor = vec4(1.0);\n" | ||||||
|  | "}\n"; | ||||||
|  | 
 | ||||||
| static int swap_tear; | static int swap_tear; | ||||||
| static int swap_interval; | static int swap_interval; | ||||||
| static double frame_rate; | static double frame_rate; | ||||||
| @ -122,6 +148,8 @@ int main(int argc, char** argv) | |||||||
|     int fullscreen = GLFW_FALSE; |     int fullscreen = GLFW_FALSE; | ||||||
|     GLFWmonitor* monitor = NULL; |     GLFWmonitor* monitor = NULL; | ||||||
|     GLFWwindow* window; |     GLFWwindow* window; | ||||||
|  |     GLuint vertex_buffer, vertex_shader, fragment_shader, program; | ||||||
|  |     GLint mvp_location, vpos_location, vcol_location; | ||||||
| 
 | 
 | ||||||
|     while ((ch = getopt(argc, argv, "fh")) != -1) |     while ((ch = getopt(argc, argv, "fh")) != -1) | ||||||
|     { |     { | ||||||
| @ -163,6 +191,9 @@ int main(int argc, char** argv) | |||||||
|         height = 480; |         height = 480; | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|  |     glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 2); | ||||||
|  |     glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 0); | ||||||
|  | 
 | ||||||
|     window = glfwCreateWindow(width, height, "", monitor, NULL); |     window = glfwCreateWindow(width, height, "", monitor, NULL); | ||||||
|     if (!window) |     if (!window) | ||||||
|     { |     { | ||||||
| @ -182,16 +213,44 @@ int main(int argc, char** argv) | |||||||
|     glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); |     glfwSetFramebufferSizeCallback(window, framebuffer_size_callback); | ||||||
|     glfwSetKeyCallback(window, key_callback); |     glfwSetKeyCallback(window, key_callback); | ||||||
| 
 | 
 | ||||||
|     glMatrixMode(GL_PROJECTION); |     glGenBuffers(1, &vertex_buffer); | ||||||
|     glOrtho(-1.f, 1.f, -1.f, 1.f, 1.f, -1.f); |     glBindBuffer(GL_ARRAY_BUFFER, vertex_buffer); | ||||||
|     glMatrixMode(GL_MODELVIEW); |     glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW); | ||||||
|  | 
 | ||||||
|  |     vertex_shader = glCreateShader(GL_VERTEX_SHADER); | ||||||
|  |     glShaderSource(vertex_shader, 1, &vertex_shader_text, NULL); | ||||||
|  |     glCompileShader(vertex_shader); | ||||||
|  | 
 | ||||||
|  |     fragment_shader = glCreateShader(GL_FRAGMENT_SHADER); | ||||||
|  |     glShaderSource(fragment_shader, 1, &fragment_shader_text, NULL); | ||||||
|  |     glCompileShader(fragment_shader); | ||||||
|  | 
 | ||||||
|  |     program = glCreateProgram(); | ||||||
|  |     glAttachShader(program, vertex_shader); | ||||||
|  |     glAttachShader(program, fragment_shader); | ||||||
|  |     glLinkProgram(program); | ||||||
|  | 
 | ||||||
|  |     mvp_location = glGetUniformLocation(program, "MVP"); | ||||||
|  |     vpos_location = glGetAttribLocation(program, "vPos"); | ||||||
|  | 
 | ||||||
|  |     glEnableVertexAttribArray(vpos_location); | ||||||
|  |     glVertexAttribPointer(vpos_location, 2, GL_FLOAT, GL_FALSE, | ||||||
|  |                           sizeof(vertices[0]), (void*) 0); | ||||||
| 
 | 
 | ||||||
|     while (!glfwWindowShouldClose(window)) |     while (!glfwWindowShouldClose(window)) | ||||||
|     { |     { | ||||||
|  |         mat4x4 m, p, mvp; | ||||||
|  |         float position = cosf((float) glfwGetTime() * 4.f) * 0.75f; | ||||||
|  | 
 | ||||||
|         glClear(GL_COLOR_BUFFER_BIT); |         glClear(GL_COLOR_BUFFER_BIT); | ||||||
| 
 | 
 | ||||||
|         position = cosf((float) glfwGetTime() * 4.f) * 0.75f; |         mat4x4_ortho(p, -1.f, 1.f, -1.f, 1.f, 0.f, 1.f); | ||||||
|         glRectf(position - 0.25f, -1.f, position + 0.25f, 1.f); |         mat4x4_translate(m, position, 0.f, 0.f); | ||||||
|  |         mat4x4_mul(mvp, p, m); | ||||||
|  | 
 | ||||||
|  |         glUseProgram(program); | ||||||
|  |         glUniformMatrix4fv(mvp_location, 1, GL_FALSE, (const GLfloat*) mvp); | ||||||
|  |         glDrawArrays(GL_TRIANGLE_FAN, 0, 4); | ||||||
| 
 | 
 | ||||||
|         glfwSwapBuffers(window); |         glfwSwapBuffers(window); | ||||||
|         glfwPollEvents(); |         glfwPollEvents(); | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user