【问题标题】:Substition for glTexImage1D in OpenGL es 3.0?在 OpenGL es 3.0 中替代 glTexImage1D?
【发布时间】:2016-07-27 11:43:13
【问题描述】:

我正在尝试将 OpenGL 代码移植到 Android 上的 OpenGL ES 3.0 代码中。 但是,函数“glTexImage1D”和“GL_TEXTURE_1D”没有定义在 OpenGL ES 2.0 规范。有什么替代品吗?

我的 Android 手机支持 16 个纹理单元,在个人电脑上实现 GLSL 着色器需要通过 1D 纹理循环。

因此,最可能的方法是用“glTexImage2D”和“GL_TEXTURE_2D”代替?

#include <GL/glut.h>

GLuint tex = 0;
void init()
{
    glGenTextures(1, &tex);
    glBindTexture(GL_TEXTURE_1D, tex);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_1D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    //
    unsigned char buf[32 * 4];
    for (size_t i = 0; i < sizeof(buf); i += 4)
    {
        buf[i + 0] = rand() % 255;
        buf[i + 1] = rand() % 255;
        buf[i + 2] = rand() % 255;
        buf[i + 3] = 255;
    }
    glTexImage1D(GL_TEXTURE_1D, 0, 4, sizeof(buf) / 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
}

void display()
{
    glClear(GL_COLOR_BUFFER_BIT);

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-2, 2, -2, 2, -1, 1);

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();

    glEnable(GL_TEXTURE_1D);
    glBindTexture(GL_TEXTURE_1D, tex);
    glColor3ub(255, 255, 255);

    glLineWidth(10);
    glBegin(GL_LINES);
    glTexCoord1i(0);
    glVertex2i(-1, -1);
    glTexCoord1i(1);
    glVertex2i(1, 1);
    glEnd();

    glutSwapBuffers();
}

int main(int argc, char **argv)
{
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
    glutInitWindowSize(640, 480);
    glutCreateWindow("GLUT");
    glutDisplayFunc(display);
    init();
    glutMainLoop();
    return 0;
}

【问题讨论】:

    标签: android opengl-es


    【解决方案1】:

    是的,只需使用 Texture2D 和高度为 1 的 2D 纹理。

    【讨论】:

      【解决方案2】:

      谢谢,

      #include <GL/glut.h>
      
      GLuint tex = 0;
      void init()
      {
      unsigned char buf[ 32 * 4];
          for (size_t i = 0; i < sizeof(buf); i += 4)  
          {
                  buf[ i + 0] = rand() % 255;
                  buf[ i + 1] = rand() % 255;
                  buf[ i + 2] = rand() % 255;
                  buf[ i + 3] = 255;
          }
      
      
          glGenTextures(1, &tex);
          glBindTexture(GL_TEXTURE_2D, tex);
          glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // 4 or 8
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); 
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
          glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
      
          glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);
      
      
      }
      
      void display()
      {
          glClear(GL_COLOR_BUFFER_BIT);
      
          glMatrixMode(GL_PROJECTION);
          glLoadIdentity();
          glOrtho(-2, 2, -2, 2, -1, 1);
      
          glMatrixMode(GL_MODELVIEW);
          glLoadIdentity();
      
          /*
          glEnable(GL_TEXTURE_1D);
          glBindTexture(GL_TEXTURE_1D, tex);
          */
      
          glEnable(GL_TEXTURE_2D);
          glBindTexture(GL_TEXTURE_2D, tex);
      
      
          glColor3ub(255, 255, 255);
      
          glLineWidth(10);
          glBegin(GL_LINES);
          glTexCoord1i(0);
          glVertex2i(-1, -1);
          glTexCoord1i(1);
          glVertex2i(1, 1);
          glEnd();
      
          glutSwapBuffers();
      }
      
      int main(int argc, char **argv)
      {
          glutInit(&argc, argv);
          glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE);
          glutInitWindowSize(640, 480);
          glutCreateWindow("GLUT");
          glutDisplayFunc(display);
          init();
          glutMainLoop();
          return 0;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-01-13
        • 1970-01-01
        • 2019-05-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-08
        • 1970-01-01
        相关资源
        最近更新 更多