Note - Shader - 2

OpenGL:
*glflush(),glfinish()必要時才用

GLSL:
*primitive shader
沒有統一規格

*vertex stream會提供一些vertex infomation給vertex shader

*pixel
shader 吃vertex shader output

*pixel shader
不能額外宣告output

*gl_fragcolor一定會出現在pixel shader

*dynamic array
能利用的只有register(register 太小),所以不支援dynamic

OpenGL shading language
變數型態:

*attribute:vertex stream input

*varying(vertex shader和pixel
shader 溝通之變數)
vertex shader output & pixel shader
input

*uniform:此變數型態從暫存器抓input
data,多用於存共用之變數

*constant:類似uniform,但不能改其值

*flow control(if
else....):performance low

*program是用來link vertex and pixel
shader,可以有很多個,不同的組合(vertex+pixel),可連到不
同的program

fixed pipeline:
*先projection再clipping
*rasterization->frame
buffer->show image
*transform之目的:3d->2d的方便性 (screen
mapping才將3d->2d)
*pre-vertex operations->texture coordinate
*opengl
pipeline 流程取自HW
*pre-fragment operations:作一系列TEST,決定目前的fragme
(pixel+colorinformation ......) 是否取代frame buffer
對應之點


GPUS(programmable pipeline):
*directx主導3d
api
*programmable pipeline 和 fixed pipeline 的差別在於中間流程可寫入memory
*vertex
shader:不能分辨primitive,看成多個點,可平行計算
*primitive
shader:可知道vertex間的相互關係,也是平行化計算(以primitive為單位)
*animation in primitive
shader
*rasterization:算primitive cover 多少pixels
*fragment shader:處理 pixels
(平行化計算)

posted on 2011-06-26 22:14  warmwar  阅读(170)  评论(0编辑  收藏  举报