如何將opengl程序從Windows上移植到linux上?

opengl程序中包含windows.h頭文件,好多在Windows上有的宏在linux上沒有。移植時怎樣處理。除了這個,還應注意些什麼。


建議基於 glfw/glfw · GitHub 以及 dcnieho/FreeGLUT · GitHub等跨平台的窗口庫一勞永逸解決這個問題。

包含窗口建立、事件循環、滑鼠、鍵盤、手柄等功能。

而且是 C API。

glfw 非常好用,我基於 glfw、glew、nanovg、stb 等開源的庫開發了個跨平台的 C API 的 creative coding 庫,island-org/island · GitHub


別用任何系統特異的設施不就完了。你可以用glut、SDL這類跨平台的底層。


GLFW/GLEW可以讓你省掉很多事情. 避免掉入native window的坑裡.

當然Shader和驅動的坑是不可避免的


等你能跑起來之後,記得要讓你的程序多配幾份shader,啟動的時候看看人家是什麼顯卡什麼驅動,從而挑選各種猥瑣的、互不兼容的、繞過bug地方法。


問題解決了,其實OpenGL程序可移植性還是很好的,由於使用了glut庫,我的程序其實注釋掉windows.h就可以運行了。之前之所以出現錯誤,是因為顯卡驅動的事。由於程序中用到了GLSL語言,包含if語句,這條語句中有兩條條件,通過或連接。沒有更新驅動之前,顯卡認不認識這個if語句,將if語句拆開為兩條if語句,程序就能運行。後來無意中更新了一下顯卡驅動,apt-get install 一大堆英偉達的東西,原來的程序完美運行。


1.拿平台宏包起來

2.找不到的函數 要是簡單的自己抄一段貼上

複雜的怒搜Google 蒼天不負有心人你總能找到對應代替的函數 記得包起來

3.以前鬼才知道WCHAR居然是我軟特色主義產物的 這種莫名其妙的和重要的基本類型記得都搞個別名 int32 float64 f16 名字嘛取得開心就好了 別忘了包起來

4.我自己跨過幾次windows和osx的opengl 大體問題都出在shader版本上 記得看清楚自己的顯卡最高支持到幾

shader上我也沒拿平台宏包過幾次 一句話 高興的話包起來也沒事嘛……

總而言之 opengl跨平台問題不算太大 大部分情況都是莫名其妙的找不到函數

前兩天就在osx的c標準庫里找到一個字元串無視大小寫匹配的函數 結果我大微軟硬是找不到 依仗人格魅力自己抄了個 然後默默地拿_WIN32宏包了起來 悄悄的附上了一句注釋

// 這尼瑪鬼才知道win下居然還有找不到的東西


推薦閱讀:

TAG:MicrosoftWindows | Linux | 程序 | OpenGL | 程序移植 |