为什么在SharpGL.dll中发生异常?

时间:2014-11-08 14:37:51

标签: c# exception vbo vertex-buffer sharpgl

我试图使用VBO来绘制像三角形一样简单的东西。

示例代码在github上提供:

https://github.com/dwmkerr/sharpgl/blob/master/source/SharpGL/Samples/WinForms/ModernOpenGLSample/Scene.cs

以下'使用'语句为我编译正确。

using SharpGL;
using SharpGL.SceneGraph;
using SharpGL.VertexBuffers;

我的程序在这一行崩溃了:

vertexBufferArray.Create(gl);

它给了我以下例外:

An unhandled exception of type 'System.Exception' occurred in SharpGL.dll

Additional information: Extension function glGenVertexArrays not supported

如果不支持其中一个依赖项,程序如何使用Create()函数进行编译?究竟什么是确定依赖项是否实际可用的最佳方法以及如何正确安装它?

3 个答案:

答案 0 :(得分:0)

您可以使用openGLControl.OpenGL.IsExtensionFunctionSupported("glGenVertexArrays");

检查功能是否受支持

但是,只要没有当前的渲染上下文,这将始终返回false(请参阅here)。这就是为我提供异常抛出并在应用程序中稍后调用方法为我工作的原因(注意这些示例也给出了相同的例外)。

您可以使用openGLControl.OpenGL.RenderContextProvider.RenderContextHandle != IntPtr.Zero

检查并查看是否设置了rendercontext

答案 1 :(得分:0)

检查是否已使用正确的OpenGL版本进行了初始化。默认值为1.0,您可以在OpenGLVersion.cs中看到可用的枚举

在创建控件时,请在调用EndInit()之前设置control.OpenGLVersion属性。 如果仅对顶点缓冲区数组有问题,则还要检查RenderContextType是否设置为NativeWindow(即使您将OpenGLControl嵌入到窗体中)也可以访问对象缓冲区功能。

这两个步骤将解决您的问题。

答案 2 :(得分:0)

我必须为XAML RenderContextType="FBO"中的SharpGL控件设置以下属性,以避免出现异常。