2

我正在尝试使用 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() 函数编译?确定依赖项是否实际可用以及如何正确安装它的最佳方法到底是什么?

4

3 回答 3

0

您可以检查该功能是否支持使用openGLControl.OpenGL.IsExtensionFunctionSupported("glGenVertexArrays");

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

您可以检查并查看是否使用设置了渲染上下文openGLControl.OpenGL.RenderContextProvider.RenderContextHandle != IntPtr.Zero

于 2015-01-04T10:24:16.360 回答
0

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

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

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

于 2020-10-27T10:57:18.413 回答
0

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

于 2020-10-30T04:46:12.320 回答