一个着色器启用纹理渲染和每顶点颜色,还是两个专用着色器?

时间:2014-03-23 16:32:04

标签: android opengl-es-2.0 glsl

我正在编写一个简单的Android程序,使用OpenGL显示简单的每顶点彩色形状和一个显示帧速率的计数器。

我发现由于OpenGL中没有内置的文本渲染,显示帧率很棘手...我搜索了很长时间才找到一个可以用OpenGL ES 2.0做的简单代码,我发现{ {3}}在Github上。为此,它使用专用的顶点和片段着色器。以下显示片段着色器:

uniform sampler2D u_Texture;
precision mediump float;
uniform vec4 u_Color;
varying vec2 v_TexCoordinate;
void main()
{
    gl_FragColor = texture2D(u_Texture, v_TexCoordinate).w * u_Color;
}

但是,为了渲染我的每顶点彩色形状,我使用以下片段着色器:

precision mediump float;            
varying vec4 v_Color;             
void main()
{
    gl_FragColor = v_Color;
}

我有点困惑......

我的Android应用程序可以同时使用这两种着色器并在其中之间切换吗?如果是,怎么做?

或者我应该使用一个着色器执行这两项任务吗?在这种情况下,着色器会是什么样的?

另外,我很感激有关如何在OpenGL ES 2.0中轻松实现FPS显示的任何提示(很简单,我指的是一些专门用于FPS显示的类,而不是一般的文本呈现)。

2 个答案:

答案 0 :(得分:1)

我不知道我们如何在Android中做到这一点,但在OpenGL中可以使用不同的着色器来处理不同的几何体。它就是这样的。

 glUseProgram(textShaderProgram) 
 /* draw text /*
 glUseProgram(otherStuffProgram) 
 /* draw other stuff */

所以基本的想法是在绘制应该应用它的几何体之前激活着色器。希望你能找到类似android的东西。

答案 1 :(得分:1)

一般来说,使用任何普遍的'是不好的做法。 OpenGL(ES)中的着色器。它们的效率太低了。他们有太多的指示。他们不能很好地优化GPU。您应该根据需要为特定需求创建任意数量的着色器。

相关问题