当前位置: 首页 > news >正文

游戏引擎学习第三天

视频参考:https://www.bilibili.com/video/BV1XTmqYSEtm/

之前的程序不能退出,下面写关闭窗体的操作
PostQuitMessage 是 Windows API 中的一个函数,用于向当前线程的消息队列发送一个退出消息。其作用是请求应用程序退出消息循环,通常用于处理应用程序的退出或关闭操作。
在这里插入图片描述

参数:
nExitCode:指定退出代码,通常是应用程序的退出状态码。这个值会传递给消息队列中的 WM_QUIT 消息,以便其他线程或系统得知退出时的状态。

当调用 PostQuitMessage 时,它会将一个 WM_QUIT 消息放入当前线程的消息队列。这个消息通常用于结束程序的消息循环。nExitCode 作为退出代码,会在 WM_QUIT 消息中作为一个参数传递。
应用程序的消息循环 (GetMessage 或 PeekMessage) 会检查消息队列,遇到 WM_QUIT 消息时就会退出消息循环,从而结束应用程序的执行。

通常,在窗口程序中,应用程序的消息循环会不断地获取并分发消息。当收到退出消息时,程序就会停止执行消息循环,退出应用程序。
在这里插入图片描述

上面代码收到退出消息之后直接break 没有对资源进行清理

  1. 窗口销毁:在程序退出之前,确保调用 DestroyWindow(hwnd) 来销毁创建的窗口。如果没有销毁,窗口所占用的资源(例如内存、GDI资源等)将得不到释放。
  2. 消息循环退出:在退出消息循环之前,应该确保通过 PostQuitMessage 或手动调用 DestroyWindow 销毁窗口及其资源。避免程序直接跳出循环而不进行清理。
  3. 注册类的清理:如果在程序中注册了自定义窗口类,确保在程序结束时调用 UnregisterClass 来注销窗口类。

清理后面再考虑

在这里插入图片描述

在 Windows GDI(图形设备接口)编程中,Backbuffer(背面缓冲区) 是一个临时的内存区域,用于存储绘制操作的内容,直到所有的渲染完成并准备好显示到屏幕上。使用双缓冲技术来避免屏幕闪烁(flickering)是常见的做法。

在这里插入图片描述

CreateDIBSection 是 Windows GDI 函数之一,用于创建设备独立位图(DIB)并返回一个 HBITMAP(位图句柄),其核心作用是分配内存并将图像数据存储在其中,可以用于绘制图形。它通常用于需要高效图像处理和绘制的场景,如游戏引擎、图形应用程序等。

// 这个函数用于重新调整 DIB(设备独立位图)大小
internal void Win32ResizeDIBSection(int width, int height) {// device independent bitmap(设备独立位图)// TODO: 进一步优化代码的健壮性// 可能的改进:先不释放,先尝试其他方法,再如果失败再释放。// TODO: 释放之前的 DIBSectionif (BitmapHandle) { // 如果位图句柄有效,释放之前创建的 DIBSectionDeleteObject(BitmapHandle); // 删除现有的位图对象}// 如果没有有效的设备上下文(BitmapDeviceContext),则创建一个if (!BitmapDeviceContext) {// TODO: 在某些特殊情况下是否需要重新创建这些对象BitmapDeviceContext =CreateCompatibleDC(0); // 创建一个与屏幕兼容的设备上下文}// 设置位图信息头(BITMAPINFOHEADER)BitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); // 位图头大小BitmapInfo.bmiHeader.biWidth = width;   // 设置位图的宽度BitmapInfo.bmiHeader.biHeight = height; // 设置位图的高度BitmapInfo.bmiHeader.biPlanes = 1;      // 设置颜色平面数,通常为 1BitmapInfo.bmiHeader.biBitCount = 32; // 每像素的位数,这里为 32 位(即 RGBA)BitmapInfo.bmiHeader.biCompression = BI_RGB; // 无压缩,直接使用 RGB 颜色模式// 创建 DIBSection(设备独立位图)并返回句柄BitmapHandle =CreateDIBSection(BitmapDeviceContext, // 设备上下文,NULL 表示不绑定设备&BitmapInfo, // 位图信息,包括位图的大小、颜色深度等DIB_RGB_COLORS, // 使用 RGB 颜色类型&BitmapMemory, // 位图的内存指针,返回图像数据的指针NULL, // 内存映射文件句柄,NULL 表示不使用0);   // 偏移量,通常设置为 0// 释放设备上下文(BitmapDeviceContext)ReleaseDC(0, BitmapDeviceContext); // 释放设备上下文(不再需要继续使用)
}

// 这个函数用于将 DIBSection 绘制到窗口设备上下文
internal void Win32UpdateWindow(HDC DeviceContext, int X, int Y, int Width,int Height) {// 使用 StretchDIBits 将 DIBSection 绘制到设备上下文中StretchDIBits(DeviceContext, // 目标设备上下文(窗口或屏幕的设备上下文)X, Y, Width, Height, // 目标区域的 x, y 坐标及宽高X, Y, Width,Height, // 源区域的 x, y 坐标及宽高(此处源区域与目标区域相同)BitmapMemory,   // 位图内存指针,指向 DIBSection 数据&BitmapInfo,    // 位图信息,包含位图的大小、颜色等信息DIB_RGB_COLORS, // 颜色类型,使用 RGB 颜色SRCCOPY); // 使用 SRCCOPY 操作符进行拷贝(即源图像直接拷贝到目标区域)
}

DIB_RGB_COLORS(RGB 颜色)
当你使用 DIB_RGB_COLORS 时,颜色表条目包含的是 RGB 颜色值,即每个条目由红色(R)、绿色(G)和蓝色(B)三种颜色分量组成(通常是 8 位深度的分量)。这对于颜色深度较高的图像(如 24 位色或 32 位色)非常适用。

DIB_PAL_COLORS(调色板索引)
当使用 DIB_PAL_COLORS 时,颜色表条目通常是索引值,而不是具体的 RGB 值。这意味着每个条目对应一个调色板中的颜色(例如,8 位图像通常使用 256 色的调色板)。在绘制图像时,通过调色板索引来查找实际的颜色。

在这里插入图片描述

在这里插入图片描述

相关文章:

游戏引擎学习第三天

视频参考:https://www.bilibili.com/video/BV1XTmqYSEtm/ 之前的程序不能退出,下面写关闭窗体的操作 PostQuitMessage 是 Windows API 中的一个函数,用于向当前线程的消息队列发送一个退出消息。其作用是请求应用程序退出消息循环,通常用于处…...

帝国CMS7.5仿模板堂柒喜模板建站网 素材资源下载站源码

环境要求:phpmysql、支付伪静态 本套模板采用帝国cms7.5版UTF-8开发,一款非常不错的高端建站源码模板, 适用于中小型网络建站工作室源码模板下载站,支持自定义设置会员组。 源码下载:https://download.csdn.net/down…...

聊一聊Spring中的自定义监听器

前言 通过一个简单的自定义的监听器,从源码的角度分一下Spring中监听的整个过程,分析监听的作用。 一、自定义监听案例 1.1定义事件 package com.lazy.snail;import lombok.Getter; import org.springframework.context.ApplicationEvent;/*** Class…...

【王木头】最大似然估计、最大后验估计

目录 一、最大似然估计(MLE) 二、最大后验估计(MAP) 三、MLE 和 MAP 的本质区别 四、当先验是均匀分布时,MLE 和 MAP 等价 五、总结 本文理论参考王木头的视频: 贝叶斯解释“L1和L2正则化”&#xff…...

智谱AI视频生成模型CogVideoX v1.5开源 支持5/10秒视频生成

今日,智谱技术团队发布了其最新的视频生成模型 CogVideoX v1.5,并将其开源。这一版本是自8月以来,智谱技术团队推出的 CogVideoX 系列中的又一重要进展。 据了解,此次更新大幅提升了视频生成能力,包括支持5秒和10秒的视…...

算法(第一周)

一周周五,总结一下本周的算法学习,从本周开始重新学习许久未见的算法,当然不同于大一时使用的 C 语言以及做过的简单题,现在是每天一题 C 和 JavaScript(还在学,目前只写了一题) 题单是代码随想…...

Linux服务器进程的控制与进程之间的关系

在 Linux 服务器中,进程控制和进程之间的关系是系统管理的一个重要方面。理解进程的生命周期、控制以及它们之间的父子关系对于系统管理员来说至关重要。以下是关于进程控制、进程之间的关系以及如何管理进程的详细介绍: 1. 进程的概念 进程&#xff0…...

机器学习Housing数据集

import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.datasets import fetch_openml 设置Seaborn的美观风格 sns.set(style“whitegrid”) Step 1: 下载 Housing 数据集,并读入计算机 def load_housing_data(): housing …...

随着最新的补丁更新,Windows 再次变得容易受到攻击

SafeBreach专家Alon Leviev发布了一款名为 Windows Downdate的工具,可用于对Windows 10、Windows 11 和 Windows Server 版本进行降级攻击。 这种攻击允许利用已经修补的漏洞,因为操作系统再次容易受到旧错误的影响。 Windows Downdate 是一个开源Pyth…...

【Python】爬虫通过验证码

1、将验证码下载至本地 # 获取验证码界面html url http://www.example.com/a.html resp requests.get(url) soup BeautifulSoup(resp.content.decode(UTF-8), html.parser)#找到验证码图片标签,获取其地址 src soup.select_one(div.captcha-row img)[src]# 验证…...

dc-aichat(一款支持ChatGPT+智谱AI+讯飞星火+书生浦语大模型+Kimi.ai+MoonshotAI+豆包AI等大模型的AIGC源码)

dc-aichat 一款支持ChatGPT智谱AI讯飞星火书生浦语大模型Kimi.aiMoonshotAI豆包AI等大模型的AIGC源码。全网最易部署,响应速度最快的AIGC环境。PHP版调用各种模型接口进行问答和对话,采用Stream流模式通信,一边生成一边输出。前端采用EventS…...

检索增强生成

检索增强生成 检索增强生成简介 检索增强生成(RAG)旨在通过检索和整合外部知识来增强大语言模型生成文本的准确性和丰富性,其是一个集成了外部知识库、信息检索器、大语言模型等多个功能模块的系统。 RAG 利用信息检索、深度学习等多种技术…...

操作系统--进程

2.1.1 进程的概念、组成、特征 进程的概念 进程的组成 进程的特征 总结 2.1.2 进程的状态与转换,进程的组织 创建态、就绪态 运行态 阻塞态 终止态 进程状态的转换 进程的组织 链式方式 索引方式 2.1.3 进程控制 如何实现进程控制? 在下面的例子,将PCB2的是state设为1和和把…...

abap 可配置通用报表字段级日志监控

文章目录 1.功能需求描述1.1 功能1.2 效果展示2.数据库表解释2.1 表介绍3.数据库表及字段3.1.应用日志数据库抬头表:ZLOG_TAB_H3.2.应用日志数据库明细表:ZLOG_TAB_P3.3.应用日志维护字段配置表:ZLOG_TAB_F4.日志封装类5.代码6.调用方式代码7.调用案例程序demo1.功能需求描述 …...

OpenCV视觉分析之目标跟踪(11)计算两个图像之间的最佳变换矩阵函数findTransformECC的使用

操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 根据 ECC 标准 78找到两幅图像之间的几何变换(warp)。 该函数根据 ECC 标准 ([78]) 估计最优变换(warpMatri…...

PGMP-串串0203 项目集管理绩效域战略一致性

1.项目集管理绩效域 2.战略一致性 战略一致性包含内容商业论证BC项目集章程项目集路线图环境评估项目集风险管理策略 前期formulation sub-phaseplanning sub-phase组织的战略计划项目集风险管理策略项目集管理计划商业论证BC项目集章程项目集路线图环境评估...

HiveMetastore 的架构简析

HiveMetastore 的架构简析 Hive Metastore 是 Hive 元数据管理的服务。可以把元数据存储在数据库中。对外通过 api 访问。 hive_metastore.thrift 对外提供的 Thrift 接口定义在文件 standalone-metastore/src/main/thrift/hive_metastore.thrift 中。 内容包括用到的结构体…...

【WRF模拟】全过程总结:WPS预处理及WRF运行

【WRF模拟】全过程总结:WPS预处理及WRF运行 1 数据准备1.1 嵌套域设置(Customize domain)-基于QGis中gis4wrf插件1.2 静态地理数据1.2.1 叶面积指数LAI和植被覆盖度Fpar(月尺度)1.2.2 地面反照率(月尺度)1.2.3 土地利用类型+不透水面积1.2.4 数据处理:geotiff→tiff(W…...

linux基础理解和使用 iptables 防火墙

本文档旨在编写一份详尽的 iptables基础 使用指南,涵盖其核心概念、使用方法以及高级技巧。将结合图表和示例,更好地理解和应用 iptables。 1. 什么是 iptables? iptables 是 Linux 系统自带的包过滤防火墙,它与内核空间的 netf…...

【系统架构设计师】2024年下半年真题论文: 论软件维护及其应用(包括参考素材)

更多内容请见: 备考系统架构设计师-专栏介绍和目录 文章目录 真题题目(2024年下半年 试题2)论文素材参考软件维护的类型软件维护的方法软件维护应用案例分析软件维护面临的挑战与应对策略真题题目(2024年下半年 试题2) 请围绕 “论软件维护及其应用” 论题,依次从以下三…...

RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程

本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发,其初衷是为了满足他自己的一个项目需求,即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源,Redis凭借其简单易用、…...

JDK 17 序列化是怎么回事

如何序列化?其实很简单,就是根据每个类型,用工厂类调用。逐个完成。 没什么漂亮的代码,只有有效、稳定的代码。 代码中调用toJson toJson 代码 mapper.writeValueAsString ObjectMapper DefaultSerializerProvider 一堆实…...

node.js的初步学习

那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...

rm视觉学习1-自瞄部分

首先先感谢中南大学的开源,提供了很全面的思路,减少了很多基础性的开发研究 我看的阅读的是中南大学FYT战队开源视觉代码 链接:https://github.com/CSU-FYT-Vision/FYT2024_vision.git 1.框架: 代码框架结构:readme有…...

向量几何的二元性:叉乘模长与内积投影的深层联系

在数学与物理的空间世界中,向量运算构成了理解几何结构的基石。叉乘(外积)与点积(内积)作为向量代数的两大支柱,表面上呈现出截然不同的几何意义与代数形式,却在深层次上揭示了向量间相互作用的…...

【Vue】scoped+组件通信+props校验

【scoped作用及原理】 【作用】 默认写在组件中style的样式会全局生效, 因此很容易造成多个组件之间的样式冲突问题 故而可以给组件加上scoped 属性, 令样式只作用于当前组件的标签 作用:防止不同vue组件样式污染 【原理】 给组件加上scoped 属性后…...

第21节 Node.js 多进程

Node.js本身是以单线程的模式运行的,但它使用的是事件驱动来处理并发,这样有助于我们在多核 cpu 的系统上创建多个子进程,从而提高性能。 每个子进程总是带有三个流对象:child.stdin, child.stdout和child.stderr。他们可能会共享…...

JS的传统写法 vs 简写形式

一、条件判断与逻辑操作 三元运算符简化条件判断 // 传统写法 let result; if (someCondition) {result yes; } else {result no; }// 简写方式 const result someCondition ? yes : no;短路求值 // 传统写法 if (condition) {doSomething(); }// 简写方式 condition &…...

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)

LSTM-XGBoost多变量时序预测(Matlab完整源码和数据) 目录 LSTM-XGBoost多变量时序预测(Matlab完整源码和数据)效果一览基本介绍程序设计参考资料 效果一览 基本介绍 普通的多变量时序已经用腻了,审稿人也看烦了&#…...