前阵子移植Android程序至Android x86系统中,发现该系统的OpenGL ES版本为1.0,故需要加上OpenGL ES 1.0的贴图方式,在此做一下记录。一下为贴图主要代码。
#include <GLES/gl.h>
#include <GLES/glext.h>
#include <GLES/glplatform.h>
GLuint gProgram;
GLuint m_iPositionHandle;
GLuint m_iTexCoorHandle;
GLuint m_iTextureUniformY;
GLuint m_iTextureUniformU;
GLuint m_iTextureUniformV;
GLuint m_iTexture;
// 四边形顶点索引
const unsigned short indices[] = { 0, 1, 2, 3};
const float vertices[] = {
-1.0f, -1.0f, 0,
1.0f, -1.0f, 0,
1.0f, 1.0f, 0,
-1.0f, 1.0f, 0
};
// 四边形坐标(0-1)
const float coords[] = {
0.0f, 1.0f,
1.0f, 1.0f,
1.0f, 0.0f,
0.0f, 0.0f,
};
bool setupGraphics()
{
glDisable(GL_DITHER);
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_FASTEST);
glClearColor(.5f, .5f, .5f, 1);
glShadeModel(GL_SMOOTH);
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);
glRotatef(-180.0f,1.0f,0.0f,0.0f);
return true;
}
void renderFrame()
{
glClearColor(0, 0, 0, 1.0f);
glClear(GL_COLOR_BUFFER_BIT);
}
void loadTexture(void* pData, GLuint m_iVideoW, GLuint m_iVideoH)
{
if(!m_iTexture)
{
glGenTextures(1, &m_iTexture);
}
// 清除屏幕
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// 启用顶点和纹理坐标
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glBindTexture(GL_TEXTURE_2D, m_iTexture);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_iVideoW, m_iVideoH, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, pData);
// 绘制四边形
glMatrixMode(GL_PROJECTION);
glFrontFace(GL_CCW);
glVertexPointer(3, GL_FLOAT, 0, vertices);
glEnable(GL_TEXTURE_2D);
glTexCoordPointer(2, GL_FLOAT, 0, coords);
glDrawElements(GL_TRIANGLE_FAN, 4, GL_UNSIGNED_SHORT, indices);
//renderFrame();
}