上周我一直在尝试在正方形上绘制纹理,但没有效果。正方形绘制,但没有纹理。我使用的是OpenGL,Delphi XE3和Windows10。
问题出在glGenerateMipmap函数上。我的旧版本的opengl没有MipMap函数。所以我把我的卡换成了新的(OGL4.6),现在有了这些功能。但它仍然不起作用。
问题是,旧的opengl32.dll没有改变,它仍然没有功能。
所以问题是:程序如何找到MipMap函数?有没有可能用新功能更新opengl32.dll?或者我的程序需要引用一些其他的dll?或者应该更新winapi.opengl单元?
根据khronos的说法,除非设置了MipMap,否则不会绘制纹理。https://www.khronos.org/opengl/wiki/Common_Mistakes#Creating_a_complete_texture
我尝试使用以下命令链接到DLL中的glGenerateMipmap函数:
procedure glGenerateMipmap (target: GLenum); stdcall; external OpenGL32;
它将进行编译,但在运行时会中止。
发布于 2019-04-06 23:01:59
opengl32.dll
没有改变是件好事,因为它不应该改变。opengl32.dll
是一个操作系统组件。唯一应该接触到此文件的是Windows本身,例如,在更新期间。
Windows提供了一个通用的OpenGL实现,它应该始终可用(可以求助于软件渲染)。这个通用实现只支持API1.1,这就是为什么opengl32.dll
只导出基本的OpenGL 1.1API函数。除此之外,可以将其他OpenGL实现以可安装客户端驱动程序的形式插入到系统中。在为您的图形处理器安装驱动程序时,图形处理器供应商通常会安装并注册这样的ICD,以便使用您的图形处理器运行OpenGL。当通过WGL APIs创建OpenGL上下文时,操作系统将look for and load一个合适的ICD,并将您的OpenGL上下文设置为与此ICD对话。导出到opengl32.dll
中的ICD1.1API函数实际上只是转发到OpenGL。
ICD可以(并且通常确实)在通过opengl32.dll
公开的基本OpenGL 1.1API之上提供额外的功能。要访问这些附加功能,您必须通过wglGetProcAddress()
手动加载相应的函数。由于编写所有代码以例如加载整个OpenGL 4.6核心配置文件API相当单调乏味,因此通常使用诸如GLEW或glad之类的uses a library来处理该…
对于Delphi来说,我猜dglOpenGL可能会很有趣。
https://stackoverflow.com/questions/55553964
复制