C++
wang371372
这个作者很懒,什么都没留下…
展开
-
filament中systrace的使用
systrace是android提供性能检测工具,介绍和用法参考https://blog.csdn.net/vicwudi/article/details/100191529。这里主要记录filament渲染引擎底层使用systrace进行检测的用法。filament/libs/utils/include/utils/Systrace.h中定义了systrace 的宏用法。SYSTRACE_ENABLE,启用systrace功能;SYSTRACE_DISABLE禁用systrace功能。...原创 2021-02-22 15:55:04 · 303 阅读 · 0 评论 -
2021-01-07
HDR效果就是超亮的光照与超暗的黑暗的某种结合,这个效果是光照产生的,强度、颜色等方面是游戏程序可动态控制的;bloom效果则是物体本身发出的光照,仅仅是将光照范围调高到过饱和,是游戏程序无法动态控制的。HDR特效是这样:bloom特效左:实现方式:1.渲染场景高亮部分,阈值颜色为02.步骤1生成的图形高斯模糊3.生成场景图片和步骤2图片加权融合。...原创 2021-01-07 11:26:25 · 161 阅读 · 0 评论 -
Gamma空间精简讲解
在查找相关资料的过程中,看到了很多人争论,出现Gamma Correction到底是人对自然亮度的感知原因,还是由于早期的 CRT 显示器存在非线性输出的问题。在研究了一些Gamma Correction资料后,个人认为早期Gamma Correction的出现是由于原来的 CRT 显示器存在非线性输出的问题,而在显示器完全可以解决非线性输出的问题的今天,Gamma Correction的存在更多的是由于人对自然亮度的感知。人眼对环境光的不是随着光的强度线性增加的,越暗的地方,变化感受越明显,设1为白色原创 2021-01-07 11:24:20 · 719 阅读 · 1 评论 -
Filament在C++中创建渲简单染体
为查找新引擎锯齿严重的问题,在C++端重写了简单DEMO,摸索阶段有点费事,记录下,以免后续需要。int floatSize = 4;int shortSize = 2;int vertexCount = 4;int byteStride = 7*4;auto vertexBuffer = VertexBuffer::Builder().vertexCount(vertexCount).bufferCount(1).attribute(VertexAttribute::POSITION,原创 2021-01-07 11:21:35 · 536 阅读 · 0 评论 -
配置SSH
设置用户名和密码: git config --globaluser.name"xxx" git config --global user.email "xxx@xxx.com" 配置ssh,不每次输入密码 首先,命令行输入 cd ~/.ssh ,如果有.pub文件 rm -rf *删除,没有不用处理。 然后ssh-keygen -t rsa -C "xxx@xxx.com,后续全部按enter,包括输入密码部分。 最后vim ~/.ssh/id_rsa.pub,复制到git中的ssh中..原创 2021-01-07 11:19:04 · 180 阅读 · 0 评论 -
Jni学习(六)-------vector和jbyteArray转
vector转jbyteArray:std::vector<byte> ins = ((CIAILogic*)addr)->getReuestMahsIns(); int size = ins.size(); jbyteArray jarray = env->NewByteArray(size); jbyte *jnum = new jbyte[size]...原创 2020-04-15 10:47:42 · 2293 阅读 · 1 评论 -
JNI使用(三)-------char*(byte*)和jbyteArray(byte[])x相互转换
c++ 中的char*转java中的byte[],代码如下: char *result = addr->getReadData();//字符串 int length =addr->getAvailableSize();//字符串长度 jbyteArray data =env->NewByteArray(length); env->SetByteArrayRe...原创 2020-03-05 12:32:30 · 5849 阅读 · 3 评论 -
JNI使用(五)-------JAVA(IDEA)使用调用DLL注意事项
以前基于JNI使用C++的项目,都是安卓项目,jni和C++源码部分通过androidstudio提供的cmakelist直接编译使用。这次项目是使用IDEA的JAVA服务端项目(IDEA使用起来跟androidstudio一样比eclipse舒服多了,,外行浅见),有几点不同点记录一下。1.使用VS生成dll的过程中,java和c++的桥接代码部分,也就是根据javah生成的文件,...原创 2020-04-15 09:48:53 · 2295 阅读 · 0 评论 -
jni使用(四)-----IDEA中javah生成.h文件
好久不写JNI,再写的时候最简单的生成.h折腾十几分钟,记录一下这些最基本的操作。免得后面再用又忘记,在idea编译生成.class 文件后在项目\src\在或者项目\bin\classe\下执行 javah 包名.类名的命令如下:javah com.wangyufeng.ai.JniCallC.java...原创 2020-04-13 16:32:55 · 611 阅读 · 0 评论 -
设置"从父级或项目默认设置继承"
首先点击解决方案,然后视图------属性管理器(VS2017以前的为 视图----其他窗口---属性管理器),进入下面选项红色部分代表你继承值的文件,如果不需要某些继承的值,可以手动删除对应的Props文件,或者重新编辑,删除后,点击项目右键或者直接编辑props文件...原创 2019-03-05 12:41:40 · 4122 阅读 · 1 评论 -
头文件中用static定义全局变量的问题
cocos3.13前的版本中,一些全局变量使用static 定义,研究了static定义全局变量的优缺点。例如定义下面的头文件//cocos.h#pragma oncestatic int globle= 0;static int image =[............... ...............//省略];在其他源文件中,引用cocos.h头文件后,每个源文件都...原创 2019-03-05 09:49:08 · 2237 阅读 · 1 评论 -
std::function和std::bind用法
std::bind() std::bind 主要用于绑定生成目标函数,一般用于生成的回调函数,cocos的回退函数都是通过std::bind和std::function实现的。两个点要明白:1.绑定全局或者静态函数比绑定成员函数少了个成员变量,且不需要引用如下//绑定全局函数auto pfunc = std::bind(func1, 3);//绑定静态函数pfunc...原创 2018-09-04 14:58:31 · 10078 阅读 · 2 评论 -
C++ 引用和指针的区别
联系 : 指针是指向一块内存地址的变量,这个变量可以指向其他地址;引用是一个变量的别名,只能是一个变量的别名。一个变量的引用可以转为指向它的指针。不同: 1.初始化不同,引用使用时必须初始化,且只能指向一个变量,初始化不能指向其他变量;指针不一样,指针使用时不必初始化,可以指向nullptr,初始化后仍可以改变指向的地址。 2.作为函数参数传递时,引用不需要内存拷贝...原创 2018-08-29 14:15:09 · 4559 阅读 · 4 评论 -
普通指针转换智能指针转换易错点
一 普通指针转换为共享指针时只能转换一次。 Base *base = new Base(); std::shared_ptr<Base > base1(base); std::shared_ptr<Base > base2(base); base1.reset(); base2.reset();//此时base已经被释放,再释放就会报错 ...原创 2016-04-27 08:23:12 · 6626 阅读 · 2 评论 -
C++虚函数,纯虚函数,构造函数
虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数!纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数!虚函数引入原因:为了方便使用多态特性,我们常常需要在基类中定义虚函数。class Cman{public:virtual void Eat(){……};void Move();pri转载 2014-12-03 18:34:23 · 3913 阅读 · 0 评论 -
Variance Shadow Mapping
Variance Shadow Mapping Author:Kevin Myerskmyers@nvidia.com 译:清风 http://www.cppblog.com/zzxhang/ Motiva转载 2015-01-10 00:16:23 · 853 阅读 · 0 评论 -
static_cast
该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。它主要有如下几种用法:①用于类层次结构中基类(父类)和派生类(子类)之间指针或引用的转换。进行上行转换(把派生类的指针或引用转换成基类表示)是安全的;进行下行转换(把基类指针或引用转换成派生类表示)时,由于没有动态类型检查,所以是不安全的。②用于基本数据类型之间的转换,如转载 2015-01-12 15:19:49 · 318 阅读 · 0 评论 -
C++中的前置声明(Forward Declaration)
兜兜转转,因为要做Qt的项目,又要重新拾起C++这个对于我来说是启蒙语言的编程工具了。因为是第一次自己负责设计项目的架构,显得有些激动和有点迷茫。不过还好,感觉自己慢慢挺过来。基本的结构设计文档已写完和基本的工程框架已经搭好,很快就可以进入正式的编码阶段。今天写模块类文件的一个收获是,在定义头文件时,能依赖前置声明的就不要依赖定义,同时在适当的情况下应该用类型的前置声明转载 2015-01-12 19:22:02 · 510 阅读 · 0 评论 -
C++父类子类转化及函数调用
这些天分析OGRE源码,里面有关C++继承及父类子类转化运用,笔记记录如下:一 子类转化父类 这里的”转化“不是真正的转化,是一种形式上的转化,主要用于多态,定义父子类函数如下:#include "stdafx.h"#include <iostream>using namespace std;class Base {private: int...原创 2015-01-13 10:43:46 · 4532 阅读 · 0 评论 -
va_start和va_end的使用及原理
本文主要介绍va_start和va_end的使用及原理。 在以前的一篇帖子Format MessageBox 详解中曾使用到va_start和va_end这两个宏,但对它们也只是泛泛的了解。 介绍这两个宏之前先看一下C中传递函数的参数时的用法和原理: 1.在C中,当我们无法列出传递函数的所有实参的类型和数目时,可以用省略号指定参数表void foo(...);voi转载 2015-03-20 14:04:43 · 417 阅读 · 0 评论 -
__declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。转载 2015-03-27 15:22:22 · 349 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include using namespace std;class CExample {private: int a;public:转载 2015-04-12 11:13:42 · 405 阅读 · 0 评论 -
C++11中的匿名函数(lambda函数,lambda表达式)
这篇文章是根据维基百科整理来的,原文请看:http://en.wikipedia.org/wiki/Anonymous_function#C.2B.2B C++11提供了对匿名函数的支持,称为Lambda函数(也叫Lambda表达式). Lambda表达式具体形式如下: [capture](parameters)->return-type{body} 如果没有参数,空的圆括号转载 2015-05-15 10:41:14 · 543 阅读 · 0 评论 -
C/C++语言中闭包的探究及比较
2012年9月20日Jason Lee发表评论阅读评论9,413 人阅读 (感谢投稿人 @思禽饮霜 )这里主要讨论的是C语言的扩展特性block。该特性是Apple为C、C++、Objective-C增加的扩展,让这些语言可以用类Lambda表达式的语法来创建闭包。前段时间,在对CoreData存取进行封装时(让开发人员可以更简洁快速地写相关代码),我对b转载 2015-05-15 11:00:01 · 760 阅读 · 0 评论 -
指针赋值操作
A *a= New A();A *b= new A();a=b; 这种用法会导致a的指针无法释放,当把指针a指向b后,原来的内存空间无法释放,可通过引用计数的方式解决这问题,当指针赋值其他指针时,引用计数减1,自动释放。A *a;A b;*a=b; a的赋值操作//错误,a的地址不确定,不能赋值...原创 2016-04-26 15:53:46 · 1209 阅读 · 0 评论 -
参数传入空指针并在函数内部赋值
1. 当把一个指针作为参数时,指针不能为未指向地址的值,必须为一个指向确定地址的值void main(){ Base *base; //base=new Base();//需要加上此句 handle(a);//错误}void handle(Base *t){ cout<<base->number<<endl;}2.如果非要使用...原创 2016-05-03 14:17:52 · 3304 阅读 · 1 评论 -
C语言中结构体的大小
前几天在写到一个yf原创 2014-10-24 19:36:23 · 497 阅读 · 0 评论