c++
文章平均质量分 81
playbar
这个作者很懒,什么都没留下…
展开
-
C++ 中常见预定义宏的使用
在标准C以及各中编译器中定义了一些对象宏, 这些宏的名称以"__"开头和结尾, 并且都是大写字符. 这些预定义宏可以被#undef, 也可以被重定义。 在ANSI C标准中定义了__FILE__,__LINE__,__DATA__,__TIME__,__STDC__等标准的预定义宏。GCC对其进行扩展,也定义了多个预定义宏。 概括起来GCC中可使用的预定义宏涵盖了如下几原创 2011-12-10 07:39:50 · 16939 阅读 · 0 评论 -
glBlendFunc()的参数
OpenGL 会把源颜色和目标颜色各自取出,并乘以一个系数(源颜色乘以的系数称为“源因子”,目标颜色乘以的系数称为“目标因子”),然后相加,这样就得到了新的颜 色。(也可以不是相加,新版本的OpenGL可以设置运算方式,包括加、减、取两者中较大的、取两者中较小的、逻辑运算等,但我们这里为了简单起见,不讨 论这个了)下面用数学公式来表达一下这个运算方式。假设源颜色的四个分量(指红色,绿色,蓝色,原创 2012-05-31 10:43:12 · 1861 阅读 · 0 评论 -
egl gles2.0开发
在android中,java层需要创建surface,class MobileViewGLES extends GLSurfaceView implements Callback{ public void surfaceCreated(SurfaceHolder holder) { Log.e("MobileViewGLES", "surfaceCrea原创 2012-05-18 17:13:55 · 16780 阅读 · 1 评论 -
OpenGL中位图的操作
1、 BMP文件格式简单介绍BMP文件是一种像素文件,它保存了一幅图象中所有的像素。这种文件格式可以保存单色位图、16色或256色索引模式像素图、24位真彩色图象,每种模式种单一像素的大小分别为1/8字节,1/2字节,1字节和3字节。目前最常见的是256色BMP和24位色BMP。这种文件格式还定义了像素保存的几种方法,包括不压缩、RLE压缩等。常见的BMP文件大多是不压缩的。这原创 2012-04-13 09:09:13 · 3309 阅读 · 0 评论 -
NPAPI 插件运行流程分析
本文详细分析插件的代码是如何执行的,主要分析np_entry.cpp、npn_gate.cpp和npp_gate.cpp.希望能够有所收获。在windows平台下,插件就是一个dll,注意到这个dll的def文件内容是:NP_GetEntryPoints NP_InitializeNP_ShutdownNP_GetEntryPoints – 在插件加载之后立即调用该接口原创 2013-02-08 08:46:14 · 6805 阅读 · 2 评论 -
NPAPI插件开发
我们有时候需要调整插件窗口的尺寸大小,比如说,当你创建一个视频播放窗口,在用户点击播放之后想要将窗口的大小调整为视频的实际大小。播放完毕之后又将窗口尺寸调整回原来的尺寸大小。要实现这样一个功能,最简单的方式是写JS来实现,只需要首先用getElementById获取插件,然后设置其width属性和height属性。但是,通常情况下我们只管编写插件,不负责网页的设计,如果我们设计完一个插件,原创 2013-02-08 08:55:09 · 4162 阅读 · 0 评论 -
NPAPI脚本化接口
scriptable接口的实现,与属性有关的函数为HasProperty、GetProperty、SetProperty。在JS中设置属性(以bar为例)用plugin.bar=barvalue;来设置,获取属性直接用plugin.bar;如果要为插件创建属性,必须要在HasProperty中返回true,在GetProperty一般调用NPN_GetProperty(mNpp,sWindowOb原创 2013-02-08 08:49:36 · 3139 阅读 · 0 评论 -
NPAPI插件开发
plugin创建时,浏览器会创建一个子窗口,作为plugin的窗口(对于有窗口的plugin)。但是一直不知道这个子窗口怎么获取。仔细看上面的例子才发现,plugin类实现的不光是Plugin.cpp中的那几个函数,最重要的一个函数实现在Plugin.h中:NPBool init(NPWindow* pNPWindow) { m_bInitialized = TRUE; return TRUE原创 2013-02-06 16:14:46 · 7071 阅读 · 1 评论 -
curl 代理使用
代理 什么是代理?Merrian-Webster的解释是:一个通过验证的用户扮演另一个用户。今天,代理已经被广泛的使用。许多公司提供网络代理服务器,允许员工的网络客户端访问、下载文件。代理服务器处理这些用户的请求。 libcurl支持SOCKS和HTTP代理。使用代理,libcurl会把用户输入的URL提交给代理服务器,而不是直接根据URL去访问远程资源。原创 2013-07-12 11:13:35 · 25365 阅读 · 0 评论 -
LibCurl编程流程
在基于LibCurl的程序里,主要采用callback function (回调函数)的形式完成传输任务,用户在启动传输前设置好各类参数和回调函数,当满足条件时libcurl将调用用户的回调函数实现特定功能。下面是利用libcurl完成传输任务的流程:1. 调用curl_global_init()初始化libcurl 2. 调用 curl_easy_init()原创 2013-06-26 11:05:04 · 1385 阅读 · 0 评论 -
webkit学习
一.Webkit的由来1. 十几年前的故事1994年,Netscape浏览器曾占据整个浏览器市场的90%,风头无二(也很嚣张)。但随着微软推出win95后,把IE 1.0做为win95的插件发布,开始挑战Netscape的霸主地位,到发布IE 4.x,短短三年时间,打败Netscape。 这里面虽然说有与windows集成的原因,但从本身的功能上来讲, IE从速度和对标准的支持上来讲,原创 2012-05-30 17:11:25 · 5785 阅读 · 0 评论 -
Webkit模块介绍
一、Webkit模块用到的第三方库如下:cairo一个2D绘图库casqtUnicode处理用的库,从QT中抽取部分代码形成的expat一个XML SAX解析器的库freetype矢量字库接口库,用于存取ttf矢量字体文件l原创 2012-05-30 17:19:01 · 7163 阅读 · 0 评论 -
FreeType 用法
Freetype是一个跨平台、开源的字体渲染器,网上很多文章介绍,本人就不啰嗦了。本文重点在于实现文章标题所属的各种效果,不是Freetype的基本使用方法介绍文档,所以对于Freetype不熟悉的同学们请先学习下Freetype的基本用法,才可以使用本文中所提及的方法。用FreeType实现矢量字体的粗体、斜体、描边、阴影效果不是一件容易的事,本人认为皆因Freetype的接口太过于底层化,原创 2012-02-02 05:39:04 · 12923 阅读 · 0 评论 -
FreeType字体程序库介绍
FreeType库是一个完全免费(开源)的、高质量的且可移植的字体引擎,它提供统一的接口来访问多种字体格式文件,包括TrueType, OpenType, Type1, CID, CFF, Windows FON/FNT, X11 PCF等。支持单色位图、反走样位图的渲染。FreeType库是高度模块化的程序库,虽然它是使用ANSI C开发,但是采用面向对象的思想(下文中将会介绍到)。因此,Fre原创 2012-02-01 18:34:23 · 3010 阅读 · 0 评论 -
FreeType 管理字形
1.字形度量 顾名思义,字形度量是对应每一个字形的特定距离,以此描述如何对文本排版。 通常一个字形有两个度量集:用来排版水平文本排列的字形(拉丁文、西里尔文、阿拉伯文、希伯来文等等)和用来排版垂直文本排列的字形(中文、日文、韩文等等)。 要注意的是只有很少的字体格式提供了垂直度量。你可以使用宏FT_HAS_VERTICAL测试某个给出的face对象是否包含垂原创 2012-02-13 13:44:25 · 13836 阅读 · 0 评论 -
图像解析库使用范例
范例包括libgif,libpng和libjpeg,图像类型判断如下,其中fData是图像数据的首地址 //png if (!png_sig_cmp((png_byte*)fData, (png_size_t)0, 4)) { return EN_IMG_TYIE_PNG; } // gif if (memcmp(GIF原创 2012-04-10 11:03:08 · 3782 阅读 · 1 评论 -
freetype渲染字体范例
freetype初始化如下: if (mFTFace == 0 ) { if (FT_Init_FreeType( &mFTLibrary )) return; if (FT_New_Face( mFTLibrary, "/system/fonts/DroidSansFallback.ttf", 0, &mFTFac原创 2012-04-10 11:07:49 · 6449 阅读 · 0 评论 -
android中的surface
在android中,对view及其子类,都是画在surface上的。每个window对应一个surface,各surface对象通过surfaceflinger合成到framebuffer,每个surface都是双缓冲,它有一个back buffer和一个front buffer。back buffer就是画画的地方,front buffer是用来合成的。surface创建Canvas原创 2012-04-11 14:20:29 · 4129 阅读 · 0 评论 -
Texture Wrapping Mode
在进行纹理帖图时,图象会出现在物体表面的(u,v)位置上,而这些值在[0.0,1.0]范围内。但是,如果超出这个值域,会发生什么情况呢?这由纹理的映射函数来决定。在OpenGL中,这类映射函数称为“Texture Wrapping Mode”;在D3D中,称为“Texture Addressing Mode”。常见的有下面几种: 1. 重复(GL_REPEAT):图象在表面上重复出现。在算原创 2012-04-12 11:23:42 · 929 阅读 · 0 评论 -
OpenSL 播放声音
在Android中,使用OpenSL播放声音,在Andriod 2.3或以上版本中使用,需要添加-lOpenSLES 动态库#include "jni.h"#include #include "SLES/OpenSLES_Android.h"#include #include typedef void (*AudioCallBackAT)(int event, vo原创 2012-05-04 14:19:49 · 15067 阅读 · 1 评论 -
webkit Parser模块
前面把Loader数据加载模块介绍完了,那有了数据以后就可以开始解析了,但在介绍parser模块之前,需要知道数据从curl怎么过来的,因此,本篇先介绍一下ResourceHandleManager.cpp里下面这几个函数:headerCallbackwriteCallbackreadCallback顾名思义,这三个函数是http请求发出以后的回调函数(为了实现异步操作),分别为写原创 2012-05-30 17:26:07 · 3360 阅读 · 0 评论 -
C++ 用libcurl库进行http通讯网络编程
libcurl是 一个跨平台的网络协议库,支持http, https, ftp, gopher, telnet, dict, file, 和ldap 协议。libcurl同样支持HTTPS证书授权,HTTP POST, HTTP PUT, FTP 上传, HTTP基本表单上传,代理,cookies,和用户认证。想要知道更多关于libcurl的介绍,可以到官网 http://curl.haxx.se原创 2013-07-05 16:58:33 · 1953 阅读 · 0 评论 -
cocos2dx常见的46中+22中动作详解
bool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !CCLayer::init() ) { return false; } CCSprite * sp= CCSprite::create("I转载 2014-08-01 09:16:40 · 1391 阅读 · 0 评论 -
游戏中的心理学
游戏心理学游戏中的心理学(一):认知失调 游戏业属于服务业,而我们服务的对象就是玩家。我们想要做好一款游戏,除了必要的专业知识,对服务对象的了解程度也非常重要。 笔者最近自学了一点心理学的皮毛,在这里尝试用心理学知识来分析玩家的心理和行为,今天先说说“认知失调理论”。 认知失调会让玩家对体验差的游戏作出“好玩”的评价 “认知失调理论”是最让人诧异的理论,转载 2014-09-25 15:17:24 · 46745 阅读 · 2 评论 -
WebView输入框提示
做基于WebView应用时,页面上有一个输入框,当输入的文字过多时,超过输入框的行数时,输入框能够滚动,这时间问题来了,输入的提示箭头会移动到输入框外,如何解决这个问题呢,查找chromium源码如下: void LoadIfNecessary(jobject context) { if (loaded_) return; loaded_ = tru原创 2015-11-23 17:43:48 · 1733 阅读 · 0 评论 -
Android-PullToRefresh代码分析
github 地址:https://github.com/hgl888/Android-PullToRefresh工程分为 library,PullToRefreshListFragment, PullToRefreshViewPage和LauncherActivity四部分,library是基础其中PullToRefreshAdapterViewBase是基类,主要实现onScr原创 2016-04-19 17:49:52 · 1388 阅读 · 0 评论 -
glsurfaceview 使用skia
在java 层,使用glsurfaceview,创建opengl 环境,在 public void onSurfaceCreated(GL10 gl, EGLConfig config)函数中,创建GrContext和CurRenderTarget,如下void SkiaApp::windowChanged(int width,int height){LOGD("%s:(%d,%d原创 2015-08-18 18:02:50 · 2632 阅读 · 0 评论 -
Android Linker 与 SO 加壳技术
1. 前言Android 系统安全愈发重要,像传统pc安全的可执行文件加固一样,应用加固是Android系统安全中非常重要的一环。目前Android 应用加固可以分为dex加固和Native加固,Native 加固的保护对象为 Native 层的 SO 文件,使用加壳、反调试、混淆、VM 等手段增加SO文件的反编译难度。目前最主流的 SO 文件保护方案还是加壳技术, 在SO文件加壳和脱壳的转载 2016-10-08 19:35:01 · 2188 阅读 · 0 评论 -
MySQL排序内部原理探秘
一、我们要解决什么问题MySQL排序其实是一个老生常谈的问题了,但是我们这次想由浅入深详细说说MySQL排序模式,怎么影响MySQL选择不同的排序模式和怎么优化排序。同时也希望通过这篇文章解决大家的以下疑问:MySQL在哪些地方会使用排序,怎么判断MySQL使用了排序;MySQL有几种排序模式,我们可以通过什么方法让MySQL选择不同的排序模式;MySQL排序跟read_r转载 2016-10-08 19:38:21 · 3712 阅读 · 0 评论 -
Android Arm Inline Hook
什么是Inline HookInline Hook即内部跳转Hook,通过替换函数开始处的指令为跳转指令,使得原函数跳转到自己的函数,通常还会保留原函数的调用接口。与GOT表Hook相比,Inline Hook具有更广泛的适用性,几乎可以Hook任何函数,不过其实现更为复杂,考虑的情况更多,并且无法对一些太短的函数Hook。其基本原理请参阅网上其他资料。需要解决的问题转载 2017-04-27 09:04:57 · 2456 阅读 · 0 评论 -
tensorflow android
android studio 版本,直接使用as打开,编译运行和调试https://github.com/playbar/tfandroid原创 2017-08-11 10:10:18 · 980 阅读 · 0 评论 -
GCC编译器优化选项
GCC编译器在目前是不是用最多的编译器也相去不远,尤其在嵌入式领域很多编译器都是基于GCC的cross gcc版本。毕竟功能成熟而且有开放的源代码。这里只介绍优化编译的参数:-O用来开启优化编译选项。-O0:默认模式,不做任何优化。-O1:优化。该模式下对于一个大的函数或功能会花费更多的时间和内存。在-O1下:编译会尝试减少代码体积和代码运行时间。但是并不执转载 2017-09-29 11:19:49 · 1871 阅读 · 0 评论 -
任意android 手机支持daydream
针对普通手机,最低版本支持到android 5.0GVR修改修改sDaydreamPhoneOverrideForTesting修改libgvr.so修改MutableEGLConfigChooser修改scanlineRacer的swapmode1.0.2.text:000834F6 CMP原创 2017-12-22 10:59:25 · 2565 阅读 · 0 评论 -
chromium 进程创建分析
一 chromium for android Browser进程创建过程分析ContentMainDelegate是客户端程序注册给content_main_runner.cc的回调接口,content_main_runner.cc通过调用ContentMainDelegate的接口来通知客户端当前Content框架的状态。客户端程序通过ContentMainDelegate:原创 2015-11-05 17:14:37 · 5558 阅读 · 0 评论 -
在C++中嵌入V8
Handle和垃圾收集handle在v8中,用于记录js对象在堆中的位置。v8的垃圾收集器在收集那些不可到达的内存时,会对堆进行整理。它会移动对象的位置,以达到优化内存的目的。当v8的垃圾收集器移动js对象的位置时,它会同时更新handle的值,让handle能够指向对象新的位置。v 8中有两种handle本地handle (LocalHandle) 。原创 2015-06-10 10:49:51 · 7202 阅读 · 3 评论 -
glCompressedTexImage2D 压缩纹理
NameglCompressedTexImage2D — 指明一个二维的压缩纹理图像C Specificationvoid glCompressedTexImage2D(GLenum target, GLint level, GLenum internalformat, GLsizei width,原创 2014-11-07 09:52:49 · 12814 阅读 · 1 评论 -
V8引擎分析
Google 的 Chrome 中的 V8 JavaScript 引擎,由于性能良好吸引了相当的注目。它是 Google 特别为了 Chrome 可以高速运行网页应用 (WebApp) 而开发的。 Chrome 利用 Apple 领导的 WebKit 研发计划作为渲染引擎( Rendering engine )。 WebKit 也被用在 Safari 浏览器中。 WebKit 的标准配备有称为转载 2015-04-10 15:33:00 · 7311 阅读 · 0 评论 -
引擎V8及优化技术
一、V8背后的故事1.1 javascript的速度与需求JavaScript存在至少10年了。在1995年,它出现在网景(Netscape Communications)公司所研发的网页浏览器Netscape Navigator 2.0中。然而有段时间人们对于性能的要求不高,因为它只用在网页上少数的动画、交互操作或其它类似的动作上。(最明确的是为了减少网络传输,以提高效率转载 2015-04-17 12:03:06 · 8437 阅读 · 1 评论 -
Skia深入分析
一、渲染层级从渲染流程上分,Skia可分为如下三个层级:1、指令层:SkPicture、SkDeferredCanvas->SkCanvas这一层决定需要执行哪些绘图操作,绘图操作的预变换矩阵,当前裁剪区域,绘图操作产生在哪些layer上,Layer的生成与合并。2、解析层:SkBitmapDevice->SkDraw->SkScan、SkDraw1Glyph::Proc这一层原创 2015-05-08 18:42:16 · 23559 阅读 · 6 评论 -
Google V8 JS调用C++
JS调用C++函数JS调用C++函数,就是通过FunctionTemplate和ObjectTemplate进行扩展的。FunctionTemplate,ObjectTemplate可以理解为JS function和C++ 函数之间的binding。FunctionTemplate实现了JS函数和C++函数的绑定,当然这种绑定是单向的,只能实现JS调用C++的函数。说的更直白一点,转载 2015-04-28 16:55:27 · 5479 阅读 · 1 评论