前阵子移植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(); }