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创建。 

  • 相关阅读:
    TOMCAT清理
    tomcat 热部署、热加载 精析
    TOMCAT配置数据库连接池
    TOMCAT修改端口号
    TOMCAT配置管理员
    Go语言net/http 解读.
    《coredump问题原理探究》Linux x86版7.7节 set对象
    Asp.net与office web apps的整合
    【设计模式】代理模式实现连接池
    手把手实现Java权限(1)-Shiro介绍
  • 原文地址:https://www.cnblogs.com/cchHers/p/14685629.html
Copyright © 2011-2022 走看看