注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

过☆客

一颗迷茫的心在3D世界中飘荡...

 
 
 

日志

 
 
关于我

爱宁静,不爱喧闹, 爱奋斗,也爱自由, 爱顺其自然,爱独来独往, 没高学历,不算成功, 没车也没房,但我真诚, 走进你的世界,却不留痕迹, 我是过客,不只是过客...

 
 

Vertex shader program indexing  

2013-11-10 20:41:07|  分类: 日积月累-D3D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
怪事年年有,今年特别多,好好的游戏在ios和小米2s、三星、htc等上面都正常,但是,一跑到小米3上就报出一个opengl es的shader错误:C6016:Profile requires arrays with non-constant indexes to be uniform。
定位到错误的代码段

vec2 Corner[4];
Corner[0] = vec2(-0.5, 0.5 );
Corner[1] = vec2( 0.5, 0.5 );
Corner[2] = vec2(-0.5,-0.5 );
Corner[3] = vec2( 0.5,-0.5 );

// Position为外部传进来的vec4,ScaleRot也是外部传进来的vec3
int iCornerID = int(Position.w);
vec2 vCoord = ScaleRot.xy * Corner[iCornerID]; // 就这个数组访问出错了

怎么都想不通这会有错误,唯一的解释是,小米3上的shader版本不支持数组动态下标访问。经测试把 Corner[iCornerID]换为常量则正常运行。这样的话这个问题可以临时这样解决

int iCornerID = int(Position.w);

vec2 vCoord;

if( iCornerID ) vCoord = ScaleRot.xy * vec2(-0.5, 0.5 );

else if( iCornerID ) vCoord = ScaleRot.xy * vec2(0.5, 0.5 );

else if( iCornerID ) vCoord = ScaleRot.xy * vec2(-0.5, -0.5 );

else if( iCornerID ) vCoord = ScaleRot.xy * vec2(0.5, -0.5 );
       在网上也有人遇到这样的问题,但解决办法都类似用if else搞定。

  评论这张
 
阅读(473)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018