MarketGraphics Device Interface
Company Profile

Graphics Device Interface

The Graphics Device Interface (GDI) is a legacy component of Microsoft Windows responsible for representing graphical objects and transmitting them to output devices such as monitors and printers. It was superseded by DirectDraw API and later Direct2D API. Windows apps use Windows API to interact with GDI, for such tasks as drawing lines and curves, rendering fonts, and handling palettes. The Windows USER subsystem uses GDI to render such UI elements as window frames and menus. Other systems have components that are similar to GDI; for example: Mac OS had QuickDraw, and Linux and Unix have X Window System core protocol.

Technical details
In GDI, a device context (DC) defines the attributes of text and images for the output device, e.g. screen or printer. GDI maintains the actual context. Generating the output requires a handle to the device context (HDC). After generating the output, the handle could be released. GDI uses Bresenham's line drawing algorithm to draw aliased lines. ==Version history==
Version history
Early versions GDI was present in the initial release of Windows. MS-DOS programs had manipulated the graphics hardware using software interrupts (sometimes via the video BIOS) and by manipulating video memory directly. Code written in this way expects that it is the only user of the video memory, which was not tenable in a multitasking environment, such as Windows. BYTE magazine, in December 1983, discussed Microsoft's plans for a system to output graphics to both printers and monitors with the same code in the forthcoming first release of Windows. On Windows 3.1x and Windows 9x, GDI can use bit blit features for 2D acceleration, if a suitable graphics card driver is installed. Since Windows NT 4.0, the GDI of Windows NT was running in kernel mode; but since Windows Vista, the DWM runs in user mode. Windows XP With the introduction of Windows XP, GDI+ complemented GDI. GDI+ was written in C++. It adds anti-aliased 2D graphics, floating-point coordinates, gradient shading, more-complex path management, intrinsic support for modern graphics-file formats like JPEG and PNG, and support for composition of affine transformations in the 2D view pipeline. GDI+ uses RGBA values to represent color. Use of these features is apparent in Windows XP components, such as Microsoft Paint, Windows Picture and Fax Viewer, Photo Printing Wizard, and the My Pictures Slideshow screensaver. Their presence in the basic graphics layer greatly simplifies implementations of vector-graphics systems such as Adobe Flash or SVG. Besides, .NET Framework provides a managed interface for GDI+ via the System.Drawing namespace. While GDI+ is included with Windows XP and later, the GDI+ dynamic library can also be shipped with an application and used on older versions of Windows. Because of the additional text processing and resolution independence capabilities in GDI+, the CPU undertakes text rendering. The result is an order of magnitude slower than the hardware-accelerated GDI. Chris Jackson published some tests indicating that a piece of text rendering code he had written could render 99,000 glyphs per second in GDI, but the same code using GDI+ rendered 16,600 glyphs per second. GDI+ is similar (in purpose and structure) to Apples QuickDraw GX subsystem, and the open-source libart and cairo libraries. Windows Vista In Windows Vista, all Windows applications including GDI and GDI+ applications run in the new compositing engine, Desktop Window Manager (DWM), which is GPU hardware-accelerated. As such, the GDI itself is no longer hardware-accelerated. Because of the nature of the composition operations, window moves can be faster or more responsive because the application does not need to re-render the underlying content. == GDI printers ==
GDI printers
A GDI printer or Winprinter (analogous to a Winmodem) is a printer designed to accept output from a host computer running Windows, which does all print processing: GDI renders a page as a bitmap, which the computer's printer driver receives, processes, and sends to the associated printer. Communication between the computer's GDI and driver, and the printer, is bidirectional; the printer tells the computer if it is ready to print or offline, out of paper, and so on. A printer with its own control language can accept input from any device with a suitable driver, without requiring a PC running Windows. Such a printer requires hardware, firmware, and memory for the page rendering that the Windows host computer's GDI otherwise carries out. GDI printers can be made available to computers on a network if they are connected as shared printers on a computer running Windows. Some "generic" GDI drivers such as pnm2ppa have been written; they aim to make GDI printers compatible with non-Windows operating systems such as FreeBSD, but they cannot support all printers. To allow simpler generation of drivers for Winprinters, Microsoft developed the Universal Printer Driver. This allows printer vendors to write Generic Printer Description (GPD) "minidrivers" which describe the printer's capabilities and command set in plaintext without requiring kernel mode programming. Microsoft has moved away from the GDI printing model with Open XML Paper Specification. == Limitations ==
Limitations
Each window consumes GDI objects. As the complexity of the window increases, with additional features such as buttons and images, its GDI object usage also increases. When too many objects are in use, Windows is unable to draw any more GDI objects, leading to misbehaving software and frozen and unresponsive program operation. Many applications are also incorrectly coded and fail to release GDI objects after use, which further adds to the problem. The total available GDI objects varies from one version of Windows to the next: Windows 9x had a limit of 1,200 total objects; Windows 2000 has a limit of 16,384 objects; and Windows XP and later have a configurable limit (via the registry) that defaults to 10,000 objects per process (but a theoretical maximum of 65,536 for the entire session). Windows 8 and later increase the GDI object limit to 65,536 per user login session. Earlier versions of Windows such as Windows 3.1 and Windows 98 included a Resource Meter program to allow the user to monitor how much of the total system GDI resources were in use. This resource meter consumed GDI objects itself. Later versions such as Windows 2000 and Windows XP can report GDI object usage for each program in the Task Manager, but they cannot tell the user the total GDI capacity available. Overflowing GDI capacity can affect Windows itself, preventing new windows from opening, menus from displaying, and alert boxes from appearing. The situation can be difficult to clear and can potentially require a forced reset of the system, since it prevents core system programs from functioning. In Windows 8 and 8.1, a forced log-off occurs as a result of GDI capacity overflow, instead of a reboot. == Successor ==
Successor
Direct2D is the successor of GDI and GDI+. Its sibling, DirectWrite, replaces Uniscribe. They were shipped with Windows 7 and Windows Server 2008 R2, and were available for Windows Vista and Windows Server 2008 (with Platform Update installed). Later, Microsoft developed Win2D, a free and open-source GDI-like class library. Win2D's target audience are developers that use C++, C#, and Visual Basic.NET to develop Universal Windows Platform apps. ==See also==
tickerdossier.comtickerdossier.substack.com