当前位置:  编程技术>移动开发
本页文章导读:
    ▪【OpenGL4.0】GLSL预约义变量        【OpenGL4.0】GLSL预定义变量GLSL为不同的渲染阶段定义了一些特定的变量。这些预定义(也叫做内置变量)有特定的属性。所有的预定义变量都以gl_开头。用户定义的变量不能以此开头。 下面.........
    ▪ 为何小弟我的 UITableView 不能自动处理软键盘遮挡有关问题        为何我的 UITableView 不能自动处理软键盘遮挡问题 这几天一直被这个问题所困扰 ...... 我的一个应用了使用了 UITableView,当我在位于屏幕下半部分的 cell 单元中输入数据时,系统弹出的软键.........
    ▪ wubi装配ubuntu系统的复制与虚拟硬盘的添加       wubi安装ubuntu系统的复制与虚拟硬盘的添加复制wubi安装好的ubuntu 别人或自己安装好的ubuntu,可以复制过来,直接复制ubuntu目录。由于wubildr.mbr不知道是怎么定位wubildr的,还得把wubildr复制到c:\.........

[1]【OpenGL4.0】GLSL预约义变量
    来源: 互联网  发布时间: 2014-02-18
【OpenGL4.0】GLSL预定义变量

GLSL为不同的渲染阶段定义了一些特定的变量。这些预定义(也叫做内置变量)有特定的属性。所有的预定义变量都以gl_开头。用户定义的变量不能以此开头。

下面分类进行介绍。

(1)顶点着色器输入

in int gl_VertexID;
in int gl_InstanceID;

 gl_VertexID是当前被处理的顶点的索引。对于array rendering,它是当前顶点在数组中的索引;对于indexed rendering,它是从element buffer中获取的索引值。

gl_InstanceID指出了当前被渲染的instance,当使用instancedrendering的时候。

(2)顶点着色器输出

out gl_PerVertex

{

  vec4gl_Position;

  floatgl_PointSize;

  float gl_ClipDistance[];

}

为输出定义了一个block接口。

gl_Position是当前顶点的输出坐标(如果没有几何着色器,是在clip-space)。指定这个值并不是必须的。但是不指定可能会导致意想不到的结果。如果你使用转换反馈或者是关闭了光栅化,或者是使用采用用户定义输出产生坐标的几何着色器,则可以忽略指定这个值。

gl_PointSize指定了点的宽度和高度。只有在绘制点的时候指定它的值才是必须的。

gl_ClipDistance允许着色器设置一个顶点到每个剪切平面的距离。正值表示顶点在剪切平面的里面(后面),而负值表示在剪切平面的外面(前面)。

(3)几何着色器输入

in gl_PerVertex
{
  vec4 gl_Position;
  float gl_PointSize;
  float gl_ClipDistance[];
} gl_in[];
 
in int gl_PrimitiveIDIn;

gl_PerVertex包含了从前面的顶点着色器传送过来的值。

注意:在几何着色器中,他们有前缀gl_in,是一个block的数组。这个数组的大小依赖于用于这个几何着色器的输入的layout关键词。用户不用以一个特定的大小重新声明这个block,系统会自动完成。可以用函数length()获得其大小。

gl_PrimitiveIDIn是在这次渲染过程中的图元数量,即先前被glDraw()调用所处理的图元数量。

GLSL4.00及其以上版本还有以下定义:

in int gl_InvocationID;

几何着色器可以被调用多次,这个值指定了当前调用。

(4)几何着色器输出

out gl_PerVertex
{
  vec4 gl_Position;
  float gl_PointSize;
  float gl_ClipDistance[];
};
 
out int gl_PrimitiveID;
out int gl_Layer;

gl_PerVertex和顶点着色器阶段有相同的意义。

gl_PrimitiveID是图元的用户定义标识符。它直接被传送到片断着色器。如果片断着色器使用了它的相关输入但是几何着色器又没有指定它的值,那么它的值就是预定义的(如果没有几何着色器OpenGL会自动生成)。

gl_Layer用于渲染到layeredframebuffer objects,指定了特定图元要被渲染到的layer。

GLSL4.10还定义了如下输出:

out int gl_ViewportIndex;

它代表了当前图元要被采用得视口变换了裁剪测试。使用和gl_Layer类似。

(5)片断着色器输入

in  vec4  gl_FragCoord;
in  bool  gl_FrontFacing;
in  float gl_ClipDistance[];
in  vec2  gl_PointCoord;
in  int   gl_PrimitiveID;

gl_FragCoord包含了当前片断的window-space坐标。如果入户没重载它,其Z分量是要写入到深度缓冲区的。其W分量是1/Wclip(Wclip是顶点或几何着色器的输出gl_Position的W分量)

gl_FrontFacing:如果图元从其前面观看,则为真,否则为假。

gl_ClipDistance包含了顶点着色器的输出,不过是依据图元进行线性插值后的。

gl_PointCoord:点内部的位置,指定了片断的位置。它是被归一化了的值,位于[0,1]。(0,0)原点位置依赖于OpenGL的点坐标设置,默认是在左下角。

gl_PrimitiveID是几何着色器的输出,如果没有使用几何着色器,由OpenGL产生。代表了被光栅化的图元索引。

GLSL4.00增加了一下输入:

in  int   gl_SampleID;
in  vec2  gl_SamplePosition;
in  int   gl_SampleMaskIn[];

指定了像素区域sample的一些属性。

(6)片断着色器全局变量

struct gl_DepthRangeParameters
{
    float near;
    float far;
    float diff;
};
uniform gl_DepthRangeParameters gl_DepthRange;

这个struct提供了对glDepthRange近、远值的访问。diff等于far和near的差。

(7)片断着色器输出

out float gl_FragDepth;

它是要被写入到深度缓冲区的值。也将被用于深度测试。片断着色器不一定要指定它的值。它可能被gl_FragCoord.z.自动填充。需要注意的是:如果在某处指定,在其他地方也必须要进行指定。

GLSL4.00增加了如下输出:

out int gl_SampleMask[];

当采用多重采样渲染时,它会被写入。

 


    
[2] 为何小弟我的 UITableView 不能自动处理软键盘遮挡有关问题
    来源: 互联网  发布时间: 2014-02-18
为何我的 UITableView 不能自动处理软键盘遮挡问题

这几天一直被这个问题所困扰 ......


我的一个应用了使用了 UITableView,当我在位于屏幕下半部分的 cell 单元中输入数据时,系统弹出的软键盘会把当前在操作的 cell单元遮挡住,这也就是所谓的软键盘遮挡问题,上网找了资料,有许多解决办法,这里就不一一列举了,我选择了苹果官方的提供的方法,参考地址:点击打开链接。问题似乎解决了,但是后来我发现别人的代码确不需要做任何处理,他的 UITableView 就能够很好的自动处理软键盘遮挡问题,而我参照官方提供的范例,又是注册消息,又是计算 UITableView 的 frame,然后再来执行  UITableView 的 scrollRectToVisible 方法来滚动,所有的动作都要自行处理,繁琐!


我找遍了所有关于 UITableView 的属性设置,对照者别人的代码逐项检查,都没有发现问题在哪?没法办法,只好另外新建一个 UITableViewControll,然后测试一下这个新建的会不会也能自动处理遮挡问题,结果发现我自己新建的 UITableViewControll 里的 UITableView 果然也一样无需任何代码均可以自动处理遮挡问题,看来问题就是出在我自己写的 UITableViewController 上了(我把UITableViewController的class指向了自己定义的控制类,而我新建的默认是指向系统的 UITableViewController),通过检查代码,我怀疑可能是因为我自己写的 TableViewController 类重载了 viewWillAppear ,在代码中没有调用 [super viewWillAppear],把这句加上问题解决了,终于解开疑团!


- (void)viewWillAppear:(BOOL)animated

{

    [super viewWillAppear:animated]; // 这句话很重要


......



要不就不要重载这个方法,重载了就一定要记得补上上面这句。 


    
[3] wubi装配ubuntu系统的复制与虚拟硬盘的添加
    来源: 互联网  发布时间: 2014-02-18
wubi安装ubuntu系统的复制与虚拟硬盘的添加
复制wubi安装好的ubuntu

别人或自己安装好的ubuntu,可以复制过来,直接复制ubuntu目录。由于wubildr.mbr不知道是怎么定位wubildr的,还得把wubildr复制到c:\下,真是没辙啊。

假设ubuntu复制在d:\下。确认一下d盘是哪个分区,一般来说,如果是primary partition,可能是1~4中的某个,从win7的磁盘管理工具里能够看到,数数就知道是第几个了,如果是logical partition,一般是从5开始往后,同样从win7的磁盘管理工具里数数吧,我的d盘是第1个logical partition,so,是5,又是在第一块硬盘上,并且是sata硬盘,那就是sda5了,现在一般都是sata硬盘,如果是ide的,应该是hdxx的,放狗搜吧,如果还有scsi的,那就当我不知道。


win7启动项的添加

xp下改boot.ini即可添加启动项,比较好弄,win7就比较费劲点了。

至此,已经为我们的ubuntu添加了启动项,重启就可以看到了。但是,选择ubuntu,只能加载grub,却找不到虚拟磁盘,也就启动不了ubuntu。

在别人的机器上的分区,到我们这里,一般是不一样的,尤其是grub里使用了坑爹的uuid,那就铁定找不到了。没关系,我们还是有办法的。


修改ubuntu的grub启动项

在grub界面,按[e]编辑当前项,一般会看到一堆的启动项,找到类似这个的

把上面红色部分改成我们放ubuntu的分区,也就是sda5。然后ctrl+x启动。顺利的话,就可以启动进入ubuntu了。现在还没有大功告成,如果这样的话,下次启动,还得这么折腾。我们还需要改下grub.cfg,懒人都希望少做事,最好不做事。

先使用

找到sda5分区的uuid。

然后,编辑/boot/grub/grub.cfg,把里面原来的uuid替换成sda5的,保存。以后就可以顺利启动了。


虚拟硬盘的添加

偷懒的方法,把root.disk文件复制一下,改个文件名,进入ubuntu后,照着root.disk方式,改下/etc/fstab。这样就有了块新的硬盘的。

wubi安装最大磁盘只能到30g,编个Android就没空间了,分个物理硬盘格式化成ext4又有点不太值。这个方法添加的硬盘容量只能和root.disk一样大,也就不可能超过30g,貌似有工具可以做虚拟硬盘,还没实践过,有时间搞下。



1楼susemm6天前 23:09坑爹的代码高亮,全是乱的~~~

    
最新技术文章:
▪Android开发之登录验证实例教程
▪Android开发之注册登录方法示例
▪Android获取手机SIM卡运营商信息的方法
▪Android实现将已发送的短信写入短信数据库的...
▪Android发送短信功能代码
▪Android根据电话号码获得联系人头像实例代码
▪Android中GPS定位的用法实例
▪Android实现退出时关闭所有Activity的方法
▪Android实现文件的分割和组装
▪Android录音应用实例教程
▪Android双击返回键退出程序的实现方法
▪Android实现侦听电池状态显示、电量及充电动...
▪Android获取当前已连接的wifi信号强度的方法
▪Android实现动态显示或隐藏密码输入框的内容
▪根据USER-AGENT判断手机类型并跳转到相应的app...
▪Android Touch事件分发过程详解
▪Android中实现为TextView添加多个可点击的文本
▪Android程序设计之AIDL实例详解
▪Android显式启动与隐式启动Activity的区别介绍
▪Android按钮单击事件的四种常用写法总结
▪Android消息处理机制Looper和Handler详解
▪Android实现Back功能代码片段总结
▪Android实用的代码片段 常用代码总结
▪Android实现弹出键盘的方法
▪Android中通过view方式获取当前Activity的屏幕截...
▪Android提高之自定义Menu(TabMenu)实现方法
▪Android提高之多方向抽屉实现方法
▪Android提高之MediaPlayer播放网络音频的实现方法...
▪Android提高之MediaPlayer播放网络视频的实现方法...
▪Android提高之手游转电视游戏的模拟操控
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3