我有以下问题。我正在使用Glut openGL在我用 Delphi 编写的应用程序中绘制某些元素。我正在使用的库文件名为glut32.dll(放在EXE文件所在的位置)现在我决定用64位编译我的应用程序,因为它使用的其他库将只更新为64位。但是有一件事阻止了我,那就是glut32.dll(它是32位的)。由于Glut项目已经多年不被支持了,我找到了*freeglut*替代方案,它声称是原始Glut的替代品: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(箭头_W/2、箭头_L、实体切片、实体堆栈)处关闭自身;此函数也在freeglut中定义。
**EDIT:**如果我调用其他简单的函数,如 glutInitDisplayMode,它不会停止,因此看起来库被正确加载。但它仍然在 glutSolidCone 或其他绘图函数处关闭。
我没有使用这些头文件和 dll 的经验,但是我的 Delphi 代码在这种情况下应该是一个很好的翻译?或者不是?我不知道如何调试它。什么是调整我的代码以适应freeglut的方法。我认为应该是一些小东西,因为大多数东西应该是一样的。
谢谢你的帮助
1条答案
按热度按时间smdnsysy1#
看起来仅仅用freeglut.dll.替换 . glut32.dll并不能很好地完成工作,因为我猜里面的函数会有一点不同(或者简单地重命名 freeglut.dll --〉glut32.dll 也会失败)。NVIDIA Cg Toolkit
从2013年开始就不支持它了,但是安装后它会带来dll版本的 * glut 32 ,用于32位和64位开发。快速尝试一下,它似乎可以工作,并且覆盖了我在Glut.pas中的定义。
因此,如果您需要glut32.dll***的64位版本和替换版本,可以从那里下载。
同时,如果有人将freeglut头文件(.h)转换为 Delphi 代码,这将是伟大的,因为在结束时,Freeglut 项目仍然保持,更新,并添加一些更有用的功能,除了原来的Glut。这种转换仍然超出了我的知识。