zoukankan      html  css  js  c++  java
  • OpenGL渲染架构图介绍

    简要解释:

    Client客户端:指的是存储在CPU中的一些代码,比如要使用OpenGL API和C/C++的代码。

    Server服务端:指的是调用GPU芯片。

    Vertex Shader:顶点着色器,管道接收Uniforms、Attributes、Texture Data(纹理数据),三个参数中,但是Texture Data(纹理数据)给顶点着色器实际上没有必要。

    Fragment Shader:片元着色器。

    Primitive Assembly:图元装配,也就是光栅化。这个是我们OpenGL开发人员无法干预的。

    三种数据的介绍:

    1、Attributes管道主要是接收经常发生改变的数据,比如颜色数据、顶点数据、纹理数据、光照法线等;Attributes只能传给顶点着色器里面,不能直接传递到片元着色器,需要通过GLSL代码间接传递给片元着色器。

    2、Uniforms管道主要是接收比较统一,不经常发生改变的数据,比如旋转矩阵、视频的颜色空间YUV数据;Uniforms既可以传给顶点着色器也可以传递给片元着色器里面。Uniforms类似于constant(静态值)。

    3、Texture Data纹理管道。

    PS:纹理的用处,其一是滤镜,图片本身就是纹理,对图片做滤镜处理其实就是在读取纹理数据的时候,改变图片的纹理值,比如图片本来是彩色的,在读取纹理值是可以改变成灰度的图片。其二就是在渲染的时候使用纹理填充,在渲染一个图片的时候,比如说一个正方体,可以使用线框填充,也可以使用颜色填充,还可以使用纹理填充,纹理也可以有多张图片,比如两张图片混合之后在填充。

    PS:视频解码后,就是一帧帧的图片,然后利用OpenGL ES或Metal将这些图片渲染播放出来。图片的颜色空间用的是RGB,视频的颜色空间使用的是YUV,这中间就需要将YUV数据转化为RGB数据,使用转换矩阵,这个转换矩阵就是要传给片元着色器。

    关于客户端和服务端,可以用下面这张图方便理解:

    由于OpenGL是基于C的API,因此它非常便携且受到广泛支持。作为C API,它与基于OC和Cocoa应用程序无缝集成。OpenGL提供应用程序用于生成2D或3D图像的函数,应用程序将渲染的图像呈现给屏幕或将它们复制回自己的内存。

    OpenGL规范没有提供自己的窗口层,它依赖于OS X定义的功能来将OpenGL绘图与窗口系统集成,应用程序创建OS X。OpenGL渲染下下文并将渲染目标附加到其上(称为可绘制对象)。渲染上下文管理OpenGL状态更改和通过调用OpenGL API创建。 

  • 相关阅读:
    洛谷P1877: [HAOI2012]音量调节(动态规划)
    hihocoder#1014 : Trie树
    hihocoder#1014 : Trie树
    河南省第六届大学生程序设计竞赛 : Card Trick(模拟)
    河南省第六届大学生程序设计竞赛 : Card Trick(模拟)
    第四届河南省程序设计大赛:表达式求值 (栈)
    第四届河南省程序设计大赛:表达式求值 (栈)
    第四届河南省程序设计大赛:BOBSLEDDING (贪心)
    第四届河南省程序设计大赛:BOBSLEDDING (贪心)
    菜根谭#52
  • 原文地址:https://www.cnblogs.com/cchHers/p/14685629.html
Copyright © 2011-2022 走看看