#
void split(std::string& s, std::string& delim,std::vector< std::string >* ret)
{
size_t last = 0;
size_t index=s.find_first_of(delim,last);
while (index!=std::string::npos)
{
ret->push_back(s.substr(last,index-last));
last=index+1;
index=s.find_first_of(delim,last);
}
if (index-last>0)
{
ret->push_back(s.substr(last,index-last));
}
}
給一個比較老的圖形引擎添加讀取png的功能
使用devil
添加過程很簡單,但是發(fā)現(xiàn)貼圖總是倒的
根據(jù)以往的經(jīng)驗
這肯定是和讀出來的raw data的字節(jié)序有關的
于是老是在調整字節(jié)順序
最后終于發(fā)現(xiàn)
讀取圖片前使用
ilEnable(IL_ORIGIN_SET)后
一切正常。
總的來說nv的5系列的顯卡是很爛的系列
nv在6系列之前都是被ati壓著。
說說5200這塊爛卡
通過測試發(fā)現(xiàn)5200的固定管線比可編程管線要快許多
所以,
雖然5200支持到sm2
但是游戲中還是要把它劃為和mx440一個等級上去
相同測試在5600和ati9550上執(zhí)行
均沒有發(fā)生這樣的事情。
特此備忘
新建一個QT的工程
發(fā)現(xiàn)使用的ZIP函數(shù)庫總是在編譯的時候報關于Unicode的錯誤
我在vs2003下工作的都很順利
于是很自然的把vs2005的工程設置里面的使用字符集 改成了多字節(jié)
再編譯,但是問題依舊
。。。。。。。。
。。。。。。。
最后,偶然的打開vs2005的c++設置選項
赫然發(fā)現(xiàn)一個unicode的宏定義 在上面
刪之,
世界太平
幾乎每一本windows編程的書都會告訴你
dll目錄的查找順序
如果你對第三方提供的dll
進行了某些hack
那么請十分注意你的dll的路徑
因為windows第一個查找的路徑是
windows\system32
如果這個目錄中不幸的也有你需要使用的dll
那么你所做的hack將會無用。
前天來制作游戲的離線更新包
突然發(fā)現(xiàn)以前很正常的代碼突然link錯誤了
而且Link錯誤是報庫之間的函數(shù)沖突libc,libcmtd.lib和微軟的函數(shù)沖突
弄了半天未果
于是惱怒之下把原來備份的代碼翻出來
把cpp和.h替換之后
在編譯 又OK了
當時時間緊迫,也沒多想。
周一來上班
發(fā)現(xiàn)這個問題又出現(xiàn)了,
于是好好的檢查了一番。
經(jīng)過一層層抽絲剝繭
字節(jié)比對之后
很偶然的發(fā)現(xiàn)
原來是一個cpp文件導致了這個Link的問題
把這個cpp從項目中排除之后
再編譯會提示說XXx函數(shù)找不到的link錯誤
然后再把這個cpp包含進來
再編譯 就ok了
如果這個時候你把vc2003再關掉
再打開,rebulid
那么錯誤又會出現(xiàn)。
原因是什么
至今尚未查清。
使用d3d Device提供的獲得顯存的函數(shù)
在有的ati低端顯卡上得到的數(shù)值與實際有較大出入
例如ati 9100
本來就64m顯存,通過d3d的函數(shù)得到的數(shù)字有110m
估計是把agp部分也算進去了
這不是我們想要的。
于是換一個方法
使用ddraw的方法來查詢,
經(jīng)檢驗這個方法是可行的。
于是修改引擎代碼
期間遇到com組件幾個問題
最后遇到一個問題
編輯器在初始化引擎的時候有個函數(shù)
莫名奇妙的跳轉到另外一個函數(shù)
久思,
最后原因只能是和剛才添加了一個虛函數(shù),導致編譯出來的類的結構已經(jīng)變了
于是到處查到底是哪里不對,
查到工程的link屬性
發(fā)現(xiàn)其中指向的目錄是分支版本前的目錄
又把增量編譯給關了
但是問題依舊。
最后又過了半天才想起是include的目錄沒有改過來。
哎
分支版本真是害死人啊。
教訓:
碰到這種問題很明顯就是項目的配置問題
一定要仔細檢查,
這一次都已經(jīng)想到是link有問題了
卻沒有進一步想到include 的問題。
凡是遇到d/r運行結果不一樣
或者使用vc調試運行的結果和直接運行Exe的結果不同的
首先需要檢查變量是否初始化
尤其是圖形方面的程序
先檢查相機的各個參數(shù)
今天Load項目的Effect.dll
死活Load不進來
突然想起以前用OD調試程序,
機器上沒有OD,不過隨vc倒是有depency
打開一看
赫然發(fā)現(xiàn)原來是這個Effect.dll的一個依賴的dll沒有放進來
于是乎
眾DLL歸位,一切正常。
QRegExp是Qt的正則表達式類.
Qt中有兩個不同類的正則表達式.
第一類為元字符.它表示一個或多個常量表達式.
令一類為轉義字符,它代表一個特殊字符.
一.元字符
. 匹配任意單個字符.例如, 1.3 可能是1. 后面跟任意字符,再跟3
^ 匹配字符串首. 例如, ^12可能是123,但不能是312
$ 配字符串尾. 例如, 12$可以是312, 當不能是 123
[] 匹配括號內輸入的任意字符.[123]可以為1, 2 或3
* 匹配任意數(shù)量的前導字符. 例如, 1*2可以為任意數(shù)量個1(甚至沒有), 后面跟一個2
+ 匹配至少一個前導字符. 例如, 1+2必須為一個或多個1, 后跟一個2
? 匹配一個前導字符或為空. 例如 1?2可以為1或這12
二.統(tǒng)配模式
通過 QRegExp::setPatternSyntax(QRegExp::Wildcard);可以將元字符設置為統(tǒng)配模式.在統(tǒng)配模式下,只有3個元字符可以使用.他們的功能沒有變化.
? 匹配任意單個字符, 例如, 1?2可以為1,后面跟任意單個字符, 再跟2
* 匹配任意一個字符序列. 例如, 1*2, 可以為1, 后面跟任意數(shù)量的字符, 再跟一個2
[] 匹配一個定義的字符集合. 例如, [a-zA-Z\.]可以匹配 a到z之間任意一個字符和. [^a]匹配出小寫a以外的字符.
三.轉義序列
\. 匹配"."
\^ 匹配"^"
\$ 匹配"$"
\[ 匹配"["
\] 匹配"]"
\* 匹配"*"
\+ 匹配"+"
\? 匹配"?"
\b 匹配響鈴字符,使計算機發(fā)出嘟的一聲.
\t 制表符號
\n 換行符號
\r 回車符鉿
\s 任意空格
\xnn 匹配16進制為nn的字符
\0nn 匹配8進制的nn字符
這些表達式均以\開始, 與C++的轉義字符相同,所以為了定義QRegExp中的一個轉義序列,
需要在前面添加兩個\\