Using
CG
Runtime Library
-
因為
Cg
runtime
是運行進行編譯和執行的接口,所以首先強調預編譯的話,要編譯好多版本,而且對將來的硬件改變不能擴展,沒有使用
cg runtime
來得好
-
執行過程前文介紹過了
-
-
可以通過一個
cg
文件使用
CG
_SOURCE
來創建
CGProgram
,也可以通過一個
cg
程序使用
CG_OBJECT
來創建一個
CGProgram
。
-
CGProgram
:所有的
cg
設置都是圍繞
CGProgram
展開的,目的就是給繪制設置正確的參數狀態。
-
CGbool
cgIsProgramCompiled(CGprogram program);
-
cgCompileProgram(CGprogram
program);
-
CGprogram
cgCopyProgram(CGprogram program);
-
CGprogram
cgGetFirstProgram(CGcontext context);
CGprogram cgGetNextProgram(CGprogram program);但不能保證取出來的順序
-
const
char* cgGetLastListing(CGcontext context);獲得最后一個
cgCreateProgram
的結果
-
CGcontext
cgGetProgramContext(CGprogram program);
CGprofile cgGetProgramProfile(CGprogram program);
CGprofile cgGetProfile(const char* profileString);
const char* cgGetProfileString(CGprofile profile);
-
const char*
cgGetProgramString(CGprogram program,CGenum stringType);
-
CGParameter
:關于參數的函數很多,可以順次取得參數,也可以通過名稱樹(或者叫命名空間)的形式來綁定參數,并用來設置參數。
-
CGparameter
cgGetFirstParameter(CGprogram program,CGenum namespace);
CGparameter cgGetNextParameter(CGparameter parameter);
-
cgGetFirstStructParameter()
along with cgGetNextParameter():
-
int
cgGetArrayDimension(CGparameter parameter);
int cgGetArraySize(CGparameter parameter, int dimension);
CGparameter cgGetArrayParameter(CGparameter parameter,int
index);
CGparameter cgGetNamedParameter(CGprogram program,const char*
name);
-
CGprogram
cgGetParameterProgram(CGparameter parameter);
-
CGenum
cgGetParameterVariability(CGparameter parameter);
-
CGenum
cgGetParameterDirection(CGparameter parameter);
-
CGtype
cgGetParameterType(CGparameter parameter);
-
CGtype
cgGetType(const char* typeString);
const char* cgGetTypeString(CGtype type);
-
const char*
cgGetParameterName(CGparameter parameter);
-
const char*
cgGetParameterSemantic(CGparameter parameter);
-
CGresource
cgGetParameterResource(CGparameter parameter);
CGresource cgGetResource(const char* resourceString);
const char* cgGetResourceString(CGresource resource);
CGresource cgGetParameterBaseResource(CGparameter parameter);
unsigned long cgGetParameterResourceIndex(CGparameter
parameter);
const double* cgGetParameterValues(CGparameter
parameter,CGenum valueType, int* numberOfValuesReturned);
-
CGError
:可以使用回調機制處理錯誤,像
glGetError
那樣獲得最后的錯誤,并有各種錯誤的枚舉。
-
CGerror error =
cgGetError();
const char* errorString = cgGetErrorString(error);
const char* errorString = cgGetErrorString(cgGetError());
}
cgSetErrorCallback(MyErrorCallback);
-
上邊算是核心吧,下邊展示一下總體關系圖。
-
-
我的理解:
0,因為openGL最終使用的是program,所以一切都為了控制Program。
1,可以由file直接生成program,但這種方式不好控制,
只能一個一個的設置parameter的方式去控制參數,
對于具有State的fx更是無能為力。
2,可以由file生成effect,然后通過對于各個Technique的各個Pass的各個State
的設置和改變來控制Effect,再由effect生成Program。
3,一種很好的解決狀態問題的方法就是按照FX封裝State,然后按照State進行排序,
并使用CallBack函數的方式一次性的設置當前Program需要的State。
?
現在還不清楚的是
fx
文件中的
Technique
和
Pass
以及各種
State
狀態是怎么運作,設置到
Program
里邊的。