我有以下問題。我正在使用 Glut openGL 在我用 Delphi 撰寫的應用程式中繪制某些元素。我正在使用的庫檔案稱為glut32.dll(放置在EXE檔案所在的位置) 現在我決定以 64 位編譯我的應用程式,因為它使用的其他庫將僅針對 64 位更新。一切都好,但阻止我的一件事是glut32.dll(它是 32 位的)。由于多年來不支持 Glut 專案,我找到了聲稱可以替代原始 Glut的freeglut替代方案: https ://freeglut.sourceforge.net/,并從此處下載了freeglut.dll : www.transmissionzero。 co.uk/software/freeglut-devel/對于 MSVC。
當我查看.h頭檔案時,它似乎或多或少與我在 *.pas 檔案中的代碼翻譯相同。所以我嘗試只加載freeglut.dll而不是glut32.dll(dll在下面的函式中設定為正確的 dll 名稱)
procedure LoadGlut(const dll: String);
begin
FreeGlut;
hDLL := LoadLibrary(PChar(dll));
if hDLL = 0 then raise Exception.Create('Could not load Glut from ' dll);
@glutInit := GetProcAddress(hDLL, 'glutInit');
@glutInitDisplayMode := GetProcAddress(hDLL, 'glutInitDisplayMode');
@glutCreateWindow := GetProcAddress(hDLL, 'glutCreateWindow');
@glutCreateSubWindow := GetProcAddress(hDLL, 'glutCreateSubWindow');
@glutDestroyWindow := GetProcAddress(hDLL, 'glutDestroyWindow');
@glutPostRedisplay := GetProcAddress(hDLL, 'glutPostRedisplay');
...
它正在加載并且沒有錯誤等等,其中的程序也是如此,但是當應用程式啟動并達到使用這些功能之一的點時,它只是停止除錯器而沒有錯誤訊息(如按 Ctrl F2)。
procedure DrawArrow(P1, P2: TRPoint; Color: TRGBAColor);
var
R : Real;
begin
DrawLine(P1, P2, Color);
glColor4fv(@Color[0]);
glPushMatrix;
SetZAxis(P2, P1);
R := VectorModulus(VectorDifference(P1,P2));
glTranslated(0, 0, R);
SetSymbolScale;
glTranslated(0, 0, -ARROW_L);
glutSolidCone(ARROW_W/2, ARROW_L, SOLID_SLICES, SOLID_STACKS);
glPopMatrix;
glPopMatrix;
end;
除錯器在 glutSolidCone(ARROW_W/2, ARROW_L, SOLID_SLICES, SOLID_STACKS); 處自行關閉。這個函式也在 freeglut 中定義。
編輯:如果我呼叫像glutInitDisplayMode這樣的其他簡單函式,它不會停止,所以似乎庫已正確加載。但它仍然在glutSolidCone或其他繪圖功能處不斷關閉。
我沒有太多使用這些頭檔案和它附帶的dll的經驗,但我的Delphi代碼在這種情況下應該是一個很好的翻譯?或不?我不知道如何除錯這個。調整我的代碼以適應freeglut的方法是什么。我認為它應該很小,因為大多數事情應該是一樣的。
感謝您的幫助
uj5u.com熱心網友回復:
似乎僅僅用 freeglut.dll 替換glut32.dll并不能正常作業,因為我猜里面的函式有點不同(或者只是重命名freeglut.dll --> glut32.dll也失敗了)。但是我發現了 NVIDIA 發布的解決方法:NVIDIA Cg Toolkit
自 2013 年以來不支持它,但在安裝時它帶來了glut32的dll版本,用于 32 位和 64 位開發。快速嘗試一下,它似乎可以作業并涵蓋了我在 Glut.pas 中的定義。
因此,如果您需要 64 位版本并替換glut32.dll,可以從那里下載。
同時,如果有人將 freeglut 標頭 (.h) 轉換為 Delphi 代碼,那將是非常棒的,因為最終Freeglut專案仍然得到維護,是最新的,并且除了原始的 Glut 之外還添加了一些更有用的功能。這種轉換仍然超出我的知識范圍。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/530429.html
