适用于Android的OpenGL ES 2.0中的着色器

时间:2016-09-28 08:31:44

标签: android opengl-es glsl shader

我想做一些AR的东西。我走了几个教程的几个步骤,如

我正在使用OpenGL ES 2.0。特别是在第一个教程中,他们为片段和顶点着色器实现了一些GLSL着色器代码。然后他们编译它。

我是否需要为我想用OpenGL绘制的每个原始对象实现这样的代码?或者我可以重复使用着色器代码来绘制不同类型的形状和相同类型形状的不同实例吗?

此外:我可以只重复使用着色器代码还是可以重用已编译的着色器程序?

1 个答案:

答案 0 :(得分:1)

为几个几何图形重用相同的着色器是提高性能的常用方法,因为它们将被视为单个绘图调用。 如果设置着色器(glUseProgram),它将可用于任意数量的后续调用。

教程非常基础,您应该将着色器代码抽象为更面向对象的方法。 例如:

public class Material{
   String mVertexShaderCode;
   String mFragmentShaderCode;
   int mProgram;

   void initialize(){
      // do loadShader and attachShader here
   }

   void draw(){
     GLES20.glUseProgram(mProgram);
     // do more draw stuff
   }
}

也许这可以让您更轻松地了解如何使用和重用着色器代码。

回答后续问题;是的你可以重复使用它们。限制是如果您还重用已编译的着色器,则无法使用不同的着色器特定属性。当你开始使用它们时,这些限制将变得很明显。