我已将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);
}
但我无法获得任何内容,屏幕上没有任何内容。
有人能告诉我我的代码有什么问题吗?
答案 0 :(得分:1)
您应该在顶点着色器中设置变换。端口固定功能OpenGL应用程序的最佳方法是编写顶点和像素着色器,复制固定管道,并将变换设置为制服,并在每次变换时设置这些制服。
答案 1 :(得分:0)
glEnable(GL_TEXTURE_2D),无效GLES2 btw。你也没有对你的顶点着色器中的位置进行任何操作,所以除非坐标保证坐在平截头体内,并且你只是将它们传递给光栅化器,否则你要保留运气是否或者不是他们最终陷入了截头。你确定你已经考虑了固定功能管道用于处理转换的所有内容吗?