我正在尝试在OpenGL32.dll中使用Windows API函数执行一些基本的OpenGL。如何使用本机API使用C#创建纹理和上下文?
例如:
public static IntPtr CreateContext(IntPtr DeviceContext){
return wglCreateContext(DeviceContext);
}
问题是我不知道如何将OpenGL与Forms HDC一起使用。如何在Windows Forms HDC中使用OpenGL?
这就是我得到的,有什么不对吗?我找不到任何关于此的示例或文档,我发现只使用TAO或openTK。
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
this.SetStyle(ControlStyles.EnableNotifyMessage | ControlStyles.OptimizedDoubleBuffer | ControlStyles.UserPaint, true);
IntPtr HDC = OpenGL.CreateContext(CreateGraphics().GetHdc());
OpenGL.EnableDoubleBuffer(HDC);
OpenGL.DrawRectangle(10, 100, 10, 100);
}
protected override void WndProc(ref Message m)
{
if(m.Msg == WindowsMessages.WM_ERASEBACKGROUND) return;
base.WndProc(ref m);
}
}
public static class OpenGL{
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
[DllImport( "opengl32.dll" )]
static extern IntPtr wglCreateContext(IntPtr HDC);
[DllImport( "gdi32.dll", CharSet = CharSet.Auto, SetLastError = true, ExactSpelling = true )]
static extern bool SwapBuffers(IntPtr hdc);
[DllImport( "opengl32.dll" )]
static extern void glRecti(int x1, int y1, int x2, int y2);
[DllImport( "opengl32.dll" )]
static extern void glBegin(UInt32 type);
[DllImport( "opengl32.dll" )]
static extern void glEnd();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
public static IntPtr CreateContext(IntPtr DeviceContext){
return wglCreateContext(DeviceContext);
}
public static Boolean EnableDoubleBuffer(IntPtr DeviceContext){
return SwapBuffers(DeviceContext);
}
public static void DrawRectangle(Int32 X1, Int32 Y1, Int32 X2, Int32 Y2){
glBegin(GLEnum.POLYGON);
glRecti(X1, Y1, X2, Y2);
glEnd();
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
public static class GLEnum{
public static UInt32 POLYGON = 0x0009;
}
}
public static class WindowsMessages{
public static int WM_ERASEBACKGROUND = 0x14;
}
Pd积。不建议使用TAO或TK,我不能使用它们,我需要本地化。