1

我在一些桌面应用程序中使用了https://github.com/akrinke/Font-Stash.git。现在我想在使用 gles2 的树莓派上使用它。我查看了代码,发现在 gles 上不起作用的唯一路径是 flush_draw 函数:

glBindTexture(GL_TEXTURE_2D, texture->id);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, VERT_STRIDE, texture->verts);
glTexCoordPointer(2, GL_FLOAT, VERT_STRIDE, texture->verts+2);
glDrawArrays(GL_TRIANGLES, 0, texture->nverts);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);

我正在尝试移植到这个:

glBindTexture(GL_TEXTURE_2D, texture->id);
glEnable(GL_TEXTURE_2D);
GLint position_index = get_attrib(stash->program, "position");
glEnableVertexAttribArray(position_index);
glVertexAttribPointer (position_index, 2, GL_FLOAT, GL_FALSE, VERT_STRIDE, texture->verts);
GLint texture_coord_index = get_attrib(stash->program, "texCoord");
glEnableVertexAttribArray(texture_coord_index);
glVertexAttribPointer (texture_coord_index, 2, GL_FLOAT, GL_FALSE, VERT_STRIDE, texture->verts + 2);
GLint texture_index = get_uniform(stash->program, "texture");
glUniform1i(texture_index, 0);
glDrawArrays(GL_TRIANGLES, 0, texture->nverts);
glDisable(GL_TEXTURE_2D);

带顶点 sl

attribute vec4 position;
attribute vec2 texCoord;
varying vec2 texCoordVar;
void main() {
  gl_Position = position;
  texCoordVar = texCoord;
}

和片段 sl

precision mediump float;        // set default precision for floats to medium
uniform sampler2D texture;      // shader texture uniform
varying vec2 texCoordVar;       // fragment texture coordinate varying
void main() {
  // sample the texture at the interpolated texture coordinate
  // and write it to gl_FragColor
  gl_FragColor = texture2D( texture, texCoordVar);
}

但我什么也得不到,屏幕上什么也没有。

谁能告诉我我的代码有什么问题?

4

2 回答 2

1

您应该在顶点着色器中设置转换。移植固定功能 OpenGL 应用程序的最佳方法是编写顶点和像素着色器,以复制固定管道,并将变换设置为统一,并在每次变换更改时设置这些统一。

于 2013-06-27T11:52:42.750 回答
0

glEnable(GL_TEXTURE_2D),顺便说一句,不是有效的 GLES2。此外,您没有对顶点着色器中的位置进行任何操作,因此除非保证坐标位于平截头体内并且您只是将它们传递给光栅化器,那么您是否要靠运气或不是他们最终在截锥体中。您确定您已经考虑了固定功能管道用于处理转换的所有内容吗?

于 2013-07-19T10:23:22.377 回答