当前位置:   article > 正文

OpenGL渲染视频步骤--面试用_opengl渲染管线流程 面试

opengl渲染管线流程 面试

一 创建一个显卡可执行程序

有两种着色器Shader:顶点着色器、片元着色器。用的是GLSL语言,运行在显卡上的语言。

创建着色器,编译着色器。CreateShader、CompileShader。

创建程序,附加着色器,连接程序,使用程序。

CreateProgram、AttachShader、LinkProgram、UseProgram。

图是电子书里面的。

(区别?)

 二 上下文环境搭建

Window、Linux、Android的上下文环境搭建,都是使用EGL。

获得一个display,配置,创建context,创建surface。

  1. gEglDisplay = eglGetDisplay(EGL_DEFAULT_DISPLAY);
  2. ret = eglChooseConfig(gEglDisplay, attribs, configs, num_configs,&numConfigs);
  3. //参3是共享OpenGL资源,为了效率会多线程渲染
  4. mEglContext = eglCreateContext(mEglDisplay, mEglConfig, EGL_NO_CONTEXT, contextAttributes);
  5. //起新线程执行渲染工作,为该线程绑定Surface、Context。
  6. eglMakeCurrent(mEglDisplay, mEglSurface, mEglSurface, mEglContext)

三 OpenGL纹理渲染

1 规定窗口大小,

2 使用显卡绘制程序,useprogram,

3 设置物体坐标,(向右增长、向上增长、范围是[-1,1]),将当前的顶点属性与顶点缓冲对象(VBO)关联起来。

4 设置OpenGL二维纹理坐标,(向右增长、向上增长、范围是[0,1])

5 将纹理对象传递给片元着色器。

6 设置纹理属性,绘制。

  1. //后面标的数字是步骤
  2. glViewport(0, 0, 窗口宽, 窗口高); //1
  3. glUseProgram(mProgram); //2
  4. //获取位置、纹理、矩阵计算的句柄
  5. mPositionHandle = glGetAttribLocation(mProgram, "vPos");
  6. mTextureHandle = glGetAttribLocation(mProgram, "vTexturePos");
  7. mTextureMatrixHandle = glGetUniformLocation(mProgram, "textureMatrix");
  8. glVertexAttribPointer(mPositionHandle, 2, GL_FLOAT, GL_FALSE, 0, 物体坐标); //3
  9. glEnableVertexAttribArray(mPositionHandle);
  10. glVertexAttribPointer(mTexPosHandle, 2, GL_FLOAT, GL_FALSE, 0, 纹理坐标); //4
  11. glEnableVertexAttribArray(mTexPosHandle);
  12. GLfloat texMatrix[16];
  13. surfaceTexture->getTransformMatrix(texMatrix);
  14. glUniformMatrix4fv(mTexMatrixHandle, 1, GL_FALSE, texMatrix);//5
  15. glBindTexture(GL_TEXTURE_EXTERNAL_OES, mTextureId);
  16. //设置纹理属性: 放大、缩小、防止超过纹理坐标(0,1)
  17. glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR); //6
  18. glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
  19. glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
  20. glTexParameteri(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
  21. glDrawArrays(GL_TRIANGLE_FAN, 0, 4); //4个顶点四边形

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/112777
推荐阅读
相关标签
  

闽ICP备14008679号