2012年12月1日 星期六
C# with Unmanaged c++ debug setting
如果起始專案是C#的話,而用到其他的專案有些是Unmanaged c++的DLL,預設如果想下中斷點在這些Unmanaged c++的專案,是無法使用的。得在起始專案的屬性內設定->Debug頁面->Enabled Unmanaged C++ debugging。
2012年10月9日 星期二
Debug DLL
Compiler DLL還是會產生.pdb檔,這個pdb檔會在compiler時候產生,做為Debug時可看到Source code之用。通常pdb檔放在跟dll檔同一個資料夾,就會自己去抓到。但是如果放在別的資料夾就要去設定symbol file放在哪裡。
設定方式可以參考到這:
http://msdn.microsoft.com/en-us/library/x54fht41.aspx
VS2008的從MSDN的說明來看,是在Tools->Options->Debugging->Symbols裡面設好就可以了。
另外看有沒有設到正確的抓到PDB檔,可以在VS Debug執行時,Debug->Windows->Modules內可以看到所有DLL載入的情況。
設定方式可以參考到這:
http://msdn.microsoft.com/en-us/library/x54fht41.aspx
VS2008的從MSDN的說明來看,是在Tools->Options->Debugging->Symbols裡面設好就可以了。
另外看有沒有設到正確的抓到PDB檔,可以在VS Debug執行時,Debug->Windows->Modules內可以看到所有DLL載入的情況。
2012年9月19日 星期三
NiMesh composition
NiMesh
are the array of NiDataStreamRef objects that contain all varying attributes of
the mesh (vertices, indices, etc)
Element - An element is an array of data
that supplies a single input variable (varying or
uniform) to a shader program. Each stream
element defines a format and an offset where a particular element may be found
for a given stream. Multiple elements may be interleaved(插入)
into a single stream.
這邊指的是因為我們的NiDataStream是一連串的資料,假設有十組頂點資料,每組內的資料包含了當前的頂點位置,法向量,貼圖座標,前面這三項我們稱為Element。
Region A Region defines a contiguous
subset of a stream. The elements must be the same across all regions in a
stream. Every region contains the following data:
-the
base offset into each stream
-the
active number of elements for the Region
Region指的就是data stream內的某部分資料範圍
Mesh裡面是很多個data stream ref所組成的。
似乎一個mesh裡可以用好多個,不過我想通常剛好分成各個Sematic各一個stream。應該很少會有相同的Sematic的data stream。不過看起來好像可以多個相同的Semantic data stream。可能主要是共用頂點資料八。但是一個mesh裡只可以有一個USAGE_VERTEX_INDEX 用途的stream
Semantic就是送到Shader內,他要知道目前送來的資料是頂點位置,法向量,還是貼圖座標,這個information就是Semantic。
Semantic index:指的像是TEXCOORDINATE0, 1, 2, 3這種暫存器的index
用NiDataStream的CreateDataStream,然後就可以丟NiDataStreamElementSets就可以了。
NiDataStreamElement是Describes
an element of a NiDataStream object, by data type, format, and offset.
NiDataStreamElementLock是用來可以從指定的Mesh取得某一個特定的semantic的資料,並且可以用來抓到mesh內sub-mesh的某特定semantic資料的起始位置和結束位置。所以要注意它是已經被綁定的。
NiDataStreamPrimitiveLock是用來可以從指定的Mesh取得某一個特定的primitive的資料index資料,像是Line或Triangle這種,都是Primitive。
那Element的話應該可以指定單一某種Semantic的資料全都抓出來的樣子。而Primitive是以Primitive來分,所以Primitive可能會有POSITION
and COLOR的資料都有。
NiTStridedRandomAccessIterator
就是用來抓element內的資料的。
Semantic - The elements must
be the same across all regions in a stream
NiDataStreamRef是用來記錄一個data stream裡面資料代表什麼資料的範圍,及語意,NiDataStreamRef可以多個對一個data stream。
NiDataStreamElement::Type 資料型態int
or something
NiDataStreamElement::Format 資料擺放格式,可能是xyzw,或者zyxw這種擺放格式。
2012年7月12日 星期四
QT lib compiler with visual studio
想compiler自己的QT lib以及同時產生出visual studio的專案。先下載qt-win-opensource-4.8.2-vs2008,本身就有附lib檔,但是沒有專案檔。如果想要2005的lib檔以及專案檔就得自己compiler。
目前測試環境:
qt-win-opensource-4.8.2-vs2008
visual studio 2005 professional
window 7 企業版
---------------------------------以下轉載別人的內容
添加系統環境變量
QTDIR=D:\Qt\4.8.1
QMAKESPEC=win32-msvc2005
註:如果是vs2008話改成win32-msvc2008
在PATH裡添加%QTDIR%\bin
QTDIR=D:\Qt\4.8.1
QMAKESPEC=win32-msvc2005
註:如果是vs2008話改成win32-msvc2008
在PATH裡添加%QTDIR%\bin
打開VS2005命令提示窗口(開始菜單-Microsoft Visual Studio 2005-Visual Studio Tools-Visual Studio 2005 Command Prompt)
在VS2005命令提示窗口(系統的命令窗口不行)下切換到目錄:D:\Qt\4.8.1
輸入命令行: configure -debug-and-release -opensource -platform win32-msvc2005
提示是否接收license的時候輸入y
10分鐘左右的樣子就configure完成了
經常在Linux下編譯安裝軟件的同學對這一步肯定非常熟悉嘍。它的作用就是根據當前系統的具體環境生成一個makefile文件,供之後make用。
註:configure 後面的參數可以根據自己的需要來做調整,去掉不需要的東西,精簡系統,減少make編譯時間。參數說明可以看官方文檔 http://doc.qt.nokia.com/4.7-snapshot/configure-options.html 或者configure –help
configure完成之後就要make了,這是一個漫長的過程。
在VS2005命令提示窗口(系統的命令窗口不行)下切換到目錄:D:\Qt\4.8.1
輸入命令行: configure -debug-and-release -opensource -platform win32-msvc2005
提示是否接收license的時候輸入y
10分鐘左右的樣子就configure完成了
經常在Linux下編譯安裝軟件的同學對這一步肯定非常熟悉嘍。它的作用就是根據當前系統的具體環境生成一個makefile文件,供之後make用。
註:configure 後面的參數可以根據自己的需要來做調整,去掉不需要的東西,精簡系統,減少make編譯時間。參數說明可以看官方文檔 http://doc.qt.nokia.com/4.7-snapshot/configure-options.html 或者configure –help
configure完成之後就要make了,這是一個漫長的過程。
make步驟有兩個選擇,一是繼續輸入nmake,二是通過並行編譯版的nmake——jom來編譯。
關於jom的介紹可以看這裡,http://labs.qt.nokia.com/2009/03/27/speeding-up-visual-c-qt-builds/, 有人寫了並行版的nmake,可以讓多核cpu來所有的cpu資源都利用起來,加快編譯速度。ftp://ftp.qt.nokia.com/jom/ 這裡下載最新的jom,然後解壓到一個位置,比如說 D:\Qt\jom,然後在make步驟就可以這樣..\jom\jom.exe -j N,這裡的N是cpu個數。
我用nmake編的時候出錯了,後來重新configure了一份,用jom來編,N為4,沒有錯誤,用了不到兩個小時的時間。
關於jom的介紹可以看這裡,http://labs.qt.nokia.com/2009/03/27/speeding-up-visual-c-qt-builds/, 有人寫了並行版的nmake,可以讓多核cpu來所有的cpu資源都利用起來,加快編譯速度。ftp://ftp.qt.nokia.com/jom/ 這裡下載最新的jom,然後解壓到一個位置,比如說 D:\Qt\jom,然後在make步驟就可以這樣..\jom\jom.exe -j N,這裡的N是cpu個數。
我用nmake編的時候出錯了,後來重新configure了一份,用jom來編,N為4,沒有錯誤,用了不到兩個小時的時間。
----------------------自己實際遇到的問題
DefaultLocalizationStrategy.cpp(327) : 「error C2001: newline in constant」 in building 4.8.0
主要應該是當遇到不支援unicode的程式時,OS會把這個視為什麼語系,因為我們是繁體中文版,所以只要把OS預設的地方改成英文(美國)就好了。
win 7的地方在控制台->地區及語言->系統管理(分頁)->非unicode的語言改成英文(美國)
DefaultLocalizationStrategy.cpp(327) : 「error C2001: newline in constant」 in building 4.8.0
主要應該是當遇到不支援unicode的程式時,OS會把這個視為什麼語系,因為我們是繁體中文版,所以只要把OS預設的地方改成英文(美國)就好了。
win 7的地方在控制台->地區及語言->系統管理(分頁)->非unicode的語言改成英文(美國)
2012年7月7日 星期六
Homogeneous Matrix Decomposition
主要的用途是Matrix經過許多translate, rotate, scale後的matrix怎麼解析回原來的matrix或數值。目前是沒使用過這種東西,而且也覺得要在程式上實作效率應該蠻慢的,覺得真的要求出來User做了什麼動作,花點空間紀錄最實在。如果真的要的話只知道有種東西QR Decomposition,Wiki查的到這邊只是給自己留著紀錄,也沒實際看懂過。
2012年5月8日 星期二
Gambryo standard material registry global constant
因為繼承gamebryo previewer的standard material來修改gamebryo的shader pipeline,一般我們新增一個global attribute這個動作一般都放在standard material的callback function,像是HandleFinalPixelOutputs function。但是要注意因為這個callback function是在model被render時,如果shader仍然沒有被產生出來,才會呼叫到這一個callback function。所以自然的在gamebryo shader factory global attributes list,都還不知道有一個新增的變數。如果剛好我們在這之前,先用了NiShaderFactory::UpdateGlobalShaderConstant,這樣自然在
global attributes list內,找不到指定變數名來update。如果一定要在callback function被呼叫之前就要有這個
global attribute,應該用
NiShaderFactory::RegisterGlobalShaderConstant。
那為什麼一般像fx的shader就不用這樣,是因為fx本身在code內就寫好有哪些attributes是global了,所以gamebryo去load指定的shader library時就會去找到哪些attributes是global的,把它加到global attributes list。而相反的因為繼承standard material的關係,因為是shade tree的關係,所以shader code是動態產生的,必須等到callback function執行才知道有新的global attributes。
Shader render state annotation
directX fx shader一般有提供一些render state,可以直接在每個pass內決定說要做什麼樣的render方式,像是AlphaBlendEnable = false; ZEnable = false;這類的config。
那要注意的是像gamebryo,它則是要在technique這邊宣告一些東西
那要注意的是像gamebryo,它則是要在technique這邊宣告一些東西
technique testTechnique
<
string Description = "Gamebryo annotation";//這行只是描述而已
string ShaderName = "testTechnique";//gamebryo這行要match technique的名字
bool UsesNiRenderState = true;//要設為true, gamebryo才會設定render state
>
{
pass P0
{
.....
ZEnable = false;
AlphaBlendEnable = false;
}
}
訂閱:
文章 (Atom)