VS2015編譯和運(yùn)行Quake 2

心血來潮归敬,突然想看Quake 2的代碼,折騰一下硕勿,終于在VS 2015編譯成功哨毁,項(xiàng)目在oraoto/quake2-vs2015

這篇文章記錄一下實(shí)現(xiàn)的過程源武。

下載Quake 2源碼

Quake 2代碼已經(jīng)開源扼褪,可以在Github或id Software的FTP下載想幻。我從FTP下的,所以沒fork Github上的倉庫话浇。

升級(jí)項(xiàng)目

解壓后找到quake2.dsw脏毯,這是VC++ 6的項(xiàng)目,用VS 2015打開會(huì)提示升級(jí)項(xiàng)目:

升級(jí)項(xiàng)目.png

確認(rèn)升級(jí)即可幔崖。

修復(fù)編譯錯(cuò)誤

先嘗試在Debug模式下編譯食店,會(huì)有很多錯(cuò)誤,這些錯(cuò)誤都是升級(jí)項(xiàng)目過程中產(chǎn)生的赏寇。

  1. '/ZI' and '/Gy-' command-line options are incompatible
    每個(gè)項(xiàng)目都打開Enable function-level Linking即可叛买。
  2. LNK1181 cannot open input file '...\debug\.obj'
    編譯ref_soft軟件渲染器時(shí)會(huì)出現(xiàn)這個(gè)錯(cuò)誤,沒有正確輸出匯編的編譯結(jié)果蹋订,要打開ref_soft.vcxproj手工修改
    找到CustomBuild率挣,里面有些這樣的項(xiàng):
    <Outputs Condition="...">$(OUTDIR)\$(InputName).obj;%(Outputs)</Outputs>
    
    $(InputName)改成%(Filename)就可以了
  3. LNK 2026 module unsafe for SAFESEH image
    ref_soft項(xiàng)目的Linker->Advanced->Image Has Safe Exception Handlers改成No即可。
  4. 關(guān)閉DEP
    把每個(gè)項(xiàng)目的Linker->Advanced->Data Execuation Prevention關(guān)掉露戒。

經(jīng)過這些修改椒功,就能正常跑起軟件渲染器了。

支持OpenGL渲染器

不管是Steam上賣的Quake 2和上面編譯的都跑不了OpenGL智什,調(diào)試發(fā)現(xiàn)是在打印日志的時(shí)候出錯(cuò)动漾。

在初始化OpenGL的時(shí)候有這么兩句(在ref_gl/gl_rmain.c/R_Init):

gl_config.extensions_string = qglGetString (GL_EXTENSIONS);
ri.Con_Printf (PRINT_ALL, "GL_EXTENSIONS: %s\n", gl_config.extensions_string );

就是獲取顯卡支持的OpenGL擴(kuò)展,然后打印≤В現(xiàn)在的顯卡都支持很多擴(kuò)展旱眯,我的有300多個(gè),整個(gè)字符串就超過了打印函數(shù)定義的4096字節(jié)证九,就溢出了删豺。

所以把vid_dll.c里的MAXPRINTMSGqcommon/common.cMAXPRINTMSG改到足夠大就可以了。也可以去掉打印語句愧怜,更簡單呀页。

重新編譯后就可以用OpenGL了:

OpenGL下的Quake 2

回顧

做了很多第一次做的事,有時(shí)只是憑感覺去嘗試拥坛。

例如改DEP設(shè)置蓬蝶,是因?yàn)榭吹藉e(cuò)誤信息:Access violation **executing** location,我猜是程序去執(zhí)行了非代碼的內(nèi)存猜惋,去看觸發(fā)的代碼是這樣的:

 align 4
 public _R_Surf8Patch
_R_Surf8Patch:
 push ebx

 mov eax,ds:dword ptr[_colormap]
 mov ebx,offset LPatchTable8
 mov ecx,32
LPatchLoop8:
 mov edx,ds:dword ptr[ebx]
 add ebx,4
 mov ds:dword ptr[edx],eax
 dec ecx
 jnz LPatchLoop8

 pop ebx

 ret

居然是匯編丸氛,一臉懵逼啊。還好想到ASLR和DEP著摔,于是試一試缓窜,發(fā)現(xiàn)可以。

再說OpenGL,起初怕有很復(fù)雜的原因?qū)е屡懿涣吮⑾矗徽{(diào)試才發(fā)現(xiàn)居然只是普通的內(nèi)存溢出。

試一試總比直接放棄好卧波。

接下來就要看代碼了时肿,感覺自己水平不夠,好難啊……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末港粱,一起剝皮案震驚了整個(gè)濱河市螃成,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌查坪,老刑警劉巖寸宏,帶你破解...
    沈念sama閱讀 211,423評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異偿曙,居然都是意外死亡氮凝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,147評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門望忆,熙熙樓的掌柜王于貴愁眉苦臉地迎上來罩阵,“玉大人,你說我怎么就攤上這事启摄「灞冢” “怎么了?”我有些...
    開封第一講書人閱讀 157,019評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵歉备,是天一觀的道長傅是。 經(jīng)常有香客問我,道長蕾羊,這世上最難降的妖魔是什么喧笔? 我笑而不...
    開封第一講書人閱讀 56,443評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮龟再,結(jié)果婚禮上溃斋,老公的妹妹穿的比我還像新娘。我一直安慰自己吸申,他們只是感情好梗劫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,535評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著截碴,像睡著了一般梳侨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上日丹,一...
    開封第一講書人閱讀 49,798評(píng)論 1 290
  • 那天走哺,我揣著相機(jī)與錄音,去河邊找鬼哲虾。 笑死丙躏,一個(gè)胖子當(dāng)著我的面吹牛择示,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播晒旅,決...
    沈念sama閱讀 38,941評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼栅盲,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了废恋?” 一聲冷哼從身側(cè)響起谈秫,我...
    開封第一講書人閱讀 37,704評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎鱼鼓,沒想到半個(gè)月后拟烫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,152評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡迄本,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,494評(píng)論 2 327
  • 正文 我和宋清朗相戀三年硕淑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘉赎。...
    茶點(diǎn)故事閱讀 38,629評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡喜颁,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出曹阔,到底是詐尸還是另有隱情半开,我是刑警寧澤,帶...
    沈念sama閱讀 34,295評(píng)論 4 329
  • 正文 年R本政府宣布赃份,位于F島的核電站寂拆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏抓韩。R本人自食惡果不足惜纠永,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,901評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望谒拴。 院中可真熱鬧尝江,春花似錦、人聲如沸英上。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽苍日。三九已至惭聂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間相恃,已是汗流浹背辜纲。 一陣腳步聲響...
    開封第一講書人閱讀 31,978評(píng)論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人耕腾。 一個(gè)月前我還...
    沈念sama閱讀 46,333評(píng)論 2 360
  • 正文 我出身青樓见剩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親扫俺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苍苞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,499評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容