mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2024-11-27 20:24:30 +08:00
a34e7612dc
This allows specifying a GL profile and version so one can get a core- profile context. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
333 lines
10 KiB
C
333 lines
10 KiB
C
/*
|
|
* Mesa 3-D graphics library
|
|
*
|
|
* Copyright (C) 1999-2005 Brian Paul All Rights Reserved.
|
|
*
|
|
* Permission is hereby granted, free of charge, to any person obtaining a
|
|
* copy of this software and associated documentation files (the "Software"),
|
|
* to deal in the Software without restriction, including without limitation
|
|
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
|
* and/or sell copies of the Software, and to permit persons to whom the
|
|
* Software is furnished to do so, subject to the following conditions:
|
|
*
|
|
* The above copyright notice and this permission notice shall be included
|
|
* in all copies or substantial portions of the Software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
|
|
* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
|
* THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
|
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
|
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
* OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
|
|
/*
|
|
* Mesa Off-Screen rendering interface.
|
|
*
|
|
* This is an operating system and window system independent interface to
|
|
* Mesa which allows one to render images into a client-supplied buffer in
|
|
* main memory. Such images may manipulated or saved in whatever way the
|
|
* client wants.
|
|
*
|
|
* These are the API functions:
|
|
* OSMesaCreateContext - create a new Off-Screen Mesa rendering context
|
|
* OSMesaMakeCurrent - bind an OSMesaContext to a client's image buffer
|
|
* and make the specified context the current one.
|
|
* OSMesaDestroyContext - destroy an OSMesaContext
|
|
* OSMesaGetCurrentContext - return thread's current context ID
|
|
* OSMesaPixelStore - controls how pixels are stored in image buffer
|
|
* OSMesaGetIntegerv - return OSMesa state parameters
|
|
*
|
|
*
|
|
* The limits on the width and height of an image buffer can be retrieved
|
|
* via OSMesaGetIntegerv(OSMESA_MAX_WIDTH/OSMESA_MAX_HEIGHT).
|
|
*/
|
|
|
|
|
|
#ifndef OSMESA_H
|
|
#define OSMESA_H
|
|
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
|
|
#include <GL/gl.h>
|
|
|
|
|
|
#define OSMESA_MAJOR_VERSION 11
|
|
#define OSMESA_MINOR_VERSION 2
|
|
#define OSMESA_PATCH_VERSION 0
|
|
|
|
|
|
|
|
/*
|
|
* Values for the format parameter of OSMesaCreateContext()
|
|
* New in version 2.0.
|
|
*/
|
|
#define OSMESA_COLOR_INDEX GL_COLOR_INDEX
|
|
#define OSMESA_RGBA GL_RGBA
|
|
#define OSMESA_BGRA 0x1
|
|
#define OSMESA_ARGB 0x2
|
|
#define OSMESA_RGB GL_RGB
|
|
#define OSMESA_BGR 0x4
|
|
#define OSMESA_RGB_565 0x5
|
|
|
|
|
|
/*
|
|
* OSMesaPixelStore() parameters:
|
|
* New in version 2.0.
|
|
*/
|
|
#define OSMESA_ROW_LENGTH 0x10
|
|
#define OSMESA_Y_UP 0x11
|
|
|
|
|
|
/*
|
|
* Accepted by OSMesaGetIntegerv:
|
|
*/
|
|
#define OSMESA_WIDTH 0x20
|
|
#define OSMESA_HEIGHT 0x21
|
|
#define OSMESA_FORMAT 0x22
|
|
#define OSMESA_TYPE 0x23
|
|
#define OSMESA_MAX_WIDTH 0x24 /* new in 4.0 */
|
|
#define OSMESA_MAX_HEIGHT 0x25 /* new in 4.0 */
|
|
|
|
/*
|
|
* Accepted in OSMesaCreateContextAttrib's attribute list.
|
|
*/
|
|
#define OSMESA_DEPTH_BITS 0x30
|
|
#define OSMESA_STENCIL_BITS 0x31
|
|
#define OSMESA_ACCUM_BITS 0x32
|
|
#define OSMESA_PROFILE 0x33
|
|
#define OSMESA_CORE_PROFILE 0x34
|
|
#define OSMESA_COMPAT_PROFILE 0x35
|
|
#define OSMESA_CONTEXT_MAJOR_VERSION 0x36
|
|
#define OSMESA_CONTEXT_MINOR_VERSION 0x37
|
|
|
|
|
|
typedef struct osmesa_context *OSMesaContext;
|
|
|
|
|
|
/*
|
|
* Create an Off-Screen Mesa rendering context. The only attribute needed is
|
|
* an RGBA vs Color-Index mode flag.
|
|
*
|
|
* Input: format - one of OSMESA_COLOR_INDEX, OSMESA_RGBA, OSMESA_BGRA,
|
|
* OSMESA_ARGB, OSMESA_RGB, or OSMESA_BGR.
|
|
* sharelist - specifies another OSMesaContext with which to share
|
|
* display lists. NULL indicates no sharing.
|
|
* Return: an OSMesaContext or 0 if error
|
|
*/
|
|
GLAPI OSMesaContext GLAPIENTRY
|
|
OSMesaCreateContext( GLenum format, OSMesaContext sharelist );
|
|
|
|
|
|
|
|
/*
|
|
* Create an Off-Screen Mesa rendering context and specify desired
|
|
* size of depth buffer, stencil buffer and accumulation buffer.
|
|
* If you specify zero for depthBits, stencilBits, accumBits you
|
|
* can save some memory.
|
|
*
|
|
* New in Mesa 3.5
|
|
*/
|
|
GLAPI OSMesaContext GLAPIENTRY
|
|
OSMesaCreateContextExt( GLenum format, GLint depthBits, GLint stencilBits,
|
|
GLint accumBits, OSMesaContext sharelist);
|
|
|
|
|
|
/*
|
|
* Create an Off-Screen Mesa rendering context with attribute list.
|
|
* The list is composed of (attribute, value) pairs and terminated with
|
|
* attribute==0. Supported Attributes:
|
|
*
|
|
* Attributes Values
|
|
* --------------------------------------------------------------------------
|
|
* OSMESA_FORMAT OSMESA_RGBA*, OSMESA_BGRA, OSMESA_ARGB, etc.
|
|
* OSMESA_DEPTH_BITS 0*, 16, 24, 32
|
|
* OSMESA_STENCIL_BITS 0*, 8
|
|
* OSMESA_ACCUM_BITS 0*, 16
|
|
* OSMESA_PROFILE OSMESA_COMPAT_PROFILE*, OSMESA_CORE_PROFILE
|
|
* OSMESA_CONTEXT_MAJOR_VERSION 1*, 2, 3
|
|
* OSMESA_CONTEXT_MINOR_VERSION 0+
|
|
*
|
|
* Note: * = default value
|
|
*
|
|
* We return a context version >= what's specified by OSMESA_CONTEXT_MAJOR/
|
|
* MINOR_VERSION for the given profile. For example, if you request a GL 1.4
|
|
* compat profile, you might get a GL 3.0 compat profile.
|
|
* Otherwise, null is returned if the version/profile is not supported.
|
|
*
|
|
* New in Mesa 11.2
|
|
*/
|
|
GLAPI OSMesaContext GLAPIENTRY
|
|
OSMesaCreateContextAttribs( const int *attribList, OSMesaContext sharelist );
|
|
|
|
|
|
|
|
/*
|
|
* Destroy an Off-Screen Mesa rendering context.
|
|
*
|
|
* Input: ctx - the context to destroy
|
|
*/
|
|
GLAPI void GLAPIENTRY
|
|
OSMesaDestroyContext( OSMesaContext ctx );
|
|
|
|
|
|
|
|
/*
|
|
* Bind an OSMesaContext to an image buffer. The image buffer is just a
|
|
* block of memory which the client provides. Its size must be at least
|
|
* as large as width*height*sizeof(type). Its address should be a multiple
|
|
* of 4 if using RGBA mode.
|
|
*
|
|
* Image data is stored in the order of glDrawPixels: row-major order
|
|
* with the lower-left image pixel stored in the first array position
|
|
* (ie. bottom-to-top).
|
|
*
|
|
* Since the only type initially supported is GL_UNSIGNED_BYTE, if the
|
|
* context is in RGBA mode, each pixel will be stored as a 4-byte RGBA
|
|
* value. If the context is in color indexed mode, each pixel will be
|
|
* stored as a 1-byte value.
|
|
*
|
|
* If the context's viewport hasn't been initialized yet, it will now be
|
|
* initialized to (0,0,width,height).
|
|
*
|
|
* Input: ctx - the rendering context
|
|
* buffer - the image buffer memory
|
|
* type - data type for pixel components, only GL_UNSIGNED_BYTE
|
|
* supported now
|
|
* width, height - size of image buffer in pixels, at least 1
|
|
* Return: GL_TRUE if success, GL_FALSE if error because of invalid ctx,
|
|
* invalid buffer address, type!=GL_UNSIGNED_BYTE, width<1, height<1,
|
|
* width>internal limit or height>internal limit.
|
|
*/
|
|
GLAPI GLboolean GLAPIENTRY
|
|
OSMesaMakeCurrent( OSMesaContext ctx, void *buffer, GLenum type,
|
|
GLsizei width, GLsizei height );
|
|
|
|
|
|
|
|
|
|
/*
|
|
* Return the current Off-Screen Mesa rendering context handle.
|
|
*/
|
|
GLAPI OSMesaContext GLAPIENTRY
|
|
OSMesaGetCurrentContext( void );
|
|
|
|
|
|
|
|
/*
|
|
* Set pixel store/packing parameters for the current context.
|
|
* This is similar to glPixelStore.
|
|
* Input: pname - OSMESA_ROW_LENGTH
|
|
* specify actual pixels per row in image buffer
|
|
* 0 = same as image width (default)
|
|
* OSMESA_Y_UP
|
|
* zero = Y coordinates increase downward
|
|
* non-zero = Y coordinates increase upward (default)
|
|
* value - the value for the parameter pname
|
|
*
|
|
* New in version 2.0.
|
|
*/
|
|
GLAPI void GLAPIENTRY
|
|
OSMesaPixelStore( GLint pname, GLint value );
|
|
|
|
|
|
|
|
/*
|
|
* Return an integer value like glGetIntegerv.
|
|
* Input: pname -
|
|
* OSMESA_WIDTH return current image width
|
|
* OSMESA_HEIGHT return current image height
|
|
* OSMESA_FORMAT return image format
|
|
* OSMESA_TYPE return color component data type
|
|
* OSMESA_ROW_LENGTH return row length in pixels
|
|
* OSMESA_Y_UP returns 1 or 0 to indicate Y axis direction
|
|
* value - pointer to integer in which to return result.
|
|
*/
|
|
GLAPI void GLAPIENTRY
|
|
OSMesaGetIntegerv( GLint pname, GLint *value );
|
|
|
|
|
|
|
|
/*
|
|
* Return the depth buffer associated with an OSMesa context.
|
|
* Input: c - the OSMesa context
|
|
* Output: width, height - size of buffer in pixels
|
|
* bytesPerValue - bytes per depth value (2 or 4)
|
|
* buffer - pointer to depth buffer values
|
|
* Return: GL_TRUE or GL_FALSE to indicate success or failure.
|
|
*
|
|
* New in Mesa 2.4.
|
|
*/
|
|
GLAPI GLboolean GLAPIENTRY
|
|
OSMesaGetDepthBuffer( OSMesaContext c, GLint *width, GLint *height,
|
|
GLint *bytesPerValue, void **buffer );
|
|
|
|
|
|
|
|
/*
|
|
* Return the color buffer associated with an OSMesa context.
|
|
* Input: c - the OSMesa context
|
|
* Output: width, height - size of buffer in pixels
|
|
* format - buffer format (OSMESA_FORMAT)
|
|
* buffer - pointer to depth buffer values
|
|
* Return: GL_TRUE or GL_FALSE to indicate success or failure.
|
|
*
|
|
* New in Mesa 3.3.
|
|
*/
|
|
GLAPI GLboolean GLAPIENTRY
|
|
OSMesaGetColorBuffer( OSMesaContext c, GLint *width, GLint *height,
|
|
GLint *format, void **buffer );
|
|
|
|
|
|
|
|
/**
|
|
* This typedef is new in Mesa 6.3.
|
|
*/
|
|
typedef void (*OSMESAproc)();
|
|
|
|
|
|
/*
|
|
* Return pointer to the named function.
|
|
* New in Mesa 4.1
|
|
* Return OSMESAproc in 6.3.
|
|
*/
|
|
GLAPI OSMESAproc GLAPIENTRY
|
|
OSMesaGetProcAddress( const char *funcName );
|
|
|
|
|
|
|
|
/**
|
|
* Enable/disable color clamping, off by default.
|
|
* New in Mesa 6.4.2
|
|
*/
|
|
GLAPI void GLAPIENTRY
|
|
OSMesaColorClamp(GLboolean enable);
|
|
|
|
|
|
/**
|
|
* Enable/disable Gallium post-process filters.
|
|
* This should be called after a context is created, but before it is
|
|
* made current for the first time. After a context has been made
|
|
* current, this function has no effect.
|
|
* If the enable_value param is zero, the filter is disabled. Otherwise
|
|
* the filter is enabled, and the value may control the filter's quality.
|
|
* New in Mesa 10.0
|
|
*/
|
|
GLAPI void GLAPIENTRY
|
|
OSMesaPostprocess(OSMesaContext osmesa, const char *filter,
|
|
unsigned enable_value);
|
|
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
|
|
#endif
|