- 博客(62)
- 资源 (2)
- 收藏
- 关注
原创 lua堆栈操作常用函数学习二
/*** basic stack manipulation*/LUA_API int (lua_gettop) (lua_State *L); //返回当前堆栈的大小LUA_API int lua_gettop (lua_State *L) { return cast_int(L->top - L->base);}int lua_gettop(lua_S
2013-01-10 16:26:06
5045
转载 lua操作常用函数学习一
(1)lua 和 C++之间的交互的基本知识: lua 和 C++ 之间的数据交互通过堆栈进行,栈中的数据通过索引值进行定位,(栈就像是一个容器一样,放进去的东西都要有标号)其中栈顶是-1,栈底是1,也就是第 1 个入栈的在栈底;也可以这么说:正数表示相对于栈底的位置(位移),负数表示相对于栈顶的位置(位移);(2)计算和清空栈中元素的操作:1、函数lua_gettop(
2013-01-10 16:23:18
2373
转载 lua_gc 源码学习六
GC 中最繁杂的 mark 部分已经谈完了。剩下的东西很简单。今天一次可以写完。sweep 分两个步骤,一个是清理字符串,另一个是清理其它对象。看代码,lgc.c 573 行:case GCSsweepstring: { lu_mem old = g->totalbytes; sweepwholelist(L, &g->strt.hash[g->swee
2013-01-04 16:10:59
2617
转载 lua_gc 源码学习五
今天来说说 write barrier 。在 GC 的扫描过程中,由于分步执行,难免会出现少描了一半时,那些已经被置黑的对象又被修改,需要重新标记的情况。这就需要在改写对象时,建立 write barrier 。在扫描过程中触发 write barrier 的操作影响的对象被正确染色,或是把需要再染色的对象记录下来,留到 mark 的最后阶段 atomic 完成。和 barrier 相关的
2013-01-04 16:09:52
2499
转载 lua_gc 源码学习四
今天来看一下 mark 过程是怎样实现的。所有的 GC 流程,都从 singlestep 函数开始。singlestep 就是一个最简单的状态机。GC 状态简单的从一个状态切换到下一个状态,循环不止。状态标识放在 global state 的 gcstate 域中。这一点前面谈过。开始的两个状态和 mark 过程有关。初始的 GCSpause 状态下,执行 markroot 函数。我们
2013-01-04 16:08:26
2559
转载 lua_gc 源码学习三
我们晓得,lua 对外的 API 中,统统个 gc 打交道的都经过lua_gc。C 说话构建体系时,普通不讲计划模式。但模式仍是存在的。若要按《计划模式》中的分类,这应当归于 Facade 形式。代码在 lapi.c 的 895 行: LUA_API int lua_gc (lua_State *L, int what, int data) { int res = 0; global_Stat
2013-01-04 16:06:03
3714
转载 lua_gc 源码学习二
普及下常识:GC 是 garbage collector 资源回收器;初期的 Lua GC 采取的是 stop the world 的实现。一旦产生 gc 就需要期待全部 gc 流程走完。lua 自己是个很精简的体系,但不代表处理的数据量也必然很小。从 Lua 5.1 入手下手,GC 的实现改成分步的。固然照旧是 stop the world ,可是,每个步骤均可以分阶段执行。这样,屡次搁
2013-01-04 16:04:31
4022
转载 lua_gc源码学习一
转自别人的博客 备用学习最近发现在大数据量的 lua 环境中,GC 占据了很多的 CPU。差不多是整个 CPU 时间的 20% 左右。希望着手改进。这样,必须先对 lua 的 gc 算法极其实现有一个详尽的理解。我之前读过 lua 的源代码,由于 lua 源码版本变迁,这个工作还需要再做一次。这次我重新阅读了 lua 5.1.4 的源代码。从今天起,做一个笔记,详细分析一下 lua 的
2013-01-04 16:03:15
2288
原创 vs 调试
本来在之前的“vc6.0编译c++程序后在vc2008中调试的奇技淫巧(符号信息和链接)"http://hi.baidu.com/widebright/blog/item/3262272d34e5002a359bf74d.html?timeStamp=1326769867413一文里面有提到的了,但昨天还是忘了第一步的,找了好久。再次给自己强化一下记忆。 使用 debug 模
2012-03-19 19:07:39
1797
原创 Lua文件函数调用
假设你在脚本中定义了一个函数:function main(number)number = number + 1return numberend在你的游戏代码中,你希望在某个时刻调用这个函数取得它的返回值。在Lua中,函数等同于变量,所以你可以这样来取得这个函数:lua_getglobal(L, "main");//函数现在栈顶现在,我们可以调用这
2012-03-03 18:02:42
5612
原创 大体了解Lua的语法
Lua 的语法比较简单,学习起来也比较省力,但功能却并不弱。 在Lua中,一切都是变量,除了关键字。请记住这句话。 I. 首先是注释 写一个程序,总是少不了注释的。 在Lua中,你可以使用单行注释和多行注释。 单行注释中,连续两个减号"--"表示注释的开始,一直延续到行末为止。相当于C++语言中的"//"。 多行注释中,由"--[["表示注释开始
2012-02-27 11:32:36
2579
原创 内存碎片
内存碎片的产生: 内存分配有静态分配和动态分配两种 静态分配在程序编译链接时分配的大小和使用寿命就已经确定,而应用上要求操作系统可以提供给进程运行时申请和释放任意大小内存的功能,这就是内存的动态分配。 因此动态分配将不可避免会产生内存碎片的问题,那么什么是内存碎片?内存碎片即“碎片的内存”描述一个系统中所有不可用的空闲内存,这些碎片之所以不能被使
2012-02-23 09:48:25
12044
1
原创 ini 文件的字段删除
BOOL WritePrivateProfileString( LPCTSTR lpAppName, // section name LPCTSTR lpKeyName, // key name LPCTSTR lpString, // string to add LPCTSTR
2012-02-22 17:42:52
2122
原创 String函数
收藏自string类的构造函数:string(const char *s); //用c字符串s初始化string(int n,char c); //用n个字符c初始化此外,string类还支持默认构造函数和复制构造函数,如string s1;string s2="hello";都是正确的写法。当构造的string太长而无法表达时会抛出length_error异常
2012-02-22 13:52:50
1500
原创 gb Shadow类
Shadow Write Materials: 是将数据写进阴影图类NiFragmentMaterial的一个简单拓展类。.Shadow Technique: 包括那些将数据写入阴影图的shader code 及 将数据从阴影图里读出的shader code.Shadow Render Click: 由shadow click generator生成的,一个单独的用来渲染一张纹理阴
2012-02-11 20:23:48
1559
原创 了解gb类描述 二
1. NiAlphaSortProcessor该类是渲染列表处理器,首先是无序的渲染那些不透明的几何对象,其次是对所有半透明的几何对象按照从后向前的顺序进行排序并为稍后的渲染返回这些几何对象集。排序可以按照几何体的中心点 也可以按照几何体最靠前的点。没有设置排序规则的NiAlphaProperty对象可以根据观测自主排序,该处理器的功能和NiAlphaAccumulator类很相近。2.N
2012-02-11 17:08:34
1677
原创 了解gb类描述 一
我的博客:http://blog.youkuaiyun.com/xuzhonghai/article/details/72461621.Ni2DBuffer该类是包含像素的二维缓存类。该类不同于NiPixelData ,NiPixelData 是所有的像素数据都存在显存里,而导致CPU不能在不影响性能的情况下访问。 2.Ni3DRenderView该类是用来渲染场景物件的渲染视口类。它有指
2012-02-09 18:12:35
2722
原创 gpu 编程简介
一 目前最新的可编程图形硬件已经具备了如下功能:1 支持vertex programmability 和fragment programmability2 支持IEEE32 位浮点运算 3 支持4 元向量,4 阶矩阵计算 4 提供分支指令,支持循环控制语句 5 具有高带宽的内存传输能力(>27.1GB/s)6 支持1D、2D、3D 纹理像素查询和使用,且
2012-02-07 17:31:13
11261
转载 Facade外观模式
Facade外观模式,是一种结构型模式,它主要解决的问题是:组件的客户和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。在这里我想举一个例子:比如,现在有一辆汽车,我们(客户程序)要启动它,那我们就要发动引擎(子系统1),使四个车轮(子系统2)转动。但是实际中我们并不需要用手推动车轮使其转动,我们踩下油门,此时汽车再根据一些其他的操作使车轮
2012-02-07 16:28:31
1324
转载 Proxy代理模式
Proxy代理模式是一种结构型设计模式,主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。如下图: 比如说C和A不在一个服务器上,
2012-02-07 16:18:04
497
转载 gb 智能指针
在Gamebryo中通过使用智能指针实现引用计数的半自动化。这通过NiPointer来实现,这个模板类重载了操作符,使得它的实例表现出来像一个标准的指针。然而,智能指针自动地增加和减少它指向对象的引用计数,从而应用程序不在直接调用NiRefOjbect的引用计数函数。例如在函数中如果声明一个局部智能指针变量并指向对象A,那么对象A的引用技术在赋值的时候将会增加1。当函数返回的时候,这个局部的智
2012-02-07 16:05:41
675
原创 Lua常用函数
lua_setlocalconst char *lua_setlocal (lua_State *L, lua_Debug *ar, int n);设置给定活动记录中的局部变量的值。参数 ar 与 n 和 lua_getlocal 中的一样(参见 lua_getlocal)。 lua_setlocal 把栈顶的值赋给变量然后返回变量的名字。它会将值从栈顶弹出。 当索引大于局
2012-02-07 14:01:50
2098
原创 Lua 常用函数 一
lua_getallocflua_Alloc lua_getallocf (lua_State *L, void **ud);返回给定状态机的内存分配器函数。如果 ud 不是 NULL ,Lua 把调用lua_newstate 时传入的那个指针放入*ud 。lua_getfenvvoid lua_getfenv (lua_State *L, int index);把索引处值
2012-02-07 13:56:22
37058
转载 使用lua_next()遍历表
转自:http://hi.baidu.com/bitbull/blog/item/bc27581eca1886f61bd5768e.html问题概要: 用lua写了个函数,返回的是一个表.需要在C里对返回的表里元素做二次处理.在C里我们可以通过lua_gettable()或者lua_rawget()来获取表里元素值,但使用这两个接口的前提是你得知道key,它才能给你value. 当然对于顺
2012-02-07 13:42:45
6596
转载 3D Engine 的设计架构
转自:http://blog.youkuaiyun.com/weiqubo/article/details/6995510Introduction (简介)让咱们谈谈你如何撰写一份提供优雅性能的3D引擎。你的引擎需要提供的包括:曲面(curved surfaces)、动态光线(dynamic lighting)、体雾(volumetric fog)、镜面(mirrors)、入口(portals)、
2012-02-05 18:20:19
534
翻译 NiDynamicTexture
翻译自 gb2.6 sdk文档NiDynamicTexture: public NiTextureDescriptionNiDynamicTexture 纹理类是指那些由程序动态生成的,而不是通过3D pipeline渲染的那些纹理。这些纹理通常是用作程序上的一些效果或者是视频切图。Constructors没有构造函数,纹理数据都是通过下面的静态函数Create()创建
2012-02-05 18:08:49
615
转载 设计模式
转自 http://blog.youkuaiyun.com/xoyojank/article/details/5248452 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式
2012-02-05 17:37:51
451
转载 C++构造函数的幕后工作 .
快乐虾http://blog.youkuaiyun.com/lights_joy/lights@hb165.com 本文适用于Xp sp3Vs2008 欢迎转载,但请保留作者信息转自:http://blog.youkuaiyun.com/lights_joy/article/details/4548382 多年前学习C++的时候就知道每个类都有一个默认的构造函数,但是为什么要有
2012-02-05 17:31:03
497
转载 从C++开始演进
转自 http://blog.youkuaiyun.com/zhuweisky/article/details/83259我们要解决的问题是复用问题,我们的目标:(1) 当被复用的软件升级时,客户程序不需要重新编译。(2) 被复用的软件应该容易扩展和升级。(3) 在客户能正常使用复用组件功能的基础上,组件向客户暴露尽可能少的信息。(4) 尽可
2012-02-05 17:07:25
375
转载 C++ 快速内存分配
转自http://blog.youkuaiyun.com/zhuweisky/article/details/416415C++ 快速内存分配 ――zhuweisky 2003.12.10 我们知道,C++中当我们用new在堆中创建一个对象时,会发生两件事情。首先1调用opera
2012-02-05 17:04:39
583
翻译 NiTexture
NiTexture: public NiObjectNetDescriptionNiTexture 是纹理数据的基类吗。其任何子类都要有部分纹理操作。该类没有定义纹理数据怎样存放,如何更新或创建,这都由它的子类进行定义实现。Constructors抽象类没有构造函数提供。Static Member Functionsstatic bool GetMipmapByDe
2012-02-05 16:55:34
540
翻译 NiScreenFillingRenderView
NiScreenFillingRenderView: public NiRenderViewDescription这个类是包含screen-filling NiMeshScreenElements 的render view,它最重要的用处就是绘制全屏效果 和 将一个渲染target上渲染一个单独的纹理。虚函数virtual void SetCameraData(const
2012-02-05 16:01:30
378
翻译 Ni3DRenderView
Ni3DRenderView: public NiRenderViewDescription该类是用来渲染场景中的NiAVObject,它有一个摄像机NiCamera指针一个NiCullingProcesss指针,用来分割场景把所有的可见几何体保存在潜在可见几何体组中。 构造函数Ni3DRenderView(NiCamera* pkCamera = NULL, Ni
2012-02-05 15:52:27
744
翻译 NiMesh2DRenderView
NiMesh2DRenderView: public NiRenderViewDescription这是一个用来渲染NiMeshScreenElements对象的类。设置屏幕空间摄像机数据,将所有的屏幕元素添加到潜在的可见几何体组列表中。 Public Methodsvirtual void SetCameraData(constNiRectfloat>& kV
2012-02-05 15:18:50
412
翻译 NiRenderListProcessor
NiRenderListProcessor: public NiRefObjectDescription该类是一个由NiViewRenderClick用来处理NiRenderView返回的NiRenderObject数组一个渲染处理列表类。它有两个虚函数:一个是在NiViewRenderClick 掉用之前执行的PreRenderProcessList;来处理几何体组另
2012-02-05 15:08:00
467
翻译 NiRenderClickValidator
NiRenderClickValidator: public NiRefObjectDescription该类是所有render click validators的基类,每一个NiRenderClick都有一个指向click验证器的指针来探测该Click在某指定帧中是否应该被渲染,纯虚接口ValidateClick 应该被其派生类重载以返回合适的结果。 Supported Vi
2012-02-05 14:30:18
310
翻译 NiRenderView
NiRenderView: public NiRefObjectDescription这个类是所有render view的基类,它提供了一个纯虚接口CalculatePVGeometry ,用来检测潜在的可见几何对象。在每一帧中,GetPVGeometry 将会返回一个一组几何体的静态引用。NiRenderView 也提供了一个纯虚接口用特定的视口来设置摄像机数据。Render
2012-02-05 14:04:26
394
翻译 NiRenderClick
NiRenderClick: public NiRefObjectDescription该类是所有render clicks的基类,它提供了一个可以被其派生类重载来实现用户渲染的PerformRendering 纯虚函数接口,NiRenderClick 保有一个指针指向render click的验证器,一个渲染目标组,一个视口,及清空模式的renderer,这些都在Render
2012-02-05 13:42:12
566
翻译 NiRenderStep
NiRenderStep: public NiRefObjectDiscussion这个类是所有render steps的基类,它是一个完整渲染帧中的一步,纯虚函数PerformRendering 是要被其子类重载实现以执行用户的渲染函数,NiRenderStep 提供了一个纯虚接口用来设置和获得输出渲染目标组即render target group ,如果需要Pre- and p
2012-02-05 11:46:27
436
翻译 NiRenderFrame
NiRenderFrame: public NiRefObject一渲染帧,包括一个RenderStep对象列表,在Draw函数中遍历这个列表来执行每一个RenderStep对象的Render()函数,调用Display函数执行RenderFrame的渲染工作,在Draw函数开始时会先调用Pre_Processing()函数,结束时会调用Post_processing();
2012-02-05 11:19:25
862
2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人