Back to the OpenGL extension cross reference

WGL_EXT_pbuffer


Name


    EXT_pbuffer

Name Strings


    WGL_EXT_pbuffer

Version


    Date: 1/27/1999   Version 1.6

Number


    171

Dependencies


    WGL_EXT_extensions_string is required.
WGL_EXT_pixel_format is required.
WGL_EXT_make_current_read affects the definition of this extension.

Overview


    This extension defines pixel buffers (pbuffer for short). Pbuffers are
additional non-visible rendering buffers for an OpenGL renderer.
Pbuffers are equivalent to a window that has the same pixel format
descriptor with the following exceptions:

1. There is no rendering to a pbuffer by GDI.

2. The pixel format descriptors used for a pbuffer can only be those
that are supported by the ICD. Generic formats are not valid.

4. The allocation of a pbuffer can fail if there are insufficient
resources (i.e., all the pbuffer memory has been allocated).

The intent of the pbuffer semantics is to enable implementations to
allocate pbuffers in non-visible frame buffer memory. These
pbuffers are intended to be "static" resources in that a program
will typically allocate them only once rather than as a part of its
rendering loop. (Pbuffers should be deallocated when the program is
no longer using them -- for example, if the program is iconified.)

The frame buffer resources that are associated with a pbuffer are
also static and are deallocated only when the pbuffer is destroyed.

New Procedures and Functions


    HPBUFFEREXT wglCreatePbufferEXT(HDC hDC,
int iPixelFormat,
int iWidth,
int iHeight,
const int *piAttribList);

HDC wglGetPbufferDCEXT(HPBUFFEREXT hPbuffer);

int wglReleasePbufferDCEXT(HPBUFFEREXT hPbuffer,
HDC hDC);

BOOL wglDestroyPbufferEXT(HPBUFFEREXT hPbuffer);

BOOL wglQueryPbufferEXT(HPBUFFEREXT hPbuffer,
int iAttribute,
int *piValue);

New Tokens


    Accepted by the <attribute> parameter of wglGetPixelFormatAttribivEXT,
wglGetPixelFormatAttribfvEXT, and wglChoosePixelFormatEXT:

WGL_DRAW_TO_PBUFFER_EXT 0x202D
WGL_MAX_PBUFFER_PIXELS_EXT 0x202E
WGL_MAX_PBUFFER_WIDTH_EXT 0x202F
WGL_MAX_PBUFFER_HEIGHT_EXT 0x2030
WGL_OPTIMAL_PBUFFER_WIDTH_EXT 0x2031
WGL_OPTIMAL_PBUFFER_HEIGHT_EXT 0x2032

Accepted by the <piAttribList> parameter of wglCreatePbufferEXT:

WGL_PBUFFER_LARGEST_EXT 0x2033

Accepted by the <iAttribute> parameter of wglQueryPbufferEXT:

WGL_PBUFFER_WIDTH_EXT 0x2034
WGL_PBUFFER_HEIGHT_EXT 0x2035

Additions to Chapter 2 of the 1.2 Specification (OpenGL Operation)


    None

Additions to Chapter 3 of the 1.2 Specification (Rasterization)


    None

Additions to Chapter 4 of the 1.2 Specification (Per-Fragment Operations and the Frame buffer)


    None

Additions to Chapter 5 of the 1.2 Specification (Special Functions)


    None

Additions to Chapter 6 of the 1.2 Specification (State and State Requests)


    None

Additions to the WGL Specification


    A pixel buffer (pbuffer) can be created with wglCreatePbufferEXT
which returns a handle associated with the pbuffer.

HPBUFFEREXT wglCreatePbufferEXT(HDC hDC,
int iPixelFormat,
int iWidth,
int iHeight,
const int *piAttribList);

<hDC> specifies a device context for the device on which the pbuffer
is created. <iPixelFormat> specifies a non-generic pixel format
descriptor index. Support for pbuffers may be restricted to
specific pixel formats. Use wglGetPixelFormatAttribivEXT or
wglGetPixelFormatAttribfvEXT to query the WGL_DRAW_TO_PBUFFER_EXT
attribute to determine which pixel formats support the creation of
pbuffers.

<iWidth> and <iHeight> specify the pixel width and height of the
rectangular pbuffer.

<piAttribList> is a list of attributes {type, value} pairs containing
integer attribute values. All of the attributes in the <piAttribList>
are followed by the corresponding required value. The list is
terminated with a value of 0.

The following attributes are supported by wglCreatePbufferEXT:

WGL_PBUFFER_LARGEST_EXT If this attribute is set to a
non-zero value, the largest
available pbuffer is allocated
when the allocation of the pbuffer
would otherwise fail due to
insufficient resources. The width
or height of the allocated pbuffer
never exceeds <iWidth> and <iHeight>,
respectively. Use wglQueryPbufferEXT
to retrieve the dimensions of the
allocated pbuffer.

The resulting pbuffer will contain color buffers and ancillary
buffers as specified by <iPixelFormat>. Note that pbuffers use
framebuffer resources so applications should consider deallocating
them when they are not in use.

It is possible to create a pbuffer with back buffers and to swap
the front and back buffers by calling wglSwapLayerBuffers. The
contents of the back buffers after the swap depends on the
<iPixelFormat>. (Pbuffers are the same as windows in this respect.)

When wglCreatePbufferEXT fails to create a pbuffer, NULL is returned.
To get extended error information, call GetLastError. Possible errors
are as follows:

ERROR_INVALID_PIXEL_FORMAT Pixel format is not valid.
ERROR_NO_SYSTEM_RESOURCES Insufficient resources exist.
ERROR_INVALID_DATA <iWidth> or <iHeight> is negative
or zero.
ERROR_INVALID_DATA <piAttribList> is not a valid attribute.

To create a device context for the pbuffer, call

HDC wglGetPbufferDCEXT(HPBUFFEREXT hPbuffer);

where <hPbuffer> is a handle returned from a previous call to
wglCreatePbufferEXT. A device context is returned by
wglGetPbufferDCEXT which can be used to associate a rendering
context with the pbuffer. Any rendering context created with
a wglCreateContext that is "compatible" with the <iPixelFormat> may be
used to render into the pbuffer. (See the description of
wglCreateContext, wglMakeCurrent, and wglMakeCurrentReadEXT for a
definition of "compatible".)

When wglGetPbufferDCEXT fails, NULL is returned. To get extended
error information, call GetLastError. Possible errors are as follows:

ERROR_INVALID_HANDLE <hPbuffer> is not a valid handle.

To release a device context obtained from a previous call to
wglGetPbufferDCEXT, call

int wglReleasePbufferDCEXT(HPBUFFEREXT hPbuffer,
HDC hDC);

If the return value is a value of 1, the device context was released.
If the device context was not released, the return value is 0. To get
extended error information, call GetLastError. Possible errors are
as follows:

ERROR_INVALID_HANDLE <hPbuffer> is not a valid handle.
ERROR_DC_NOT_FOUND <hDC> is not a valid DC.

A pbuffer is destroyed by calling

BOOL wglDestroyPbufferEXT(HPBUFFEREXT hPbuffer);

The pbuffer is destroyed once it is no longer current to any rendering
context. When a pbuffer is destroyed, any memory resources that are
attached to it are freed and its handle is no longer valid.

If wglDestroyPbufferEXT fails, FALSE is returned. To get extended
error information, call GetLastError. Possible errors are as follows:

ERROR_INVALID_HANDLE <hPbuffer> is not a valid handle.

To query the maximum width, height, or number of pixels in any given
pbuffer for a specific pixel format, use wglGetPixelFormatAttribivEXT
or wglGetPixelFormatAttribfvEXT with <attribute> set to one of
WGL_MAX_PBUFFER_WIDTH_EXT, WGL_MAX_PBUFFER_HEIGHT_EXT, or
WGL_MAX_PBUFFER_PIXELS_EXT.

WGL_MAX_PBUFFER_WIDTH_EXT and WGL_MAX_PBUFFER_HEIGHT_EXT indicate the
maximum width and height that can be passed into wglCreatePbufferEXT
and WGL_MAX_PBUFFER_PIXELS_EXT indicates the maximum number of pixels
(width x height) for a pbuffer. Note that an implementation may
return a value for WGL_MAX_PBUFFER_PIXELS_EXT that is less than the
maximum width times the maximum height. Also, the value for
WGL_MAX_PBUFFER_PIXELS_EXT is static and assumes that no other
pbuffers are contending for the framebuffer memory. Thus it may
not be possible to allocate a pbuffer of the size given by
WGL_MAX_PBUFFER_PIXELS_EXT.

On some implementations, there may be an optimum width and height
to use when allocating a pbuffer. (For example, the implementation
may use fixed size tiles to allocate pbuffers.) Use
WGL_OPTIMAL_PBUFFER_WIDTH_EXT and WGL_OPTIMAL_PBUFFER_HEIGHT to
determine this width and height. If the value returned is zero,
there is no optimal width or height value.

To query an attribute associated with a specific pbuffer, call

BOOL wglQueryPbufferEXT(HPBUFFEREXT hPbuffer,
int iAttribute,
int *piValue);

with <hPbuffer> set to a previously returned pbuffer handle.
<iAttribute> must be set to one of WGL_PBUFFER_WIDTH_EXT or
WGL_PBUFFER_HEIGHT_EXT.

If wglQueryPbufferEXT fails, FALSE is returned. To get extended
error information, call GetLastError. Possible errors are as follows:

ERROR_INVALID_HANDLE <hPbuffer> is not a valid handle.
ERROR_INVALID_DATA <iAttribute> is not a valid attribute.

Because there is no way to extend wgl, these calls are defined in the
ICD and can be called by obtaining the address with wglGetProcAddress.
Because this is not a GL extension, it is not included in the
GL_EXTENSIONS string.

New State


    None

New Implementation Dependent State


    None

Implementation Support


   List of OpenGL implementations supporting the WGL_EXT_pbuffer extension

Original File


   Original text file for the WGL_EXT_pbuffer extension


Page generated on Sun Nov 20 18:37:47 2005