- 博客(115)
- 资源 (5)
- 问答 (3)
- 收藏
- 关注
原创 Windows下好玩的一些命令(会持续更新)
查看文件的MD5值 certutil -hashfile filename MD5 建立远程桌面连接 mstsc 当然也可以使用TeamViewer 显示桌面键盘 osk 检查windows版本 winver 查看cmd窗口下的所有命令 help 知道命令之后查看命令的使用方法 ...
2019-03-09 14:24:26 4871
原创 C++获取屏幕分辨率(屏幕窗口大小),屏幕显示比例(DPI)几种方法
获取屏幕的分辨率的几种方法 #include <Windows.h>#include <iostream>int main(void) { HWND hd = GetDesktopWindow(); // 方法一 RECT rect; // 只获得窗口客户区的大小 GetClientRect(hd, &rect); int client_wid...
2019-03-08 15:32:46 17946 5
原创 从渲染管线学 GLES2.0(九)----测试与混合
深度测试,根据片段的深度值来判断片段能否被渲染,如果一个物体有遮挡,那么我们只希望绘制我们可以看得到的片段,离我们比较远被遮挡的片段是不希望被绘制出来的。在屏幕空间中,物体表面上的任意点的坐标 z 值代表一个深度值,深度值的范围是 [0, 1],其中值为 0 代表在近平面上,为 1 代表在远平面上,也就是说深度值越小则离观察者是越近的。深度测试发生在模板测试之后,当深度测试被启用的时候,就会将一个片段的深度值与对应位置的深度缓冲值比较,如果这个深度测试失败了,片段也就将会被丢弃。
2024-04-15 10:28:00 947
原创 从渲染管线学 GLES2.0(八)----纹理
纹理环绕纹理环绕的作用主要是为了处理超出 [0, 1] 范围之外的纹理坐标,不同的纹理环绕方式对超出坐标处理的也不一样。在 OpenGL ES 2.0 中,纹理环绕方式有 3 种环绕方式描述GL_REPEAT对纹理的默认行为。重复纹理图像。和GL_REPEAT一样,但每次重复图片是镜像放置的。纹理坐标会被约束在0到1之间,超出的部分会重复纹理坐标的边缘,产生一种边缘被拉伸的效果。
2024-04-12 14:14:42 742
原创 从渲染管线学 GLES2.0(七)----光栅化(包含透视校正)
光栅化是把图元画在屏幕上的一个过程,也就是把图元的顶点数据转换为片段的过程。该过程主要包含两部分工作,第一部分决定窗口内的哪些栅格区域被图元占有,第二部分计算出来每一个顶点的属性值。光栅化都是在视窗变换之后进行的。
2024-04-09 17:28:32 1056
原创 从渲染管线学 GLES2.0(六)----面剔除和视窗变换
之前在变换文章中提到过三维向量的叉乘,它会生成第三个垂直于前两个向量的法向量,叉乘公式为在二维中,是没有 z 的,那么我们可以把 z 当作是 0,那么二维向量的叉乘就变成了这个时候我们就可以把二维向量的叉乘值定义为一个标量二维向量的叉乘公式又为那么我们就可以利用二维向量的叉乘来计算三角形的环绕顺序,同时也可以利用二维向量的叉乘来计算平行四边形的面积。
2024-04-09 09:43:38 754
原创 从渲染管线学 GLES2.0(五)----裁剪
OpenGL 规定了我们可见的顶点都应该在标准视体之内,也就是在标准化设备坐标(NDC)中,每个顶点的 x、y、z 坐标都应该在 -1.0 到 1.0 之间,对应的 xyz 范围就是 -1 <= x,y,z <= 1,超出这个范围的顶点都将不可见。
2024-04-03 17:03:42 669
原创 从渲染管线学 GLES2.0(四)----图元装配
本来这一节应该讲的是裁剪,但是裁剪的时候,根据不同的图元类型处理裁剪的方式也是不一样的,所以在裁剪之前先来说一下图元装配。
2024-04-02 14:37:17 823
原创 从渲染管线学 GLES2.0(三)----变换(MVP变换)
向量最基本的定义就是一个方向,或者更正式的说,向量有一个方向和大小。如果一个向量有两个维度,它表示一个平面的方向,当它有 3 个维度的时候它可以表达一个 3D 世界的方向。比如下面就表示一个平面向量。对于三维向量来讲,一般我们会使用字母上面加一横表示向量,当用在公式时它们通常是这样的由于向量是一个方向,所以有些时候很难形象的将它们用位置表示出来。为了让其更加直观,我们通常设定这个方向的原点为(0, 0, 0),然后指向一个方向。
2024-04-02 13:50:20 1311
原创 从渲染管线学 GLES2.0(二)----着色器
现代 OpenGL ES 渲染管线严重依赖着色器来处理传入的数据,如果不使用着色器,那么用 OpenGL ES 可以做到的事情就只有清除窗口内容了,可见着色器与 OpenGL ES 的重要性。无论是 OpenGL ES 还是其它图形的 API 着色器,通常都是通过一种特殊的编程语言去编写的,对于 OpenGL ES 来说使用的是 GLSL,也就是 OpenGL Shading Language,虽然 GLSL 是一种专门为图形开发设计的语言,但是它与 C 语言非常相似,当然还有一点 C++ 的影子。
2024-03-27 11:43:28 658
原创 从渲染管线学 GLES2.0(一)----初识渲染管线
OpenGL ES 是以满足早期的嵌入式设备的需要,比如移动电话和机顶盒。OpenGL ES 的最初版本 1.0 版源自 OpenGL 的 1.3 版本,并且很快扩展到 OpenGL ES 的 1.1 版本,它是基于 OpenGL 的 1.5 版本,这个版本在带有固定功能图形硬件的手机上得到了很大的普及。随着移动图形硬件变得更强大,主要由于可编程着色器,这促使需要一个新的 OpenGL ES 版本,OpenGL ES2.0 版基于 OpenGL 2.0 版本。
2024-03-25 11:00:03 848
原创 SystemC 学习之与 Verilog 的混合仿真(十)
Systemc 和 verilog 通信方式有两种,一种是 PLI,但是 PLI 只能 verilog 调用 c/c++,不能从 c/c++ 直接调用 verilog,想要从 c/c++ 调用 verilog 的话,需要先用 verilog 调用 c/c++ 函数,然后在 c++ 里面给对应的参数设置好值,然后 verilog 里面再拿这些数据,比较麻烦。还有一种是使用 DPI-C,DPI-C 是 system verilog 里面的,这样的话需要在编译的时候加上 -sverilog 编译选项。
2023-11-13 14:11:36 1173 4
原创 SystemC 学习之与 System Verilog 的混合仿真(九)
Systemc 和 System Verilog 的通信接口有点类似于 c++ 里面的 socket 通信一样,如果要通信,那么需要绑定到相同的一个端口上,这里的端口是一个字符串。编译之前需要更新 gcc 的版本,这里将 gcc 版本降低到 5.2.0,因为 vcs2018 只支持少数几个 gcc 版本,降低 gcc 的版本可以参考之前的文章。对于 sc 的发送端,需要定义输出 socket 接口,然后调用 b_transport 发送。System Verilog 数据回传模块。
2023-11-13 14:05:16 1063
原创 SystemC 学习之 VCS 仿真工具安装(八)
提示找不到 libpng12.so.0,将 vcs_install/libpng12.so.0 下面的 libpng12.so.0 拷贝到 /usr/lib/x86_64-linux-gnu/ 目录下面。然后点击 Generate,这个时候会在当前目录下面生成 Synopsys.dat 文件,然后将这个文件放在 linux 的 license 目录下面。这个时候需要修改之前设置的环境变量,之前 SNPSLMD_LICENSE_FILE 设置了两次,这里需要先将第二次注释掉。
2023-11-13 11:40:45 2105 1
原创 SystemC 学习之 SystemC 验证库(七)
scv_bag 可以为随机数设置加权的分布,使得 scv_smart_ptr 类型的对象的 next() 函数返回的随机数的分布满足所设置的加权分布。约束类:scv_constraint_base,约束类用于定义约束,以及将多个复杂和简单约束合并在一起成为一个更复杂的约束。Systemc 验证库 SCV2.0 为构建高级的 systemc 可重用的验证 IP 提供语言功能,主要包括。软约束失败,会给出一个警告,但是不会影响运行,只不过产生的值会是一个随机值,不再受约束。软约束和硬约束的区别。
2023-10-19 09:34:31 463
原创 SystemC 学习之 SystemC 行为建模(六)
SystemC 通道允许并行的操作,这就涉及同步的问题,比如在同一个时钟的上升沿既读又写,则读的结果应该是写入之前的值,但是怎样才能保证这些呢,一个通用的做法是将对通道的操作分为两个部分进行,即所谓的求值-更新过程,在求值阶段,新的结果被记录,同时保存原有的接口,如果是读操作,则在求值阶段将原有的结果返回,如果是写操作,则接着执行更新的过程,真正将新的数据写入,这里有点类似于 c++ 里面的 i++ 操作,也就是求值慢于更新一个时钟。在设计中,进行规则检查能够尽早的发现设计中一些不合理的地方。
2023-10-19 09:22:56 1209 1
原创 SystemC 学习之 SystemC 波形跟踪(五)
SystemC 允许将仿真结果保存为 VCD 格式,该格式是目前最流行的波形格式之一SystemC 波形跟踪有以下特点只有在整个仿真期间都存在的信号和变量才能被跟踪任何类型的信号和变量包括标量、数组和其他聚合类型都可以被跟踪不同格式的波形文件可以在同一次仿真过程中同时产生,任何一个信号和变量都可以在不同格式的波形文件中不限制次数的被跟踪。
2023-10-16 17:28:13 750
原创 SystemC 学习之 SystemC 进程(四)
在操作系统中,进程是程序在并发环境中的执行过程,它具有动态性、并发性、独立性、异步性和结构性五大特征。使用 C++ 可以很容易的描述系统的顺序行为,但是要描述系统的并发行为是比较困难的,一般会使用多线程和多进程的方式。为了描述硬件系统的并发行为 SystemC 也引入了进程的概念,但是与操作系统的进程和线程相比,它更简单。在 SystemC 中,进程是一个基本的执行单位,被用来仿真目标系统的行为,SystemC 的基本进程有三种。
2023-10-16 17:25:08 1664
原创 SystemC 学习之 SystemC 定点数据类型(三)
在 c++ 中采用浮点数据类型不仅能够很容易的进行算术运算,而且精度高,但是浮点运算在硬件上实现起来特别复杂,因此为了节省硬件资源很多硬件只支持定点运算。为了能够精确地建模和描述定点硬件,必须使用定点数据类型SystemC 专门定义了有符号和无符号的定点数据类型,而且还允许设置定点数据类型的量化和溢出模式SystemC 的四种基本定点数据类型为。
2023-10-12 09:41:40 699
原创 SystemC 学习之 SystemC 基本语法(二)
为了顺利进行编译和链接,任何 systemc 设计都必须包括合适的 systemc 库定义的头文件,systemc 和辛苦包括两个最基本和重要的名字空间,一个是 sc_core,一个是 sc_dt。sc_core 时 SystemC 基本的内核空间,sc_dt 则定义了 SystemC 的最基本数据类型。
2023-10-12 09:25:47 2305
原创 SystemC 学习之 Linux 安装 SystemC(一)
完成一款集成电路需要设计、制造、封装和测试四个步骤。随着集成电路制造技术按照摩尔定律发展,电子系统变得越来越复杂,人们已经可以把复杂的电子系统集成到一个芯片上,这就是所谓的片上系统。对于一个复杂的片上系统,在进行寄存器传输级设计前需要进行深入的系统级仿真,以确认设计的体系架构是否恰当、总线是否能够满足吞吐量和实时性要求以及存储器是否被浪费。所进行的这些仿真要求在芯片的仿真模型上运行大量的软件,以覆盖所需的功能。在寄存器传输级,最广泛使用的两种语言是 VHDL 和 Verilog HDL。
2023-10-10 15:21:58 1223
原创 Ubuntu 22.04 将 gcc 降级为 5.2.0
参考链接:https://github.com/staticfloat/gcc/commit/94801184df727b94bf7b8d64b1f98a22f51325d7。因为 ubuntu 自带的 gcc 是 11,gcc11 默认是 c++17,如果使用 gcc11 编译的话后面需要修改的错误比较多,所以这里先用 gcc-9 编译代码了。参考链接:https://www.jianshu.com/p/0148b44d4cfc。解决办法:找到下面几个文件依次修改,具体可以参考。
2023-10-10 15:11:34 1319
原创 Windows 使用 Detours 进行 HOOK
一、detours 的下载和编译1、下载 Detours:GitHub - microsoft/Detours: Detours is a software package for monitoring and instrumenting API calls on Windows. It is distributed in source code form.2、编译cd Detours\vc打开 Detours.sln 编译运行如果编译失败,重定向一下解决方案3、编译运行成功之后会.
2021-10-24 20:37:59 2984
原创 Windows c++ 读写注册表
背景在 Windows 上面,我们常用注册表作为一个 cache 来保存一些数据,这样当程序下一次启动的时候,读取注册表,就能获取到上一次缓存的结果函数介绍创建指定的注册表项具体函数WINADVAPI LSTATUS APIENTRY RegCreateKeyA ( _In_ HKEY hKey, _In_opt_ LPCSTR lpSubKey, _Out_ PHKEY phkResult);参数介绍hKey:打开的注册表项的句柄,一般为 HKE.
2021-09-19 10:32:59 3999
原创 Windows 下安装 Linux 双系统
1、安装 oh-my-zshhttps://www.cnblogs.com/ExileRiven/p/13555281.html出现 443 无法访问的时候
2021-06-19 22:15:08 538
原创 Windows c++ 崩溃时生成 dump 文件
1、背景在做 Windows 客户端应用开发时,难免遇到程序的崩溃,当程序在 debug 崩溃时,我们可以直接定位到崩溃点,但是当程序打包成 release 发布时,难免也会遇到一些崩溃问题(当然在开发时要尽量保障程序的稳定性),一般遇到这样的崩溃,我们就需要使用 dump 文件加上符号表文件来进行调试程序,所以一般的 CI 除了将 exe 上传以外还需要将符号表信息上传。2、在代码中生成 dump 文件#include <Windows.h>#include <DbgHe
2021-04-18 14:02:09 867
原创 Windows C++ 窗口全屏
1、在一些场景中我们需要将应用程序窗口进行全屏显示,比如一些会议程序,为了观看的清晰度,会将整个渲染窗口全屏显示。下面主要就实现一下这个功能2、首先创建一个窗口LRESULT CALLBACK WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) { switch (uMsg) { case WM_LBUTTONDOWN: break; case WM_PAINT: break
2021-03-30 21:18:29 4760 5
原创 Windows 透明绿边窗口
需求在 Windows 上,一些视频会议软件进行屏幕分享的时候,分享的屏幕时会有一个绿色边框将其标记出来,方便分享人知道当前正在分享的是哪一个屏幕,这篇博客主要就介绍一下如何实现这么一个窗口。我们要做到下面几个点1、始终置顶窗口(WS_EX_TOPMOST)2、透明并且可穿透(WS_EX_LAYERED |WS_EX_TRANSPARENT)3、没有最大化、最小化等(WS_EX_TOOLWINDOW)4、有绿边(使用 Gdiplus::SolidBrush)具体实现1、创建.
2021-03-14 21:25:38 847
原创 求一个数字二进制中 1 的个数
问题描述任意给定一个 32 位无符号的整数 n,计算 n 的二进制表示中 1 的个数,比如 n = 3(011))时,返回 2这是一到笔试面试经典的题目,下面介绍几种解法来实现这一道题目,如果你有更好的解法,欢迎指导交流方法一:普通法通过移位解决,每次向右移一位( >> 1),然后判断最后一位是不是 1(&1),最多循环 32 次int BitCount(unsigned int n){ int count = 0; while (n > 0) {
2021-03-03 10:20:12 278 1
原创 FFmpeg 使用 avpicture_alloc 内存泄漏或者崩溃问题
一、问题在项目中有一个逻辑是当数据帧的分辨率是奇数的时候,会使用crop 进行裁切 yuv 数据,进行 2 对齐,在项目中使用的是av_picture_crop 进行裁切的,具体代码类似于下面这样void Crop() { int32_t src_width = 1234; int32_t src_height = 567; uint8_t* src_buffer = new uint8_t[src_width * src_height * 3 / 2]; // 填充 srcBuffe..
2021-02-26 18:57:25 3323 1
原创 Windows 使用 DuiLib 显示屏幕和窗口缩略图
一、背景在视频会议中,有一个场景是屏幕分享,屏幕分享的时候要预览屏幕和窗口的缩略图,然后选中对应缩略图的窗口进行分享,本篇博客主要记录一下在 Windows 平台下面获取缩略图的一些方法,如果你有更好的方法欢迎交流二、获取和显示缩略图方法一:使用DwmUpdateThumbnailProperties 在指定窗口显示缩略图可以参考即构科技的官方文档说明https://doc-zh.zego.im/zh/2365.html,他们注册缩略图的 API 也是需要将位置传进去,也就是说他们使用...
2021-02-26 18:18:49 2603 5
原创 C++ 优先级队列 priority_queue
问题在刷题或者面试的过程中,我们经常会遇到这样一种题目,给一个数组,求最大或者最小的 k 个数,或者第 k 大或者第 k 小的数字解法看到这样一个题目,首先想到的就是大小堆,创建大小为 k 的大根堆或者小根堆,然后不断的更新堆,下面以求最大的 k 个数字为例,具体代码如下void BuildHeap(std::vector<int>& arr, int index, int len) { int i = index * 2 + 1; while (i &
2021-02-11 13:19:50 484
原创 Windows libyuv 引入 libjpeg
一、问题最近一直在做 Windows 摄像头的采集(关于 Windows 的 Camera 采集后面会有博客单独介绍),使用 libyuv 去做格式的转换,但是在将 MJPEG 转换成 I420 时候一直失败二、原因查找原因发现是默认的 libyuv 是没有把 MJPEG 转 I420 编译进去的,需要我们手动添加 libjpeg 的库,然后将 libjpeg 编译进去三、具体步骤1、下载 libjpeg-turbo 库https://github.com/libjpeg-turbo
2021-01-25 10:03:22 1204 3
原创 duilib开发(十四):使用NSIS打包
一、下载 NSIS 打包工具1、安装 NSIS下载地址:https://nsis.sourceforge.io/DownloadNSIS(Nullsoft Scriptable Install System)是一个开源的 Windows 系统下安装程序制作程序,提供了安装、卸载、系统设置、文件解压缩等功能。NSIS通过脚本语言来描述安装程序的行为和逻辑的。2、安装HW VNIS Edit下载地址:https://sourceforge.net/projects/hmne/HW V
2020-12-24 09:35:11 1197 1
原创 Windows 下编译 WebRTC 记录 + 踩坑
一、具体步骤1、下载安装 Visual Studio2、安装Chromium软件仓库工具(1)下载depot_tools.zip并解压缩,比如我解压缩之后是在 C:\depot_tools\ 这个目录下面(2)将 depot_tools 的路径添加到系统的环境变量,并把它放在最上面(3)在C:\depot_tools\ 目录下面打开 cmd 窗口,然后执行 gclient,这个时候会安装自己的各种工具副本,出现下面的界面表示安装成功如果遇到失败,可以从下面几个角度检查..
2020-12-17 20:13:49 1527 3
Windows下mingw下载(配置好的)
2020-10-11
解析SPS和PPS需要用到的头文件bs.h
2020-03-10
macos 使用VideoToolBox编码H265一直失败
2020-03-17
使用conan拉ffmpeg报错
2020-02-06
C++ 在回调里面调用线程停止函数会崩溃?
2019-12-14
TA创建的收藏夹 TA关注的收藏夹
TA关注的人