从OpenGL到GLES 2.0的端口

时间:2013-06-26 15:32:23

标签: opengl opengl-es-2.0 glsles

我已将https://github.com/akrinke/Font-Stash.git用于某些桌面应用程序。现在我想在使用gles2的覆盆子Pi上使用它。我查看了代码,看到不能在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);
}

但我无法获得任何内容,屏幕上没有任何内容。

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

glEnable(GL_TEXTURE_2D),无效GLES2 btw。你也没有对你的顶点着色器中的位置进行任何操作,所以除非坐标保证坐在平截头体内,并且你只是将它们传递给光栅化器,否则你要保留运气是否或者不是他们最终陷入了截头。你确定你已经考虑了固定功能管道用于处理转换的所有内容吗?