Last active
July 4, 2022 07:25
-
-
Save lag945/5d1934c27d4590978c8f1816774ec61d to your computer and use it in GitHub Desktop.
Multi-platform for OpenGL demo. GLFW+GLAD
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
//#define GLFW_INCLUDE_NONE | |
#include <glad/glad.h> | |
#include <GLFW/glfw3.h> | |
int main() | |
{ | |
GLFWwindow* window; | |
/* Initialize the library */ | |
if (!glfwInit()) | |
return -1; | |
/* Create a windowed mode window and its OpenGL context */ | |
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL); | |
if (!window) | |
{ | |
glfwTerminate(); | |
return -1; | |
} | |
/* Make the window's context current */ | |
glfwMakeContextCurrent(window); | |
if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)) | |
{ | |
std::cout << "Failed to initialize GLAD" << std::endl; | |
return -1; | |
} | |
// get version info | |
const GLubyte* renderer = glGetString(GL_RENDERER); // get renderer string | |
const GLubyte* version = glGetString(GL_VERSION); // version as a string | |
printf("Renderer: %s\n", renderer); | |
printf("OpenGL version supported %s\n", version); | |
float points[] = { | |
0.0f, 0.5f, 0.0f, | |
0.5f, -0.5f, 0.0f, | |
-0.5f, -0.5f, 0.0f | |
}; | |
GLuint vbo = 0; | |
glGenBuffers(1, &vbo); | |
glBindBuffer(GL_ARRAY_BUFFER, vbo); | |
glBufferData(GL_ARRAY_BUFFER, 9 * sizeof(float), points, GL_STATIC_DRAW); | |
GLuint vao = 0; | |
glGenVertexArrays(1, &vao); | |
glBindVertexArray(vao); | |
glEnableVertexAttribArray(0); | |
glBindBuffer(GL_ARRAY_BUFFER, vbo); | |
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, NULL); | |
const char* vertex_shader = | |
"#version 100\n" | |
"attribute vec3 vp;" | |
"void main() {" | |
" gl_Position = vec4(vp, 1.0);" | |
"}"; | |
const char* fragment_shader = | |
"#version 100\n" | |
"void main() {" | |
" gl_FragColor = vec4(0.5, 0.0, 0.5, 1.0);" | |
"}"; | |
GLuint vs = glCreateShader(GL_VERTEX_SHADER); | |
glShaderSource(vs, 1, &vertex_shader, NULL); | |
glCompileShader(vs); | |
GLint vertex_compiled; | |
glGetShaderiv(vs, GL_COMPILE_STATUS, &vertex_compiled); | |
if (vertex_compiled != GL_TRUE) | |
{ | |
GLsizei log_length = 0; | |
GLchar message[1024]; | |
glGetShaderInfoLog(vs, 1024, &log_length, message); | |
// Write the error to a log | |
printf("vertex_compiled: %s\n", message); | |
} | |
GLuint fs = glCreateShader(GL_FRAGMENT_SHADER); | |
glShaderSource(fs, 1, &fragment_shader, NULL); | |
glCompileShader(fs); | |
GLint fragment_compiled; | |
glGetShaderiv(fs, GL_COMPILE_STATUS, &fragment_compiled); | |
if (fragment_compiled != GL_TRUE) | |
{ | |
GLsizei log_length = 0; | |
GLchar message[1024]; | |
glGetShaderInfoLog(fs, 1024, &log_length, message); | |
// Write the error to a log | |
printf("fragment_compiled: %s\n", message); | |
} | |
GLuint shader_programme = glCreateProgram(); | |
glAttachShader(shader_programme, fs); | |
glAttachShader(shader_programme, vs); | |
glLinkProgram(shader_programme); | |
/* Loop until the user closes the window */ | |
while (!glfwWindowShouldClose(window)) | |
{ | |
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); | |
glClearColor(1.0f, 0.0f, 0.0f, 1.0f); | |
glUseProgram(shader_programme); | |
glBindVertexArray(vao); | |
// draw points 0-3 from the currently bound VAO with current in-use shader | |
glDrawArrays(GL_TRIANGLES, 0, 3); | |
// update other events like input handling | |
glfwPollEvents(); | |
// put the stuff we've been drawing onto the display | |
glfwSwapBuffers(window); | |
} | |
glfwTerminate(); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
shader改用 webgl/GLES2.0 的#100版本