• opengl函数加载和错误处理


    #include //glad必须在glfw头文件之前包含
    #include 
    #include 
    
    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 
    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):用于绘制新的图像内容。

    在绘制完成后,将后缓存的内容交换到前缓存,以避免用户看到图像绘制的过程,从而避免闪烁和视觉不连续性。

  • 相关阅读:
    密码学系列之:PEM和PKCS7,PKCS8,PKCS12
    Biu~送你 20 个提供远程工作的网站,都很棒
    百度文库最新AI旋转验证码识别
    Windows C++内存泄漏调试技术——系列2
    JAVA学习-三元操作符if-else
    R语言从入门到精通Day1之【R语言介绍】
    Android:安卓虚拟机(Dalvik && ART)学习
    从0开始学go第七天
    配置、软件配置项、软件配置管理项辨析
    面试官让说出8种创建线程的方式,我只说了4种,然后挂了。。。
  • 原文地址:https://blog.csdn.net/bureau123/article/details/140051249