自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

GPU全栈博主-程序哥

技术成就梦想,知识改变命运 !

  • 博客(435)
  • 资源 (22)
  • 收藏
  • 关注

原创 一文带你了解GPU编程从入门到精通

本系列文章持续更新中...

2024-08-10 21:00:26 1314

原创 一文带你了解C++编程从入门到精通

本系列文章持续更新中...

2024-08-10 13:57:19 664

原创 C++ 在项目中使用Shell 脚本

本文介绍下Shell 脚本语法,以便在项目中使用 Shell 脚本。

2024-09-11 18:02:32 188

原创 C++ 在项目中使用Linux命令

Linux 命令是由shell解析并转发给操作系统执行的,所有的shell都是从 Bourne shell(/bin/sh)派生的,Bourne shell是贝尔实验室为早期版本的Unix开发的标准shell。每个Unix系统都需要一个版本的Bourne shell才能正常工作。现在的Linux使用Bourne shell的增强版本,称为bash。bash shell是大多数Linux发行版上的默认shell。

2024-09-11 12:18:32 168

原创 C++ 在项目中使用Git

【代码】C++ 在项目中使用Git。

2024-09-10 14:16:47 446 1

原创 C++ STL find_end 用法

给定两个序列A和B,用于在序列 A 中查找序列 B 最后一次出现的位置。

2024-09-03 06:44:11 182

原创 C++ STL search 用法

给定序列A和B, 该算法用于在A中查找B第一次出现的位置,一般B为A的子序列,通常用于查找B在A中出现的位置。

2024-09-03 06:41:19 242

原创 C++ STL find_first_of 用法

给定两个序列 A 和 B,在A序列中查找是否存在B序列中的元素,如找到则返回第一匹配到的元素。

2024-09-02 23:26:01 239

原创 CUDA编程08 - 并行编程思维

到目前为止,我们集中于学习并行编程的实用知识,包括CUDA编程接口特性、GPU架构、性能优化技术、并行模式和应用案例研究。在本章中,我们将讨论更为抽象的概念。我们将并行编程概括为一种思维过程,即设计或选择并行算法,并将一个实际问题分解基本的工作单元,这些工作单元可以由所选的算法高效地执行。具备强大思维技能的程序员不仅会分析问题,还会转变实际问题的结构:哪些部分本质上是串行的,哪些部分适合并行执行,以及将前者的部分转移到后者所涉及的一些权衡。

2024-09-02 23:14:47 1168

原创 驱动开发系列17 - PCI总线

PCI(外设计算机互连)或PCIe总线是现代计算机的主要组成部分,了解它的工作原理对于理解许多Linux设备驱动程序非常重要。关于PCI总线本身有很多好的信息(在维基百科和其他地方),而Linux内核中也有关于PCI处理子系统实际实现的文档。然而,这两种现有来源之间存在一个空白,本文希望填补这个空白。虽然我在这里的重点是理解x86环境下的PCI/PCIe,但这些内容对其他操作系统和非x86硬件也应该是相关的。因为这是对PCI的概述,而不是教科书,所以这里有许多简化和省略。

2024-09-01 20:22:47 425

原创 驱动开发系列16 - Linux Graphics DRM和KMS内核模块介绍

直接渲染管理器”(DRM)和“内核模式设置”(KMS)API 是 Linux 图形系统的重要组成部分。然而,关于它们具体是什么的文档非常难以找到——而谷歌搜索到的大部分内容都是完全过时的。看起来在这个领域工作的人们太忙了,无法进行文档编写。这篇文章提供了关于 DRM 内核模块内部实现细节的更详细信息。

2024-09-01 14:50:46 395

原创 驱动开发系列15 - Linux Graphics Xorg 详解

这篇文章简要概述了在Linux系统上生成图形的过程。

2024-09-01 08:11:22 819

原创 渲染引擎实践 - UnrealEngine引擎中启用 Vulkan 和使用 Renderdoc 抓帧

1. 到 .\Engine\UE_5.2\Engine\Binaries\Win64 目录下(以Windows平台为例),找到UnrealEditor, 并创建桌面快捷方式。1. 先打开RenderDoc, 在RenderDoc中配置 Launch Application。2. 右键快捷方式,配置运行参数: -vulkan -AttachRenderDoc。

2024-08-30 06:53:39 216

原创 Vulkan进阶系列1 - Raytracing 光线查询

为了提高效率,光线追踪需要将几何体组织成加速结构(AS, 即Acceleration Structure),以减少渲染过程中光线与三角形的相交测试次数。这种层次结构通常在硬件中实现,但只有两个层级对用户可见:一个顶层加速结构(TLAS),它引用任意数量的底层加速结构(BLAS)。通常,BLAS对应于场景中的单个3D模型,而TLAS对应于整个场景。BLAS实际存储顶点数据。

2024-08-30 00:15:13 563

原创 驱动开发系列14 - Linux Graphics Wayland 详解

Wayland 是一种通信协议,规定了显示服务器与其客户端之间的通信,以及该协议的 C 语言库实现。使用 Wayland 协议的显示服务器称为 Wayland 合成器,因为它还执行合成窗口管理器的任务。Wayland 由一组志愿者开发,最初由 Kristian Høgsberg 领导,作为一个自由和开源的社区驱动项目,旨在用一个安全且更简单的窗口系统取代 X Window System,以适用于 Linux 和其他类 Unix 操作系统。

2024-08-29 19:05:07 570

原创 C++ STL search_n 的用法和实现

在容器中查找多个元素,比如连续相等的 n 个元素,或者满足条件的 n 个相邻元素。

2024-08-28 07:48:50 210

原创 C++ STL adjacent_find 用法与实现

在一个容器中查找相邻元素对,比如查找出两个相等的相邻元素,或查找满足给定条件的两个相邻元素。

2024-08-28 07:35:36 178

原创 Vulkan入门系列18 - 计算着色器(Compute Shader)

在这一章节中,我们将探讨计算着色器。到目前为止,之前的所有章节都涉及了Vulkan管线的传统图形部分。但与OpenGL等传统API不同,Vulkan中中计算着色器的支持是强制性的。这意味着我们可以在每个可用的Vulkan实现上使用计算着色器,无论是高端桌面GPU还是低功耗嵌入式设备。这为图形处理单元(GPGPU)上的通用计算打开了新世界,无论您的应用程序运行在哪里。GPGPU意味着您可以在GPU上进行通用计算,这在传统上是CPU的领域。

2024-08-27 23:02:48 388

原创 Vulkan入门系列17 - 多重采样( Multisampling)

我们的程序现在可以加载多个级别的纹理,从而解决了在渲染远离观察者的物体时出现的伪影问题。现在图像变得平滑多了,但仔细观察,你会发现绘制的几何图形边缘呈现锯齿状。这在我们早期渲染一个四边形的程序中尤为明显:这种不希望有的效果被称为 “锯齿”,这是由于可用于渲染的像素数量有限造成的。由于没有无限分辨率的显示器,因此在某种程度上总是会出现这种现象。解决这一问题的方法有很多,本章我们将重点介绍其中一种比较常用的方法: 多采样抗锯齿 (MSAA)。

2024-08-26 00:14:00 364

原创 Vulkan入门系列16 - 生成多级纹理贴图( Mipmaps)

我们的程序现在可以加载和渲染 3D 模型了。在本章中,我们将再添加一项功能-- Mipmaps 生成。Mipmaps 广泛应用于游戏和渲染软件中,Vulkan 让我们可以完全控制 Mpmaps 的生成方式。Mipmaps 是预先计算的、缩放的图像。每个新图像的宽度和高度都是前一个图像的一半。Mipmaps 是一种细节层次(Level of Detail)或 LOD 的形式。距离摄像机较远的物体将从较小的 mip 图像中获取纹理样本。使用较小的图像可以提高渲染速度,避免出现摩尔纹等人工痕迹。

2024-08-25 22:58:57 187

原创 Vulkan入门系列15 - 加载模型

现在,我们的程序已经可以渲染带纹理的 3D 网格图形了,但我们前面文章中使用的几何图形还不是很有趣。在本章中,我们将扩展程序功能,从实际的3D模型文件中加载顶点和索引数据,让显卡做些实际有趣的工作。许多图像API教程都像本章这样,让读者编写自己的 OBJ 加载器。这样做的问题是,任何稍微有趣的3D应用需要一些该(OBJ)文件格式不支持的功能,比如骨骼动画。在本章中,我们将从 OBJ 模型中加载网格数据,但我们将更多地关注网格数据和程序本身,而不是从文件中加载网格数据的细节。

2024-08-25 14:34:27 142

原创 Vulkan入门系列14 - 深度缓冲区

到目前为止,我们已经将几何体投影到 3D 中,但它仍然是完全平面的。在本章中,我们将为位置添加一个 Z 坐标,为 3D 网格做好准备。我们将使用第三个坐标将一个正方形放置在另一个正方形上面,以了解几何体未按深度排序时出现的问题。二:3D几何......接下来,更新顶点着色器,以接受并转换三维坐标作为输入。之后不要忘记重新编译!...最后,更新顶点数组以包含 Z 坐标:如果现在运行您的应用程序,您应该会看到与之前完全相同的结果。

2024-08-24 21:33:22 185

原创 Vulkan入门系列13 - Texture Mapping 图像采样器描述符

在之前的一致(uniform)缓冲区文章中,我们首次学习了描述符。在本章中,我们将学习一种新型描述符:图像采样器描述符。通过这种描述符,着色器可以通过采样器对象访问图像资源,就像我们在上一章中创建的采样器对象一样。我们将首先修改描述符布局、描述符池和描述符集,以包含这样一个图像采样器描述符。之后,我们将在顶点中添加纹理坐标,并修改片段着色器,以便从纹理中读取颜色,而不仅仅是对顶点颜色进行插值。

2024-08-24 11:45:23 70

原创 驱动开发系列11 - Linux Graphics 图形栈概述(二)

1. 1993 年:外设组件互连(PCI), 32 位和 33.33 MHz ,最大传输速率 133 MB/s。2. 1996 年:加速图形端口(AGP),32 位和 66.66 MHz,最大传输速率:266 至 2133 MB/秒(1x 至 8x)。3. 2004 年:PCI Express(PCIe),1 条通道 0.25 - > 2 GB/秒(PCIe v1.x - > 4.0),高达 32 个通道(高达 64 GB/s),改善设备间通信(无仲裁)。

2024-08-23 01:40:56 308

原创 驱动开发系列13 - Linux Graphics 图形驱动概述(二)

多年来,Linux图形堆栈经历了无数次演变。本节将详细介绍这段历史,并给出更改背后的理由。

2024-08-23 00:04:19 260

原创 驱动开发系列12 - Linux Graphics 图形驱动概述(一)

图形加速是一门复杂的艺术,常常受到不公正的“巫术”声誉的困扰。本书旨在介绍Linux下图形驱动程序的内部工作原理和开发。整本书都需要具备C语言编程知识,并对图形处理器有一定的了解。尽管其主要读者是图形驱动开发者,但本文详细介绍了完整的Linux图形栈的内部结构,因此对希望增强对Linux图形世界理解的应用程序开发者也很有帮助:人们可以通过更好地理解Linux图形栈来提高应用程序的性能。在当今这个3D图形和GPU计算普及的时代,深入理解图形是必不可少的。本文以相关硬件概念的介绍开始(第2节)。

2024-08-22 23:25:32 390

原创 Vulkan入门系列12 - Texture Mapping 图像视图和纹理采样

本章我们将创建两个资源,它们用于图形流水线从图像中采样。第一个资源是我们在处理交换链图像时已经见过的,但第二个资源是新的——它与着色器如何从图像中读取像素有关。

2024-08-21 20:14:11 90

原创 C++ STL find_if find_if_not 用法

条件查找,在容器中线性查找满足/不满足条件的元素。

2024-08-21 10:16:28 267

原创 C++ STL find 用法

线性查找,返回第一个查找到的元素位置,若未找到返回容器 end() 迭代器(即最后一个元素之后的位置)。

2024-08-21 10:09:08 176

原创 C++ UML 使用 doxygen 生成源码类图

命令行输入 doxywizard,打开图形界面。

2024-08-20 14:14:49 221

原创 Vulkan入门系列11 - Texture Mapping 图像

到目前为止,在我们介绍的例子中,几何体已经使用每个顶点的颜色进行了着色,这是一种相当有限的方法。在本教程的这一部分,我们将实现纹理映射,使几何体看起来更加有趣。这也将使我们能够在未来的章节中加载和绘制基本的3D模型。将一个纹理添加到我们的应用程序将需要以下几步:1. 创建一个图像对象,并存到设备内存中。2. 从图像文件中读取像素,并填充到图像对象中。3. 创建一个图像采样器。4. 添加一个图像采样器描述符以从纹理中采样颜色。

2024-08-20 09:57:17 202

原创 Vulkan入门系列10 - Uniform Buffer 资源描述符集

上一篇文章介绍了资源描述符布局(descriptor layout)。在本篇文章中,我们将为每个 VkBuffer 资源创建一个描述符集(descriptor set),介绍资源描述符集的使用。描述符布局(descriptor layout) 与 描述符集(descriptor set)的通俗解释:1. 描述符布局是用来描述资源的存储格式,数据类型,大小等信息,有了这些信息,着色器其才能访问,要不然资源就是一堆二进制数据,着色器是不知道它表示的是啥内容的。

2024-08-19 14:22:48 289

原创 CUDA编程07 - 卷积的优化

在接下来的几篇文章中,我们将讨论一组重要的并行计算模式。这些模式是许多并行算法的基础,这些算法出现在许多并行应用中。我们将从卷积开始,卷积是一种流行的数组操作,广泛应用于信号处理、数字录音、图像处理、视频处理和计算机视觉等领域。在这些应用领域中,卷积通常作为一种滤波器,转化信号和像素为更理想的值。我们的图像模糊核就是这样一种滤波器,它平滑信号值,以便人们能够看到整体趋势。另一个例子是高斯滤波器,这是一种卷积滤波器,可以用来锐化图像中物体的边界和边缘。卷积通常执行大量的算术运算,以生成每个输出元素。

2024-08-19 00:27:37 701

原创 LLVM - 编译器后端-指令选择

任何后端的核心都是指令选择。LLVM 实现了几种方法;在本篇文章中,我们将通过选择有向无环图(DAG)和全局指令选择来实现指令选择。在本篇文章中,我们将学习以下主题:• 定义调用约定的规则:本节展示如何在目标描述中设置调用约定的规则。• 通过选择 DAG 进行指令选择:本节介绍如何使用图数据结构实现指令选择。• 添加寄存器和指令信息:本节解释如何访问目标描述中的信息,以及一些额外提供的信息。• 设置堆栈空间:本节介绍堆栈布局和函数调用栈。

2024-08-19 00:18:05 1036

原创 C++ STL priority_queue 用法

【代码】C++ STL priority_queue 用法。

2024-08-18 14:08:32 158

原创 C++ 语言特性02 - 命名空间

现代C++中的命名空间是什么?C++中的命名空间允许用户在命名空间范围内对类、方法、变量和函数等实体进行分组,而不是在全局范围内使用。这可以防止大型项目中的类、方法、函数和变量之间发生命名冲突。命名空间将开发人员的元素组织到由命名引用的不同逻辑范围中。因此,不同的用户(或命名空间)可以在不同的运行进程中使用相同的方法名和变量。return 0;在现代C++中,命名空间是一种库或框架。

2024-08-16 07:17:31 193

原创 LLVM - 编译器后端-目标描述

LLVM具有非常灵活的架构。我们可以向其添加新的目标后端。后端的核心是目标描述。在本篇文章中,我们将学习如何在LLVM中添加一个CPU后端。在本章中,我们将涵盖以下内容:• 为新的后端搭建环境,学习M88k CPU架构,并介绍从哪里可以找到所需的信息。• 将新架构添加到Triple类中,学习如何让LLVM识别新的CPU架构。• 扩展LLVM中的ELF文件格式定义,向处理ELF目标文件的库和工具添加对M88k特有重定位的支持。

2024-08-16 00:21:05 1299

原创 C++ STL sort_heap 用法

【代码】C++ STL sort_heap 用法。

2024-08-15 14:56:47 335

原创 Vulkan入门系列9 - Uniform Buffer 资源描述符布局

我们现在可以通过使用Vertex Buffer的形式,将顶点的任意属性传递到顶点着色器,但全局变量如何传递给着色器呢?从这一篇文章开始,我们将进入3D图形绘制阶段,这需要一个模型视图投影矩阵。我们可以将其作为顶点数据放到Vertex buffer中,但这会浪费内存,并且每当发生矩阵变换时,我们都需要更新顶点缓冲区。这些矩阵变换可能在每一帧中都会发生(如改变相机视角位置等)。在Vulkan中解决这个问题的正确方法是使用资源描述符。描述符是一种让着色器自由访问像缓冲区和图像等资源的方式。

2024-08-15 14:01:59 86

原创 C++ STL make_heap 用法

构建堆(默认大顶堆)

2024-08-15 10:11:32 145

Vulkan 环境搭建和示例代码

包含Vulkan 绘制三角形示例代码,编译脚本,以及环境搭建步骤,支持Window, Linux ,跨平台。

2024-08-10

Low level GLSL Optimisation.pdf

GLSL着色器优化书籍,OpenGL Shader Language Optimisation

2024-07-08

LEX 和 YACC 教程.pdf

编译器前端使用教程,LEX-YACC Tutorial

2024-07-08

Learn LLVM 17 A beginners guide to learnin - Kai Nacke.pdf

LLVM, COMPILER, Lear LLVM17 A beginners guide to learnin, Kai Nacke

2024-07-08

Linux Driver Development

Linux 驱动开发,驱动入门书籍

2024-04-16

Optimizing software in C++ pdf

Optimizing software in C++

2024-04-09

Power and Performance Software Analysis and Optimization pdf

Power and Performance Software Analysis and Optimization

2024-04-09

rubber.cpp

实现类似Photoshop的画刷和橡皮擦功能, 基于OpenCV和C++实现, 简单实用。

2020-03-06

OpenGL一个小框架

OpenGL Demo 框架, 我把它摘出来了,VS13, VS10 都能顺利编译运行。 需要的可以看看。 简单清晰的框架。

2016-01-25

人件-人月神话-最后期限-与熊共舞-个体软件过程-软件制胜之道

软件工程书籍合集: 人件 人月神话 最后期限 与熊共舞 个体软件过程 软件制胜之道

2015-02-12

一个简单的OpenGL多线程渲染模型

用多线程实现OpenGL渲染, 子线程负责渲染, 主线程负责干其他事情.

2015-01-22

linux 下 OpenGL 读取 JPG, PNG, TAG 纹理数据

OpenGL 读取JPG, PNG, TAG 纹理图片的代码, 经测试验证通过.

2014-12-30

OpenGL 超级宝典第六版(英文)

OpenGL 超级宝典第六版, 英文版, 非常新的书籍, 不错的参考书籍,

2014-12-01

OSG 三维引擎架构

对OSG引擎整体总结, 对架构会有整体的认识.

2014-11-14

计算机图形学经典书籍资料-渲染部分

计算机图形学渲染书籍: 1):Andrew Glassner 的An Introduction to Ray tracing (光线追踪) 2):Francois X. Sillion的Radiosity and Global Illumination(辐射度) 3):Ian Ashdown的Radiosity: A Programmer's Perspective 4)Evan Pipho Focus On 3D Models(对于图形学的常用模型格式) 5)James D. Foley等人的 Computer Graphics: Principles and Practice in C (2nd Edition)

2014-11-06

计算机图形学经典书籍资料-建模部分

计算机图形学经典建模书籍: 1):Gerald Farin 的Curves and Surfaces for CAGD: A Practical 2):Les A. Piegl, Wayne Tiller 的The Nurbs Book 3):曲线与曲面的数学 4):Introduction to Implicit Surfaces 5):Joe Warren的Subdivision Methods for Geometric Design: A Constructive Approach 6):David Luebke编著的 Level of Detail for 3D Graphics

2014-11-06

三维地形生成算法源码

Focus On 3D Terrain Programming.pdf 配套源码,非常有参考意义。

2014-09-17

三维地形算法(英文版)Focus On 3D Terrain Programming

三维地形算法,地层地形生成算法,比较好的书。

2014-09-17

地理信息系统算法基础

GIS 相关算法,系统介绍了GIS相关算法,很有指导意义

2014-09-11

3D数学基础图形与游戏开发

书中详细介绍了三维数学基础:向量,矩阵,四元数,几何图元,几何算法的C++ 实现,内容通俗易懂,实战性强,难得的好书!

2014-08-25

3D Engine design for Virtual Globles 卷三

讲述三维引擎设计实现,底层算法,虚拟地球实践。对想了解三维引擎设计及GIS平台开发的很有帮助。

2014-08-08

3D Engine Design for Virtual Globes 卷二

讲述三维引擎设计实现,底层算法,虚拟地球实践。对想了解三维引擎设计及GIS平台开发的很有帮助。

2014-08-08

3D Engine Design for Virtual Globes 卷一

讲述三维引擎设计实现,底层算法,虚拟地球实践。对想了解三维引擎设计及GIS平台开发的很有帮助。

2014-08-08

帮助理解 Ogre 源码体系结构的几张图片

Ogre 类关系图,一帧渲染流程图,结构图,对理解Ogre源码有帮助。

2014-07-10

计算机图形学几何工具算法详解 pdf

经典计算几何算法实现,比较好的一本书,适合做图形,几何算法库的人参考。

2014-07-10

ubuntu 12.04 Ogre 开发环境配置

linux 下 Ogre环境配置, Ogre是流行的的三维引擎, 使用方便。

2014-04-04

C++_STL使用例子大全

C++_STL使用例子大全.pdf, STL练习资料。

2013-09-23

OpenGL编程精粹

OpenGL 编程精粹 入门级书籍 适合初学者

2013-04-19

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除