/// <summary> /// This function sets the pixel format of the underlying bitmap. /// </summary> /// <param name="hDC"></param> /// <param name="bitCount">The bitcount.</param> protected virtual bool SetPixelFormat(IntPtr hDC, int bitCount) { // Create the big lame pixel format majoo. var pixelFormat = new PixelFormatDescriptor(); pixelFormat.Init(); // Set the values for the pixel format. pixelFormat.nVersion = 1; pixelFormat.dwFlags = (Win32.PFD_DRAW_TO_BITMAP | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_SUPPORT_GDI); pixelFormat.iPixelType = Win32.PFD_TYPE_RGBA; pixelFormat.cColorBits = (byte)bitCount; pixelFormat.cDepthBits = 32; pixelFormat.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(hDC, pixelFormat); if (iPixelformat == 0) { return(false); } // Sets the pixel format if (Win32.SetPixelFormat(hDC, iPixelformat, pixelFormat) == 0) { int lastError = Marshal.GetLastWin32Error(); return(false); } return(true); }
/// <summary> /// This function sets the pixel format of the underlying bitmap. /// </summary> /// <param name="hDC"></param> /// <param name="parameters">parameters.</param> protected void SetPixelFormat(IntPtr hDC, ContextGenerationParams parameters) { // Create the big lame pixel format majoo. var pdf = new PixelFormatDescriptor(); pdf.Init(); // Set the values for the pixel format. pdf.nVersion = 1; pdf.dwFlags = (Win32.PFD_DRAW_TO_BITMAP | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_SUPPORT_GDI); pdf.iPixelType = Win32.PFD_TYPE_RGBA; pdf.cColorBits = parameters.ColorBits; pdf.cDepthBits = parameters.DepthBits; pdf.cStencilBits = parameters.StencilBits; pdf.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(hDC, pdf); if (iPixelformat == 0) { throw new Exception(string.Format("ChoosePixelFormat([{0}], [{1}]) failed!", hDC, pdf)); } // Sets the pixel format if (false == Win32.SetPixelFormat(hDC, iPixelformat, pdf)) { int lastError = Marshal.GetLastWin32Error(); throw new Exception(string.Format("SetPixelFormat([{0}], [{1}], [{2}]) failed! Win32Error:[{3}].", hDC, iPixelformat, pdf, lastError)); } }
/// <summary> /// This function sets the pixel format of the underlying bitmap. /// </summary> /// <param name="hDC"></param> /// <param name="bitCount">The bitcount.</param> protected void SetPixelFormat(IntPtr hDC, int bitCount) { // Create the big lame pixel format majoo. var pixelFormat = new PixelFormatDescriptor(); pixelFormat.Init(); // Set the values for the pixel format. pixelFormat.nVersion = 1; pixelFormat.dwFlags = (Win32.PFD_DRAW_TO_BITMAP | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_SUPPORT_GDI); pixelFormat.iPixelType = Win32.PFD_TYPE_RGBA; pixelFormat.cColorBits = (byte)bitCount; pixelFormat.cDepthBits = 32; pixelFormat.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(hDC, pixelFormat); if (iPixelformat == 0) { throw new Exception(string.Format("ChoosePixelFormat([{0}], [{1}]) failed!", hDC, pixelFormat)); } // Sets the pixel format if (Win32.SetPixelFormat(hDC, iPixelformat, pixelFormat) == 0) { int lastError = Marshal.GetLastWin32Error(); throw new Exception(string.Format("SetPixelFormat([{0}], [{1}], [{2}]) failed! Win32Error:[{3}].", hDC, iPixelformat, pixelFormat, lastError)); } }
/// <summary> /// Create a new window class, as basic as possible. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="bitDepth"></param> /// <returns></returns> private bool CreateBasicRenderContext(int width, int height, int bitDepth) { var wndClass = new WNDCLASSEX(); wndClass.Init(); wndClass.style = ClassStyles.HorizontalRedraw | ClassStyles.VerticalRedraw | ClassStyles.OwnDC; wndClass.lpfnWndProc = wndProcDelegate; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = IntPtr.Zero; wndClass.hIcon = IntPtr.Zero; wndClass.hCursor = IntPtr.Zero; wndClass.hbrBackground = IntPtr.Zero; wndClass.lpszMenuName = null; wndClass.lpszClassName = "CSharpGLRenderWindow"; wndClass.hIconSm = IntPtr.Zero; Win32.RegisterClassEx(ref wndClass); // Create the window. Position and size it. windowHandle = Win32.CreateWindowEx(0, "CSharpGLRenderWindow", "", WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_POPUP, 0, 0, width, height, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); // Get the window device context. this.DeviceContextHandle = Win32.GetDC(windowHandle); // Setup a pixel format. var pfd = new PixelFormatDescriptor(); pfd.Init(); pfd.nVersion = 1; pfd.dwFlags = Win32.PFD_DRAW_TO_WINDOW | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_DOUBLEBUFFER; pfd.iPixelType = Win32.PFD_TYPE_RGBA; pfd.cColorBits = (byte)bitDepth; pfd.cDepthBits = 16; pfd.cStencilBits = 8; pfd.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(this.DeviceContextHandle, pfd); if (iPixelformat == 0) { return(false); } // Sets the pixel format if (Win32.SetPixelFormat(this.DeviceContextHandle, iPixelformat, pfd) == 0) { return(false); } return(true); }
/// <summary> /// Create a new window class, as basic as possible. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="parameters"></param> /// <returns></returns> private bool CreateBasicRenderContext(int width, int height, ContextGenerationParams parameters) { var wndClass = new WNDCLASSEX(); wndClass.Init(); wndClass.style = ClassStyles.HorizontalRedraw | ClassStyles.VerticalRedraw | ClassStyles.OwnDC; wndClass.lpfnWndProc = wndProcDelegate; wndClass.lpszClassName = "CSharpGLRenderWindow"; Win32.RegisterClassEx(ref wndClass); // Create the window. Position and size it. windowHandle = Win32.CreateWindowEx(0, "CSharpGLRenderWindow", "", WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_POPUP, 0, 0, width, height, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); // Get the window device context. this.DeviceContextHandle = Win32.GetDC(windowHandle); // Setup a pixel format. var pfd = new PixelFormatDescriptor(); pfd.Init(); pfd.nVersion = 1; pfd.dwFlags = Win32.PFD_DRAW_TO_WINDOW | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_DOUBLEBUFFER; pfd.iPixelType = Win32.PFD_TYPE_RGBA; pfd.cColorBits = parameters.ColorBits; pfd.cAccumBits = parameters.AccumBits; pfd.cAccumRedBits = parameters.AccumRedBits; pfd.cAccumGreenBits = parameters.AccumGreenBits; pfd.cAccumBlueBits = parameters.AccumBlueBits; pfd.cAccumAlphaBits = parameters.AccumAlphaBits; pfd.cDepthBits = parameters.DepthBits; pfd.cStencilBits = parameters.StencilBits; pfd.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(this.DeviceContextHandle, pfd); if (iPixelformat == 0) { return(false); } // Sets the pixel format if (false == Win32.SetPixelFormat(this.DeviceContextHandle, iPixelformat, pfd)) { return(false); } // Create the render context. this.RenderContextHandle = Win32.wglCreateContext(this.DeviceContextHandle); return(true); }
internal unsafe static extern int SetPixelFormat(IntPtr hDC, int iPixelFormat, [In, MarshalAs(UnmanagedType.LPStruct)] PixelFormatDescriptor ppfd);
/// <summary> /// Create a new window class, as basic as possible. /// </summary> /// <param name="width"></param> /// <param name="height"></param> /// <param name="bitDepth"></param> /// <returns></returns> private bool CreateBasicRenderContext(int width, int height, int bitDepth) { var wndClass = new WNDCLASSEX(); wndClass.Init(); wndClass.style = ClassStyles.HorizontalRedraw | ClassStyles.VerticalRedraw | ClassStyles.OwnDC; wndClass.lpfnWndProc = wndProcDelegate; wndClass.cbClsExtra = 0; wndClass.cbWndExtra = 0; wndClass.hInstance = IntPtr.Zero; wndClass.hIcon = IntPtr.Zero; wndClass.hCursor = IntPtr.Zero; wndClass.hbrBackground = IntPtr.Zero; wndClass.lpszMenuName = null; wndClass.lpszClassName = "CSharpGLRenderWindow"; wndClass.hIconSm = IntPtr.Zero; Win32.RegisterClassEx(ref wndClass); // Create the window. Position and size it. windowHandle = Win32.CreateWindowEx(0, "CSharpGLRenderWindow", "", WindowStyles.WS_CLIPCHILDREN | WindowStyles.WS_CLIPSIBLINGS | WindowStyles.WS_POPUP, 0, 0, width, height, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero, IntPtr.Zero); // Get the window device context. this.DeviceContextHandle = Win32.GetDC(windowHandle); // Setup a pixel format. var pfd = new PixelFormatDescriptor(); pfd.Init(); pfd.nVersion = 1; pfd.dwFlags = Win32.PFD_DRAW_TO_WINDOW | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_DOUBLEBUFFER; pfd.iPixelType = Win32.PFD_TYPE_RGBA; pfd.cColorBits = (byte)bitDepth; pfd.cDepthBits = 16; pfd.cStencilBits = 8; pfd.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(this.DeviceContextHandle, pfd); if (iPixelformat == 0) { return false; } // Sets the pixel format if (Win32.SetPixelFormat(this.DeviceContextHandle, iPixelformat, pfd) == 0) { return false; } return true; }
/// <summary> /// This function sets the pixel format of the underlying bitmap. /// </summary> /// <param name="hDC"></param> /// <param name="bitCount">The bitcount.</param> protected virtual bool SetPixelFormat(IntPtr hDC, int bitCount) { // Create the big lame pixel format majoo. var pixelFormat = new PixelFormatDescriptor(); pixelFormat.Init(); // Set the values for the pixel format. pixelFormat.nVersion = 1; pixelFormat.dwFlags = (Win32.PFD_DRAW_TO_BITMAP | Win32.PFD_SUPPORT_OPENGL | Win32.PFD_SUPPORT_GDI); pixelFormat.iPixelType = Win32.PFD_TYPE_RGBA; pixelFormat.cColorBits = (byte)bitCount; pixelFormat.cDepthBits = 32; pixelFormat.iLayerType = Win32.PFD_MAIN_PLANE; // Match an appropriate pixel format int iPixelformat = Win32.ChoosePixelFormat(hDC, pixelFormat); if (iPixelformat == 0) { return false; } // Sets the pixel format if (Win32.SetPixelFormat(hDC, iPixelformat, pixelFormat) == 0) { int lastError = Marshal.GetLastWin32Error(); return false; } return true; }