自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(39)
  • 收藏
  • 关注

原创 写给正在学习C++的新人

写给正在学习C++的新人这篇博客是专门给那些正在学C++,或者准备学习C++的人准备的。很多学习C++的人在入门的时候基本都只了解C++的语法。但在实际的学习或工作中,我们常常需要生成具体的可执行程序,甚至做出一个桌面软件,所以仅仅掌握C++语法是不够的。下面给出一张思维导图,是我在工作中涉及到的C++开发内容,希望可以给新人一些指导。黄色部分表示必须掌握,灰色部分表示只需要了解,而绿色部分...

2019-06-27 14:22:23 487

翻译 Vulkan【16】绘制立方体

绘制立方体本节的代码是 15-draw_cube.cpp你快完成了!下面是让你的Vulkan图像出现在屏幕上的最后步骤:等待交换链缓冲区在开始绘制任何东西之前,样例程序需要一个目标交换链图像来呈现。vkAcquireNextImageKHR()函数用于将索引放入交换链图像列表中,因此它知道哪个framebuffer会被用作渲染目标。即下一个可供渲染的图像。res = v...

2018-09-07 17:39:50 3275

翻译 Vulkan【15】图形管线(Graphics Pipline)

创建图形管线本节的代码是 14-init_pipeline.cpp你越来越接近把这些拉到一起来渲染一个立方体!下一步是通过设置图形管道来配置GPU来进行渲染。一个图形管线由着色阶段、管线布局、渲染过程和固定功能管线阶段组成。您在前面的部分中定义了着色阶段和管线布局。在这里,您将配置其余的固定功能管线阶段。这包括填充一些用于创建管线的“create info”数据结构。在这里执行的大部分...

2018-09-07 16:35:03 3574

翻译 Vulkan【14】顶点缓冲区

创建顶点缓冲区本节的代码是 13-init_vertex_buffer.cpp顶点缓存是一个CPU可见的和GPU可见的缓冲区,它包含了描述您想要呈现的对象(s)的几何图形的顶点数据。一般来说,顶点数据由位置(x、y、z)数据和可选的颜色、法线或其他信息组成。和其他3D api一样,这里的方法是用这个顶点数据填充缓冲区,并在绘制操作期间将其传递给GPU。创建顶点缓冲区对象创建一个...

2018-09-07 15:32:10 1545

翻译 Vulkan【13】FrameBuffers

创建Framebuffers本节的代码是 12-init_frame_buffers.cppVulkan FramebufferFramebuffer表示一个渲染过程实例所使用的内存附件集合。这些内存附件的例子包括我们在以前的示例中创建的颜色图像缓冲区和深度缓冲。framebuffer提供了渲染过程所需的附件。在之前的交换链示例中,您创建了一个交换链,它为交换链中的每个“frame...

2018-09-07 13:40:59 1577

翻译 Vulkan【12】着色器

着色器本节的代码是 11-init_shaders.cpp编译 GLSL 着色器 为 SPIR-VVulkan的底层着色器代码是SPIR-V。示例程序将GLSL编写的着色器代码编译为 SPIR-V,通过下面这个工具函数:GLSLtoSPV(VK_SHADER_STAGE_VERTEX_BIT, vertShaderText, vtx_spv);The shader sourc...

2018-09-07 09:54:56 1753

翻译 Vulkan【11】渲染过程

创建一个渲染过程本节的代码是 10-init_render_pass.cpp渲染过程通过指定在渲染操作期间使用的附件、子过程和依赖项的集合来描述渲染操作的范围。一个渲染过程由至少一个子过程组成。将这些信息与驱动程序通信,使驱动程序能够知道在呈现开始时将会发生什么,并为呈现操作设置最优的硬件。首先使用vkCreateRenderPass()来定义渲染过程,然后使用vkCmdBeginRe...

2018-09-07 09:41:59 3282

翻译 Vulkan【10】创建描述符集合

创建描述符集合本节的代码是 09-init_descriptor_set.cpp回到“管线层”示例,你定义了描述符集合层,但并没有真正为它分配内存。回想一下,您定义的描述符集用于通知GPU如何将uniform 缓冲区中包含的数据映射到shader程序的统一变量。现在,您可以继续分配和初始化描述符集合。描述符池与命令缓冲区一样,描述符集合是从池中分配的。所以您必须首先创建池。因为您知...

2018-09-04 11:23:37 1193

翻译 Vulkan【9】描述符集合布局和管线布局(Descriptor Set Layouts and Pipeline Layouts)

描述符集合层和管线层本节的代码是 08-init_pipeline_layout.cpp在前面的例子中,您创建了一个uniform 缓冲区,但是您没有告诉着色器该如何使用它。缓冲区包含了MVP转换的Uiform变量,它只会被顶点着色器使用,但是Vulkan还不知道这一点。我们通过使用描述符来实现这一点。描述符和描述符集合描述符是一个特殊的不透明的着色器变量,着色器使用它以间接的...

2018-09-01 14:38:26 3209

翻译 Vulkan【8】创建Uniform缓冲区

创建Uniform缓冲区本节的代码是 07-init_uniform_buffer.cppUniform缓冲区是一个访问只读着色器的缓冲区,以便着色器可以读取常量参数数据。这是另一个你必须在Vulkan程序中执行的步骤。在GLES中,你只需要做一个API调用来设置发送给着色器的统一变量的内容。而在这里,你必须分配内存并将其填充。设置 Uniform 数据样例使用Uniform缓...

2018-09-01 13:57:19 1852

翻译 Vulkan【7】创建深度缓冲区

创建深度缓冲区本节的代码是 06-init_depth_buffer.cpp深度缓冲区是可选的,但在示例最后渲染3D方块时,你需要一个深度缓冲区。而且在渲染每帧时,你只需要一个,即使交换链里有不止一个图像。因为深度缓冲区在交换链的图像中是可重用的。与vkCreateSwapchainKHR()不同的是,交换链中的每一个图像都是为你创建的,你需要创建和分配您自己的图像来表示深度缓冲。...

2018-08-23 14:53:54 1569

翻译 Vulkan【6】创建一个交换链

创建一个交换链本节的代码是 05-init_swapchain.cpp本节描述如何创建交换链,它是最终显示给用户的图像缓冲区列表。这是建立呈现所需的所有缓冲区所需的第一个步骤之一。这是一个关于交换链的视图,它与系统的其他部分有关。其中一些部分很常见,剩下的部分将在本节中学习。Vulkan和窗口系统与其他图形API一样,Vulkan将窗口系统方面与核心图形API分离开来。...

2018-08-20 11:21:43 4276

翻译 Vulkan【4】创建一个逻辑设备

创建一个逻辑设备本节的代码是 03-init_device.cpp下一步是创建一个VkDevice逻辑设备对象,它对应于系统上的一个物理设备。逻辑设备是稍后用于将图形命令定向到硬件的关键对象。到目前为止,我们的示例已经确定了你有多少物理设备。列举这些设备的示例工具函数确保了至少有一个设备,否则它会以不正确的断言停止。选择一个设备为了使事情变得简单,示例只从设备枚举返回的列表中取...

2018-08-09 10:52:56 1034

翻译 Vulkan【5】创建一个命令缓冲区

创建一个命令缓冲区本节的代码是 04-init_command_buffer.cpp基本的命令缓冲区操作在其他图形API中,应用程序可以通过像glLineWidth()这样的API调用来设置诸如线宽之类的属性。在后台,驱动程序将这个API调用转换为特定于gpu特定的命令,并将该命令放入一个命令缓冲区中。出于应用程序的考虑,驱动程序也通过创建和销毁命令缓冲区来管理命令缓冲区。最终,驱动程...

2018-08-04 13:27:25 2802 1

翻译 Vulkan【3】列举物理设备

列举物理设备这一节的代码文件是 02-enumerate_devices.cpp示例程序的下一步是确定系统上的物理设备。在您创建了一个实例之后,加载器知道有多少Vulkan物理设备可用,但是您的应用程序还不知道这一点。应用程序通过访问Vulkan API来获取一个有多少可用物理设备的列表。物理设备与实例相关,如上图所示。从Vulkan获取对象列表获取对象列表是Vulka...

2018-08-03 10:26:11 2792

翻译 Vulkan【2】创建Vulkan实例

创建Vulkan实例本节的源代码是 01-init_instance.cppVulkan程序的第一步是创建一个Vulkan实例。当你阅读到本节的时候,可以在LunarG Vulkan 示例代码仓库中 API-Samples文件夹下找到01-init_instance.cpp Vulkan实例Vulkan API使用 vkInstance 对象 来存储 所有每个应用的状态。应用程...

2018-08-02 17:06:16 6597

翻译 Vulkan【1】介绍

Vulkan介绍Vulkan是由Khronos组织开发的一种高级图形API。其他图形API(像OpenGL和Direct3D)需要驱动去将上层API翻译成适合硬件执行的指令。这些图形API是为了使开发者不需要关注复杂的图形硬件细节。随着那些较老的图形API继续发展,它们会慢慢地将越来越多的底层硬件功能直接暴露给程序员。 程序员被要求访问底层硬件,权衡那些具有较高开销和较低性能的功能的...

2018-08-02 15:48:22 7110

翻译 Vulkan教程(官方教程翻译版)

欢迎来到Vulkan示例教程本教程以章节的方式一步一步指导你创建一个简单的Vulkan程序。 每个教程章节都对应一个示例程序,可以阅读这个示例程序,并可在实际编码中进行测试。教程目录介绍实例化枚举所有设备初始化设备初始化命令缓冲区初始化交换链初始化深度缓冲区初始化Uniform缓冲区初始化管线布局初始化描述符集合初始化渲染层初始化着色器初始化帧缓冲区初始化...

2018-08-02 15:11:17 18244 5

原创 Linux下创建两个子进程,并在子进程异常退出时重新创建

直接上代码,看注释即可:#include <iostream>#include <unistd.h>#include <errno.h>#include <string.h>#include <sys/wait.h>using namespace std;static int s_hmi_pid = -1; ...

2018-02-08 14:14:25 1258

原创 AndroidStudio开发环境配置

1.操作系统要求Windows 7以上操作系统,至少6GB内存(建议8GB)2.配置JDK2.1.安装JDKhttp://www.oracle.com/technetwork/java/javase/downloads/index.html2.2.配置JDK环境变量  在”系统变量”中设置3项属性,JAVA_HOME,PATH,CLASSPATH(大小写无所谓),若已存在则点击”编辑”,不存在则点击

2017-08-14 14:18:55 752

翻译 PyMongo初级使用教程

教程这篇教程主要介绍了MongoDB和PyMongo的初级使用.准备工作在我们开始前,请确保你已经安装了PyMongo的发行版本。在Python命令行模式下,执行下面的指令应当不会报出异常:>>> import pymongo这篇教程中运行的MongoDB实例运行在默认的主机和端口上。如果你已经下载并安装了MongoDB,你可以像这样开启它:$ mongod使用MongoClient建立Connec

2017-06-02 16:19:01 3147

原创 Android Studio常用快捷键

0、注释代码:Ctrl+/ 1、重命名变量:Alt+Shfit+R 2、提取方法:Ctrl+Alt+M 3、快速生成Getter/Setter/构造函数/重载方法:Alt+Insert 4、快速回到编辑代码窗口:Esc 5、快速回到编辑代码窗口并关闭当前工具窗口:Shift+Esc 6、打开上次关闭的工具窗口:F12 7、将代码包裹在if..else/try..catch/while等

2017-05-31 14:25:54 288

原创 Java中的Enum

java中的enum可以像class一样。事实上可以把enum中每个枚举值当成是enum类型的对象。以下是示例:public enum PlayMode{ RPT_OF_ALL(1, "全部循环"), RPT_OF_SINGLE(2, "单曲循环"), RPT_OF_FOLDER(3, "文件夹循环播放"), MIX_OF_ALL(4, "全部随机播放"),

2017-05-15 18:16:15 396

原创 sudo指令慢解决办法

sudo指令慢多半是由于修改了原始的hosts文件,使用如下指令即可修复:sudo echo 127.0.0.1 `hostname`.domain `hostname` >> /etc/hosts

2017-03-02 11:07:37 639

原创 QQuickView使用注意事项

QQuickView在使用setSource之后不会初始化QML,只有当调用show之后才开始初始化。如果需要执行QML中的一些逻辑,但又不想让其显示,可以调用show之后再hide。

2017-01-04 11:45:59 2416

原创 QtQuick中使用ListView注意事项

1、使用不定高度(或宽度)的DelegateListView的delegate属性如果设置为具有不定高度(或宽度)的组件(例如Text),当手动设置ListView的contentY(或contextX)时,偶尔会出现ListView中无内容的情况。 原因:delegate没有固定的高度(或宽度),ListView无法计算当前contextY(或contextX)下的需要显示的ListItem是哪

2016-08-17 17:01:35 741

原创 Linux下的C++程序崩溃时打印崩溃信息

概述在某些极端情况下,原本正常执行的程序发生了崩溃。这时候想通过调试是很难发现出错的地方的,所以在崩溃时打印出错点的调用堆栈是十分有必要的。使用的命令:catchsegv program [args] 例如:我们的程序是test,则可在控制台输入:catchsegv ./test 如果使用gcc/g++编译test时添加了-g选项(即在可执行程序中加入调试信息),则可以输出崩溃的代码行数。测试有

2016-05-31 19:12:52 7622

原创 Shell命令中的 &&,||,&与|

&&与||&& 假设输入了如下指令:command0 && command1,则先从command1开始执行。如果command1执行失败,则不再继续执行command0。如果执行command1执行成功,则继续执行command0。 所以,&&的作用是在执行到失败的指令时停止后续指令的执行。|| 与&&的作用正好相反,是在执行到成功的指令时停止后续指令的执行。command0 || co

2016-03-23 18:19:04 1260

原创 Ubuntu下的交叉编译

安装工具链打开控制台,输入如下命令:sudo apt-get install g++-arm-linux-gnueabi上述命令安装最新的交叉编译器,默认安装目录在/usr/arm-linux-gnueabi。如果需要其他版本的编译器,可以在打完sudo apt-get install g++之后按Tab键,显示所有可用的g++编译器。编译需要的库下载你需要交叉编译的库的源代码,一般里面都包含co

2016-03-10 15:44:37 723

原创 在OpenGL ES中使用glDrawElements时的注意事项

函数原型: glDrawElements (GLenum mode, GLsizei count, GLenum type, const void *indices);在OpenGL ES中,此函数的第三个参数不能为GL_UNSIGNED_INT。如果使用GL_UNSIGNED_INT,会出现没有渲染结果的情况。OpenGL ES中,此函数的第三个参数只能使用GL_UNSIGNED_BYTE或者G

2015-11-26 15:48:16 852

原创 Qt发布程序(windows平台)

windows下发布Qt程序需要解决动态库的问题。主要步骤如下:一、在main.cpp中添加设置动态库搜索目录的代码:QApplication::addLibraryPath(QApplication::applicationDirPath());二、我们需要process explorer这个工具(百度搜索下载)。process explorer可以查看正在运行的程序加载了哪些dll。先在我们

2015-11-09 14:42:41 5924 2

原创 Ubuntu控制台命令记录(不定期更新)

kill -9 1102强制停止pid为1102的进程。df -h显示各个磁盘及其使用情况。-h命令是为了提高可读性。

2015-11-09 13:07:29 1177

原创 QML中使用JavaScript

本篇文章主要讨论QML引入JavaScript文件,以及QML与JavaScript之间的关系。首先在QML文件开头添加如下代码导入JavaScript:第一种写法,使用qrc路径:import "qrc:/qml/JavaScript/Application.js" as Application第二种写法,使用相对目录:import "../JavaScript/Application.j

2015-08-11 18:52:40 2013

原创 Ubuntu安装SVN

注意:为提高下载速度,可以在 系统设置->软件与更新 中,将“下载自”选择“其他站点”中的“http://ubuntu.cn99.com/ubuntu安装Svn步骤: 1.添加软件源。sudo add-apt-repository ppa:rabbitvcs/ppa2.更新源。sudo apt-get update3.安装SubVersion。sudo apt-get install subver

2015-07-23 15:36:18 414

原创 Ubuntu下交叉编译zlib,libpng,freetype

步骤如下: 1、下载zlib、libpng、freetype三个库并解压缩。2、Ubuntu下打开控制台,安装交叉编译工具链: sudo apt-get install g++-arm-linux-gnueabi 安装好后,/usr/目录下会增加arm-linux-gnueabi目录3、在控制台下使用cd命令进入zlib目录,然后输入如下指令:

2015-07-22 17:37:50 2413

原创 make多任务与Anroid NDK编译外部库

启用多核编译:-j4 //表示使用4核编译

2015-03-16 13:04:42 807

原创 Android C++层内存泄漏检测

最新在Android项目中遇到C++层内存泄露问题,在此记录解决方法。1.修改C:\Users\\.android\ddms.cfg,在文件的最后添加"native=true"。2.连上真机并打开cmd命令行,执行以下几步:adb root//获取rootadb shell setprop libc.debug.malloc 1//设置检测等级,这里的1表示检测内存

2015-02-06 20:13:38 4660 1

原创 Python学习记录

Python IDLE使用:部分快捷键Tab 自动提示Alt + 3 注释Alt + 3 取消注释F5 运行运算符** 乘方运算 (3 ** 2表示3的2次方)// 浮点除法 (4 // 5结果是0.8, 而不是0)# 注释符号and or not (与 或 非)[] 数组索引[0] 返回数组第一个[:2] 返回从索引0到2的数组[2:5] 

2014-03-18 18:03:02 451

原创 cocos2d-x 移动MM平台SDK接入

cocos2d-x版本:2.2开发平台:Windows官方Wiki介绍了如何接入第三方SDK, 不过是英文的, 我在此更详细的介绍下. 官方Wiki地址:点击打开链接 打开ADT(Android Develop Tool, 就是你用来开发Android的Eclipse), 导入cocos2d-x/plugin文件夹下的所有项目, 如图: 这些项目中项目名Hello开头的都是官方的示例, 其中He

2013-11-21 22:11:45 3156 9

空空如也

空空如也

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

TA关注的人

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