今日、OpenTK への依存を取り除きました。私のアプリケーションは、OpenGL コンテキストを作成するために OpenTK に依存しなくなりました。ただし、Mesa 3D (ソフトウェアでレンダリングされた OpenGL の実装) で実行すると、私のコードは適切に機能しなくなりました。私のコードは実行されますが、FPS は約 0.001 FPS (OpenTK のコンテキスト作成を使用した場合の約 16+FPS と比較して) であり、通常は FBO に描画されるものが構成されているようにウィンドウに表示されます。Mesa 3D を使用せずにコードを実行すると (Windows 7 で) 通常のパフォーマンスが得られますが、正常に動作するのは偶然かもしれないと心配しています。glGetError
チェックはエラーを表示していません。おそらく、コンテキストの作成で何か間違ったことをしていると思いますか?
m_controlHandle = m_winForm.Handle; /* HWND */
m_controlDC = Win32.GetDC(m_controlHandle); /* HWND's DC*/
Win32.PixelFormatDescriptor pixelFormat = new Win32.PixelFormatDescriptor();
pixelFormat.Size = (short)Marshal.SizeOf(typeof(Win32.PixelFormatDescriptor));
pixelFormat.Version = 1;
pixelFormat.Flags =
Win32.PixelFormatDescriptorFlags.DRAW_TO_WINDOW |
Win32.PixelFormatDescriptorFlags.SUPPORT_OPENGL |
Win32.PixelFormatDescriptorFlags.DOUBLEBUFFER;
pixelFormat.PixelType = Win32.PixelType.RGBA;
pixelFormat.ColorBits = 32;
pixelFormat.DepthBits = 0; /* yes, I don't use a depth buffer; 2D sprite game */
pixelFormat.LayerType = Win32.PixelFormatLayerType.MAIN_PLANE;
int formatCode = Win32.ChoosePixelFormat(m_controlDC, ref pixelFormat);
if (formatCode == 0)
throw new Win32Exception(Marshal.GetLastWin32Error());
if (!Win32.SetPixelFormat(m_controlDC, formatCode, ref pixelFormat))
throw new Win32Exception(Marshal.GetLastWin32Error());
m_openGLContext = Win32.wglCreateContext(m_controlDC);
if (m_openGLContext == IntPtr.Zero)
throw new Win32Exception(Marshal.GetLastWin32Error());
if (!Win32.wglMakeCurrent(m_controlDC, m_openGLContext))
throw new Exception("Could not wglMakeCurrent.");
これは正しいです?Mesa3D が突然おかしくなった原因を追跡するための提案はありますか?