Vertex shader Architecture:

所有在vertex shader中的数据都用128-bit的quad-floats表示(4x32-bit)。

vertex shader线性地执行程序——一个指令(introduction)一个指令地执行。它不允许循环、跳跃、条件分支。在DirectX 8.x中,vertex shader 程序的最大长度被限制在128个指令。用vertex shaders一个用来计算变换(transformation),一个用来计算光照(lighting)是不可能的。在一个时间段,只允许有一个vertex shader是活跃的(active)。每个活跃的vertex shader必须计算所有被要求的每个顶点的输出数据。

一个vertex shader使用16个(v0-v15)输入寄存器(input register)去存取(access)顶点输入数据。顶点输入寄存器可以很容易的存储一个典型的顶点的数据:顶点的坐标位置、法线、漫发射和高光颜色、雾坐标、点的size信息等。

常量寄存器(constant registers)在vertex shader开始处理由程序员定义的参数前被CPU载入。vertex shader不能写入常量寄存器。常量寄存器被用来存储参数例如:光源位置、矩阵、动画特效程序数据、顶点插值数据、关键帧插值等。这些常量能被应用在程序中,甚至能在寻址寄存器(address register) a0.x的帮助下被间接寻址。但是,每个指令只能使用一个常量。如果一个指令需要使用多于一个常量,它必须在它被请求之前载入到一个暂时寄存器(temporary registers)。The names of the constant registers are c0-c95 or, in the case of the ATI RADEON 8500, c0-c191.暂时寄存器(temporary registers)由12个寄存器组成,用来执行中间运算(intermediate calculations)。它们可以被用来载入和存储数据(read/write)。The names of the temporary registers are r0-r11。


有13个输出寄存器(vertex output),依赖于基础硬件。这些寄存器的名字以“o”开始。顶点输出每光栅都是可用的,并且你的Vertex shader程序通过只写(write-only)访问它。执行后,最后的结果是另一个顶点,这个顶点被变换到齐次裁减空间(homogenous clip space)。下面的表格是所有可用的寄存器。

 

vertex shader(1)的更多相关文章

  1. vertex shader(4)

    Swizzling and Masking 如果你使用输入.常量.临时寄存器作为源寄存器,你可以彼此独立地swizzle .x,.y,.z,.w值.如果你使用输出.临时寄存器作为目标寄存器,你可以把. ...

  2. vertex shader(3)

    之前我们学习了如何声明顶点着色器.如何设置常量寄存器中的常量.接下来我们学习如何写和编译一个顶点着色器程序. 在我们编译一个顶点着色器之前,首先需要写一个. 有17种不同的指令(instruction ...

  3. vertex shader(2)

    一次只有一个vertex shader是活跃的.你可以有多个vertex shader,如果一个物体特殊的变换或者灯光,你可以选择合适的vertex shader来完成这个任务. 你可能想使用vert ...

  4. 【Unity Shader实战】卡通风格的Shader(二)

    写在前面 本系列其他文章: 卡通风格的Shader(一) 好久没写博客了,一定是因为课程作业比较多,一定不是因为我懒,恩恩. 三个月以前,在一篇讲卡通风格的Shader的最后,我们说到在Surface ...

  5. 【Unity Shader实战】卡通风格的Shader(一)

    写在前面 本系列其他文章: 卡通风格的Shader(二) 呜,其实很早就看到了这类Shader,实现方法很多,效果也有些许不一样.从这篇开始,陆续学习一下接触到的卡通类型Shader的编写. 本篇的最 ...

  6. 学习笔记:GLSL Core Tutorial – Vertex Shader(内置变量说明)

    1.每个Vertex Shader都有用户定义的输入属性,例如:位置,法线向量和纹理坐标等.Vertex Shaders也接收一致变量(uniform variables). uniform vari ...

  7. 基于Cocos2d-x学习OpenGL ES 2.0系列——编写自己的shader(2)

    在上篇文章中,我给大家介绍了如何在Cocos2d-x里面绘制一个三角形,当时我们使用的是Cocos2d-x引擎自带的shader和一些辅助函数.在本文中,我将演示一下如何编写自己的shader,同时, ...

  8. Unity Shader (三)Surface Shader机制

    转自:http://blog.csdn.net/candycat1992/article/details/39994049 写在前面 一直以来,Unity Surface Shader背后的机制一直是 ...

  9. Unity Shader (一)ShaderLab 语法

    一.什么是Shader Shader(着色器):是可以在GPU上运行的一段程序,通过Shader可以进行一些渲染相关的设置. 二.什么是ShaderLab 目前面向GPU的编程有三种高级图像语言:HL ...

随机推荐

  1. ios逆向工程-内部钩子(Method Swizzling)

    Method Swizzling(方法调配) 怎么说呢,先了解什么是钩子为什么用钩子,学过C++的朋友应该清楚,hook就是用来获得(截断/改变)底层调用的方法.这样我们可以自由的修改或者读取一些想要 ...

  2. stm32寄存器版学习笔记10 SPI

    SPI(Serial Peripheral Interface),串行外围设备接口.SPI是一种高速的.全双工.同步的通信总线. SPI接口一般使用4条线通信: MISO 主设备数据输入,从设备数据输 ...

  3. BZOJ4152 AMPPZ2014 The Captain 【最短路】【贪心】*

    BZOJ4152 AMPPZ2014 The Captain Description 给定平面上的n个点,定义(x1,y1)到(x2,y2)的费用为min(|x1-x2|,|y1-y2|),求从1号点 ...

  4. iPhone4s 9.2.1安装cydia(越狱)

    依据网上资料而来 主要就是上图视频中的6步骤选项,不要选错. 1.prepare for jailbreak 2.选择Accept 3. proceed with jailbreak 4.begin ...

  5. json对象和json字符串相互转换

    1.将JSON字符串转换为JSON对象 var data = JSON.parse(str); // JSON.parse();方法 console.log(data.name); 2.将JSON对象 ...

  6. 【oracle】Oracle安装概述

    一.各种分布式数据库 MS SQL Server是中大型分布式关系型数据库.  Oracle ,DB2(IBM)是超大型分布式关系数据库. MySql是中小型分布式关系型数据库. 二.Oracle O ...

  7. Nchan 安装试用(openresty 同时支持)

    备注:        使用nginx最新的源码包(nginx-1.13.6),以及源码安装   1. 下载源码包(nginx+ Nchan) https://nginx.org/download/ng ...

  8. 修改http请求文件为本地文件的一种方法:hook InternetReadFile 和 HttpOpenRequest

    今天没事的时候学了一下easyhook来hook本进程API,确实很简单就能hook.然后想到这个问题:替换webbrowser请求的文件为本地文件.有什么用就不说了,都懂.因为没有用API写过htt ...

  9. python 多线程要点

    要点整理 多线程 #coding=utf-8 import threading from time import ctime,sleep def music(func): for i in range ...

  10. 算法提高 P1001【大数乘法】

    当两个比较大的整数相乘时,可能会出现数据溢出的情形.为避免溢出,可以采用字符串的方法来实现两个大数之间的乘法.具体来说,首先以字符串的形式输入两个整数,每个整数的长度不会超过8位,然后把它们相乘的结果 ...