看起来图像大小不是 256 x 256,而是大约 150 像素宽。您的纹理必须是 2 大的幂,但如果您需要上传更小的纹理,您可以使用glTexSubImage2D http://www.opengl.org/sdk/docs/man/xhtml/glTexSubImage2D.xml:
glTexSubImage2D(GL_TEXTURE_2D, /* target */
0, /* level */
0, /* xoffset */
0, /* yoffset */
150, /* width */
256, /* height */
GL_RGBA, /* format */
GL_UNSIGNED_BYTE, /* type */
this->pBuffer); /* data */
在最初的 glTexImage2D 调用中,只需传递 NULL 而不是像素缓冲区。尝试这样的事情,看看是否会有所不同。
如果您使用 glDrawTexiOES 绘制纹理,则要裁剪较小的纹理,请使用 GL_TEXTURE_CROP_RECT_OES:
int rect[4] = {0, imageHeight, imageWidth, -imageHeight};
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(0, 0, 0, windowWidth, windowHeight);