关于SwapBuffers(HDC);的效率问题

ops/2024/10/19 3:27:56/

最近笔者在尝试使用SwapBuffers(hdc);函数时,遇到了严重的效率问题,通过查阅资料发现了是因为windows中开启垂直同步的原因,由于垂直同步会强制画面的刷新率匹配显示器的刷新率,因此开启垂直同步之后,若画面的刷新率快于显示器的刷新率,就会发生阻塞强行等待一段时间一匹配显示器的刷新率,因此造成了画面严重卡顿的问题。

windows开启垂直同步的方法:

// member call
typedef void (APIENTRY *PFNWGLEXTSWAPCONTROLPROC) (int);
typedef int (*PFNWGLEXTGETSWAPINTERVALPROC) (void);
PFNWGLEXTSWAPCONTROLPROC wglSwapIntervalEXT = NULL;
PFNWGLEXTGETSWAPINTERVALPROC wglGetSwapIntervalEXT = NULL;// init VSYNC setting
char* extensions = (char*)glGetString(GL_EXTENSIONS);
if (strstr(extensions,"WGL_EXT_swap_control")) {wglSwapIntervalEXT = (PFNWGLEXTSWAPCONTROLPROC) wglGetProcAddress("wglSwapIntervalEXT");wglGetSwapIntervalEXT = (PFNWGLEXTGETSWAPINTERVALPROC) wglGetProcAddress("wglGetSwapIntervalEXT");
}// DisableVSync
wglSwapIntervalEXT(0);

参考资料:
Re: How to use wglSwapBuffers?
Why SwapBuffers slows down the performance?
opengl 打开和关闭垂直同步方法


http://www.ppmy.cn/ops/38892.html

相关文章

【XR806开发板试用】阻塞式串口发送与接收教程

本文基于wsl2搭建的ubuntu18.04 vscode编辑器 很奇怪啊,找了半天居然没人发串口的教程,于是只能自己试一试了,在此发一个阻塞式的串口发送与接收的教程。并且,感谢.ACE彭洪权大佬在我配置环境遇到几十个报错的时候帮我远程搭建环…

VMware Workstation 17 Player 创建虚拟机教程

本教程是以windows server 2012物理机服务器安装好的VMware Workstation 17 Player为例进行演示,安装VMware Workstation 17 Player大家可以自行网上搜索安装。 1、新建虚拟机 双击安装好的VMvare图标,点击创建虚拟机。 2、选择是否安装系统 本步骤选…

Flutter TolyUI 框架#01 | 响应式布局#使用篇

theme: cyanosis 本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究! 《Flutter TolyUI 框架》系列前言: TolyUI 是 张风捷特烈 打造的 Fluter 全平台应用开发 UI 框架。具备 全平台、组件化、…

[GXYCTF 2019]Ping Ping Ping(内联执行)、[鹤城杯 2021]EasyP ($_SERVER)

目录 [GXYCTF 2019]Ping Ping Ping 内联执行 [鹤城杯 2021]EasyP [PHP_SELF]、$_SERVER[SCRIPT_NAME] 与 $_SERVER[REQUEST_URI] RCE命令注入可参考: RCE漏洞及其绕过——[SWPUCTF 2021 新生赛]easyrce、caidao、babyrce-CSDN博客 [GXYCTF 2019]Ping Ping Pin…

Java | Leetcode Java题解之第78题子集

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsets(int[] nums) {dfs(0, nums…

C++笔试训练

i和i区别 #define _CRT_SECURE_NO_WARNINGS //i和i的区别 #include <stdio.h> int main(void) {int i 8;printf("%d\n", i);//9printf("%d\n", --i);//8printf("%d\n", i);//8printf("%d\n", i--);//9printf("%d\n"…

Redis 实战之客户端属性

客户端属性 套接字描述符名字标志输入缓冲区命令与命令参数命令的实现函数输出缓冲区身份验证时间总结 客户端状态包含的属性可以分为两类&#xff1a; 一类是比较通用的属性&#xff0c; 这些属性很少与特定功能相关&#xff0c; 无论客户端执行的是什么工作&#xff0c; 它们…

如何编写可读性高的嵌入式 C 语言代码?|2024网盘分享6.89G嵌入式-物联网 嵌入式新手C语言必学教程

目录 面向对象的 C 基础知识 结构体 函数指针 将函数指针作为结构体的成员 面向对象语言的特性 语言层次的面向对象 C 语言的面向对象 定义接口 接口的实现 测试 测试代码 结束语 面向对象的 C 面向对象的语言更接近人的思维方式&#xff0c;而且在很大程度上降低了…