Welcome 微信登录

首页 / 操作系统 / Linux / 在Android 的openGL ES 2.0中向shader中传struct

没想到openGL ES 2.0和1.x之间的差别那么大,而市面上介绍2.0的资料又很少。 说说问题:怎么向shader中的struct传数据?直接说答案:struct不提供一次全部赋值的方法,只能一个一个数据传入。比如:
  1. struct Blur{  
  2.     int a;  
  3.     float b;  
  4. }  
  5. uniform Blur blur;  
那么就需要向blur.a和blur.b中一个一个赋值数据。
  1. GLES20.glUniform1i(GLES20.glGetUniformLocation(mProgram,"blur.a"),123);  
  2. GLES20.glUniform1f(GLES20.glGetUniformLocation(mProgram,"blur.b"),123.456);  
还有一件事,本以为GLSL的语法在Android和iOS上都一样,结果,有差别:在iOS中变量名和方法名可以共用,在android中不可以共用。否在在useProgram的时候会报invalidate_operation的错误。多么坑爹的差别啊!关于错误码,咱上网搜了很久错误码都没找到代表什么意思。结果很SB,错误码写在了GLES20的常量中。如果你能看到源代码,他们还被写在了一起。再补充一条,关于图像加载。原以为加载完图像了会自动分配到sampler2D上,结果不是这样的,需要自己给sampler2D分配编号:fragmentShader:uniform sampler2D pic1; 
uniform sampler2D pic2;  如果不分配编号的话,加载的就都是一个图像,苦逼。 java:
  1. int th1 = GLES20.glGetUniformLocation(mProgram, "pic1");  
  2. GLES20.glUniform1i(th1,0);  
  3. int th2 = GLES20.glGetUniformLocation(mProgram, "pic2");  
  4. GLES20.glUniform1i(th2,1);  
Ubuntu下解决不能识别外部设备的方法Linux常用命令整理2012版相关资讯      OpenGL 
  • OpenGL显示图片  (08月07日)
  • OS X的CAOpenGLLayer中如何启用  (12/13/2015 16:26:18)
  • OpenGL编程指南(原书第8版) 中英  (08/25/2015 08:34:15)
  • OpenGL中旋转平移缩放等变换的顺序  (03月10日)
  • Fedora和Ubuntu下安装OpenGL开发环  (10/23/2015 15:14:17)
  • OpenGL中投影矩阵的推导  (08/25/2015 08:33:52)
本文评论 查看全部评论 (0)
表情: 姓名: 字数