【问题标题】:Why is an Exception occurring in SharpGL.dll?为什么 SharpGL.dll 中出现异常?
【发布时间】:2014-11-08 14:37:50
【问题描述】:

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

【问题讨论】:

  • 我遇到了同样的问题,但在我自己的项目和示例项目中使用 glCreateShader 函数。您找到任何解决方案了吗?

标签: c# exception vbo vertex-buffer sharpgl


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

    这两步将解决您的问题。

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-05-07
        • 2012-08-25
        • 1970-01-01
        • 1970-01-01
        • 2017-04-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多