BlueStack与真机的运行相同代码,效果不同的解决
2015-03-30 22:32
288 查看
情况一:同样代码,BlueStack运行正常,真机运行不正常!
第一点:
我们在写shader时,定义float a=1;此时BlueStack上运行程序完全正常,不报出任何错误。但此时在真机运行,logcat提示加载shader出错,并且真机上不显示相关效果。若是改成float a=1.0,在BlueStack和真机上运行都正确,出现相关效果,不报错误。(妈的,我是一行一行删,才找出这个原因的,累死我了)
情况二:同样代码,BlueStack运行不正常,真机运行正常!
第一点:
加载图片方法最好用我在/article/7702328.html中的方法。不到万不得已不要用下面方法:
第二点:
在做粒子系统时,gl_PointSize在bluestack上不起作用,而在真机上起作用。
解决方案一:用DuOS模拟器,也是Android系统的(此方法我试过,可以的)。
解决方案二:GLES20.glEnable(0x8642);就能起作用(此方法真正解决问题)。
当然要感谢这里https://www.khronos.org/message_boards/showthread.php/5984-gl_PointSize-problem
第三点:
在bluestack上运行logcat出现GLES20.glEnableVertexAttribArray(got index=4294967295);而在真机上运行不出现错误;
方法:http://stackoverflow.com/questions/29170900/glgetattriblocation-returns-large-and-unusable-value
我用到的是:2、The attribute with the given name was optimized away because it is not used.原因是我的shader中aColor没用到,而却给了数据。
以上所有问题我解决了一个星期。真正起作用的就最后一天。(要看外国网站,老外还是NB).
第一点:
我们在写shader时,定义float a=1;此时BlueStack上运行程序完全正常,不报出任何错误。但此时在真机运行,logcat提示加载shader出错,并且真机上不显示相关效果。若是改成float a=1.0,在BlueStack和真机上运行都正确,出现相关效果,不报错误。(妈的,我是一行一行删,才找出这个原因的,累死我了)
情况二:同样代码,BlueStack运行不正常,真机运行正常!
第一点:
加载图片方法最好用我在/article/7702328.html中的方法。不到万不得已不要用下面方法:
public static int initTexture(Resources r,int drawableId) { int[] textures = new int[1]; GLES20.glGenTextures ( 1, //产生的纹理id的数量 textures, //纹理id的数组 0 //偏移量 ); int textureId=textures[0]; GLES20.glBindTexture(GLES20.GL_TEXTURE_2D, textureId); GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR_MIPMAP_LINEAR); GLES20.glTexParameteri ( GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR_MIPMAP_NEAREST); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_S,GLES20.GL_REPEAT); GLES20.glTexParameterf(GLES20.GL_TEXTURE_2D, GLES20.GL_TEXTURE_WRAP_T,GLES20.GL_REPEAT); InputStream is = r.openRawResource(drawableId); Bitmap bitmapTmp; try { bitmapTmp = BitmapFactory.decodeStream(is); } finally { try { is.close(); } catch(IOException e) { e.printStackTrace(); } } GLUtils.texImage2D ( GLES20.GL_TEXTURE_2D, //纹理类型 0, GLUtils.getInternalFormat(bitmapTmp), bitmapTmp, //纹理图像 GLUtils.getType(bitmapTmp), 0 //纹理边框尺寸 ); //自动生成Mipmap纹理 GLES20.glGenerateMipmap(GLES20.GL_TEXTURE_2D); bitmapTmp.recycle(); //纹理加载成功后释放图片 return textureId; }因为使用此方法在加载图片时,在raw文件下的图片加载不了。R.drawable.mytexture可以正常使用,R.raw.mytexture就报错,说类型错误。
第二点:
在做粒子系统时,gl_PointSize在bluestack上不起作用,而在真机上起作用。
解决方案一:用DuOS模拟器,也是Android系统的(此方法我试过,可以的)。
解决方案二:GLES20.glEnable(0x8642);就能起作用(此方法真正解决问题)。
当然要感谢这里https://www.khronos.org/message_boards/showthread.php/5984-gl_PointSize-problem
第三点:
在bluestack上运行logcat出现GLES20.glEnableVertexAttribArray(got index=4294967295);而在真机上运行不出现错误;
方法:http://stackoverflow.com/questions/29170900/glgetattriblocation-returns-large-and-unusable-value
我用到的是:2、The attribute with the given name was optimized away because it is not used.原因是我的shader中aColor没用到,而却给了数据。
precision mediump float; uniform sampler2D sTexture; varying vec3 vColor; varying float vElapsedTime; void main() { //float xDistance=0.5-gl_PointCoord.x; // float yDistance=0.5-gl_PointCoord.y; //float distanceFromCenter=sqrt(xDistance*xDistance+yDistance*yDistance); // if(distanceFromCenter>0.5){ // discard; //}else{ //} // gl_FragColor=vec4(vColor/vElapsedTime,1.0); gl_FragColor=texture2D(sTexture,gl_PointCoord); }结论:不用的注释掉或删掉,就解决了。
以上所有问题我解决了一个星期。真正起作用的就最后一天。(要看外国网站,老外还是NB).
相关文章推荐
- 玄学!?相同的代码在不同的IDE下运行结果不同。
- 解决网站项目本地运行ok,将代码上传到服务器中或github中无CSS效果
- 解决Android中xml文件Graphical Layout显示和真机运行显示不相同问题
- eclipse中的tomcat,代码中创建file获取目录与tomcat单独运行获取目录不同的解决办法
- 那些年踩过华为手机的坑——相同的代码不同的效果
- ubuntu环境下搭建好lamp后无法显示代码运行效果解决办法
- sublime text3--解决python代码运行是不能交互的问题
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。 2014-07-04 13:17 78人阅读 评论(0) 收藏
- Android中ImageButton自定义按钮的按下效果的代码实现方法,附网上2种经典解决方法。
- Swagger2 (4)针对于相同url headers 参数不同映射不同的方法问题(已解决)
- 如何解决linux下编译环境,运行环境不同的问题
- 相同代码在GCC不同版本(3.4.4和4.5.3)的不同结果
- Xcode真机调试运行时提示:could not find Developer Disk Image 解决方法
- Mac OS X 10.10, Eclipse+ADT真机调试代码时,Device Chooser中不显示真机的解决方式
- IDEA里运行代码时出现Error:scalac: error while loading JUnit4, Scala signature JUnit4 has wrong version expected: 5.0 found: 4.1 in JUnit4.class错误的解决办法(图文详解)
- 点击不同的通知,跳转到相同的详情页面问题的解决。
- <转>unix环境高级编程中代码运行问题解决
- 百度编辑器ueditor代码高亮效果前台不显示的解决方法
- appium在真机上运行IOS实例要注意的几点:包括python和java运行log 和部分关键代码
- VS2010编译时拿老版本的代码运行,出现"source code is different..."解决办法