稍微仔细看了一下你的代码。错误应该是在在这里。
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mGLCubeBuffers[0]);
GLES20.glBindBuffer(GLES20.GL_ARRAY_BUFFER, mGLTextureBuffers[0]);
你可以把 TextureBuffers 的数据改成(-1, -1) 你的画面位置应该就对了。
或者简单的条换一下这两个函数的调用顺序也可以。
OpenGL Client 接口是一个状态机。
OpenGL Client 接口是一个状态机。
OpenGL Client 接口是一个状态机。
在 issue 一个 drawcall 之前只能 bind 一个 buffer 。
你这样写相当于只有一个 buffer 被 bind 了。
以下是修改建议,
在 OpenGL ES 上,最好使用 packed 的 vertex 。
可以参考以下文档。
https://developer.apple.com/library/content/documentation/3DDrawing/Conceptual/OpenGLES_ProgrammingGuide/TechniquesforWorkingwithVertexData/TechniquesforWorkingwithVertexData.html#//apple_ref/doc/uid/TP40008793-CH107-SW1也就是说只使用一个 vbo ,而不是给每一个 buffer 都建立一个 vbo 。
举个例子,
struct vertex {
GLfloat pos[2];
GLfloat uv[2];
}
glVertexAttribPointer(loc_pos, 2, GL_FLOAT, GL_FALSE, sizeof(struct vertex), offsetof(struct vertex, pos)); glVertexAttribPointer(loc_uv, 2, GL_FLOAT, GL_FALSE, sizeof(struct vertex), offsetof(struct vertex, uv));
offsetof(struct vertex, uv) -> 的值应该是 8