#include <glad/glad.h>//glad必須在glfw頭文件之前包含
#include <GLFW/glfw3.h>
#include <iostream>void frameBufferSizeCallbakc(GLFWwindow* window, int width, int height)
{glViewport(0, 0, width, height);std::cout << width << "," << height << std::endl;
}
void glfwKeyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{}
int main()
{//初始化glfw環境glfwInit();//設置opengl主版本號glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR,3);//設置opengl次版本號glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);//設置opengl啟用核心模式glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);//創建窗體對象GLFWwindow* window = glfwCreateWindow(800, 600, "lenarnOpenGL", nullptr, nullptr);//設置當前窗體對象為opengl的繪制舞臺glfwMakeContextCurrent(window);//窗體大小回調glfwSetFramebufferSizeCallback(window, frameBufferSizeCallbakc);//鍵盤相應回調glfwSetKeyCallback(window, glfwKeyCallback);//使用glad加載所有當前版本opengl的函數if (!gladLoadGLLoader((GLADloadproc)glfwGetProcAddress)){std::cout << "初始化glad失敗" << std::endl;return -1;}//設置opengl視口大小和清理顏色glViewport(0, 0, 800, 600);glClearColor(0.2f, 0.3f, 0.3f, 1.0f);//執行窗體循環while (!glfwWindowShouldClose(window)){//接受并分發窗體消息//檢查消息隊列是否有需要處理的鼠標、鍵盤等消息//如果有的話就將消息批量處理,清空隊列glfwPollEvents();//執行opengl畫布清理操作glClear(GL_COLOR_BUFFER_BIT);//渲染操作//切換雙緩存glfwSwapBuffers(window);}//推出程序前做相關清理glfwTerminate();return 0;
}
使用gladLoadGLLoader函數可以加載opengl中所有的函數。
glGetError函數可以獲取上行代碼是否報錯以及錯誤信息:
#include <assert.h>
void checkError() {GLenum errorCode = glGetError();std::string error = "";if (errorCode != GL_NO_ERROR) {switch (errorCode){case GL_INVALID_ENUM: error = "INVALID_ENUM"; break;case GL_INVALID_VALUE: error = "INVALID_VALUE"; break;case GL_INVALID_OPERATION: error = "INVALID_OPERATION"; break;case GL_OUT_OF_MEMORY: error = "OUT OF MEMORY"; break;default:error = "UNKNOWN";break;}std::cout << error << std::endl;//assert會根據傳入的bool值,來決定程序是否停止//true:程序順利運行//false:程序會斷死assert(false);}
}
在OpenGL中,雙緩存(Double Buffering)通常用于消除圖像閃爍和提高渲染效率。OpenGL默認情況下使用雙緩存來進行渲染。
雙緩存指的是使用兩個緩存區來交替渲染畫面:
- 前緩存(Front Buffer):顯示器當前顯示的圖像內容。
- 后緩存(Back Buffer):用于繪制新的圖像內容。
在繪制完成后,將后緩存的內容交換到前緩存,以避免用戶看到圖像繪制的過程,從而避免閃爍和視覺不連續性。