2010-02-18 272 views
2

我移植從Visual Studio 2005的一些代碼到Visual Studio 2008glaux.lib在Visual Studio 2008

我可以使用在\ PlatformSDK \ lib文件夾中找到在Visual Visual Studio 2005中發現了glaux.lib Studio 2008? 我不想改變我的API和必須使用glaux.h

如說here的要求,做這項工作

看起來glaux.lib已被棄用。 而是鏈接到KERNEL32.LIB, USER32.LIB,GDI32.LIB和http://www.songho.ca/opengl/files/glaux.h advapi32.lib

回答

2

AFAIK,大多數程序員錯過了auxDIBImageLoad()函數,並且沒有記錄的解決方法。 glaux.lib是一個靜態庫,並引入了一些代碼膨脹。

此圖像加載器將工作而不會<glaux.h>:

HBITMAP hbm=LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(1)); 
if (!hbm) return false; 
BITMAP bm; 
GetObject(hbm,sizeof bm,&bm); 
BITMAPINFO bmi={sizeof bmi,bm.bmWidth,bm.bmHeight,1, 
    32};  // 24 = GL_BGR_EXT, 32 = GL_BGRA_EXT; all other fields are 0 
DWORD*bits=new DWORD[bm.bmWidth*bm.bmHeight]; 
GetDIBits(hDC,hbm,0,bm.bmHeight,bits,&bmi,DIB_RGB_COLORS); 
... 
glTexImage2D(GL_TEXTURE_2D,0,3,bm.bmWidth,bm.bmHeight,0, 
    GL_BGRA_EXT,GL_UNSIGNED_BYTE,bits); 
... 
delete[] bits; 
DeleteBitmap(hbm); 

這個程序會同時處理RGB(24位)和正確索引圖像!無需手動像素旋轉!該示例從數字ID爲1的process.exe資源加載。

LoadBitmap()可由LoadImage()替換以從文件加載。

如果輸入圖像是已知是未壓縮的RGB型的,不需要的GetDIBits,因爲你可以的LoadImage()與LR_CREATEDIBSECTION,訪問使用bmBits指針的位,並使用GL_BGR_EXT恆定。 (不需要刪除運營商。)

的GetDIBits需要任何有效的設備上下文句柄成功。如果您沒有方便的話,請使用GetDC/ReleaseDC。

The GL_BGRA_EXT常量是微軟對opengl的擴展,它的使用正是這樣的GetDIBits輸出。

加載壓縮的PNG/GIF/JPG沒有在這裏測試,但應該以相同的方式工作; GetDIBits()是你的朋友。此外,可以將該位圖選擇到存儲設備上下文中(使其成爲繪製畫布),然後使用普通的舊GDI函數(特別是文本寫入函數)修改該位圖以將文本插入到位圖中。