diff options
Diffstat (limited to 'include/GL/uglmesa.h')
-rw-r--r-- | include/GL/uglmesa.h | 322 |
1 files changed, 322 insertions, 0 deletions
diff --git a/include/GL/uglmesa.h b/include/GL/uglmesa.h new file mode 100644 index 00000000000..44f8fc035ee --- /dev/null +++ b/include/GL/uglmesa.h @@ -0,0 +1,322 @@ +/* uglmesa.h - Public header UGL/Mesa */ + +/* Copyright (C) 2001 by Wind River Systems, Inc */ + +/* + * Mesa 3-D graphics library + * Version: 3.5 + * + * The MIT License + * 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 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. + */ + +/* + * Author: + * Stephane Raimbault <[email protected]> + */ + +#ifndef UGLMESA_H +#define UGLMESA_H + +#ifdef __cplusplus +extern "C" { +#endif + +#define UGL_MESA_MAJOR_VERSION 1 +#define UGL_MESA_MINOR_VERSION 0 + +#include <GL/gl.h> +#include <ugl/ugl.h> + +/* + * Values for display mode of uglMesaCreateContext () + */ + +#define UGL_MESA_SINGLE 0x00 +#define UGL_MESA_DOUBLE 0x01 +#define UGL_MESA_DOUBLE_SW 0x02 +#define UGL_MESA_DOUBLE_HW 0x03 + +#define UGL_MESA_FULLSCREEN_WIDTH 0x0 +#define UGL_MESA_FULLSCREEN_HEIGHT 0x0 + +/* + * Pixel format + */ +#define UGL_MESA_ARGB8888 0x01 +#define UGL_MESA_RGB565 0x02 +#define UGL_MESA_RGB888 0x03 +#define UGL_MESA_ARGB4444 0x04 +#define UGL_MESA_CI 0x05 +#define UGL_MESA_DITHER_RGB 0x10 + +/* + * uglMesaPixelStore() parameters: + */ + +#define UGL_MESA_ROW_LENGTH 0x10 +#define UGL_MESA_Y_UP 0x11 + +/* + * Accepted by uglMesaGetIntegerv: + */ + +#define UGL_MESA_LEFT_X 0x18 +#define UGL_MESA_TOP_Y 0x19 +#define UGL_MESA_WIDTH 0x20 +#define UGL_MESA_HEIGHT 0x21 +#define UGL_MESA_DISPLAY_WIDTH 0x22 +#define UGL_MESA_DISPLAY_HEIGHT 0x23 +#define UGL_MESA_COLOR_FORMAT 0x24 +#define UGL_MESA_COLOR_MODEL 0x25 +#define UGL_MESA_PIXEL_FORMAT 0x26 +#define UGL_MESA_TYPE 0x27 +#define UGL_MESA_RGB 0x28 +#define UGL_MESA_COLOR_INDEXED 0x29 + +/* + * typedefs + */ + +typedef struct uglMesaContext * UGL_MESA_CONTEXT; + +/* + * Create an Mesa/UGL rendering context. The attributes needed are + * double buffer flag and a context sharelist. + * + * It's necessary to first call this function before use uglMakeCurrentContext. + * This function provides neither stencil nor accumulation buffer only + * a depth buffer to reduce memory footprint. + * + * Input: db_mode - UGL_MESA_SINGLE = single buffer mode + * UGL_MESA_DOUBLE = double buffer mode (HW fallback -> SW) + * UGL_MESA_DOUBLE_SW = double buffer software + * UGL_MESA_DOUBLE_HW = double buffer hardware + * share_list - specifies another UGL_MESA_CONTEXT with which to share + * display lists. NULL indicates no sharing. + * + * Return: a UGL_MESA_CONTEXT, or zero if error + */ + +UGL_MESA_CONTEXT uglMesaCreateNewContext (GLenum db_mode, + UGL_MESA_CONTEXT share_list); + +/* + * Create an UGL/Mesa rendering context and specify desired + * size of depth buffer, stencil buffer and accumulation buffer. + * If you specify zero for depth_bits, stencil_bits, + * accum_[red|gren|blue]_bits, you can save some memory. + * + * INPUT: db_mode - double buffer mode + * depth_bits - depth buffer size + * stencil_bits - stencil buffer size + * accum_red_bits - accumulation red buffer size + * accum_green_bits - accumulation green buffer size + * accum_blue_bits -accumulation blue buffer size + * accum_alpha_bits -accumulation alpha buffer size + * share_list - specifies another UGL_MESA_CONTEXT with which to share + * display lists. NULL indicates no sharing. + */ +UGL_MESA_CONTEXT uglMesaCreateNewContextExt (GLenum db_flag, + GLint depth_bits, + GLint stencil_bits, + GLint accum_red_bits, + GLint accum_green_bits, + GLint accum_blue_bits, + GLint accum_alpha_bits, + UGL_MESA_CONTEXT share_list); + +/* + * Bind an UGL_MESA_CONTEXT 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: umc - a rendering context + * left, top - coordinates in pixels of (left,top) pixel + * (0,0) in fullscreen mode. + * width, height - size of image buffer in pixels, at least 1 + * else fullscreen dimensions are used (UGL_MESA_DISPLAY_WIDTH + * and UGL_MESA_DISPLAY_HEIGHT). + * + * Return: GL_TRUE if success, GL_FALSE if error because of invalid umc, + * width<1, height<1, width>internal limit or height>internal limit. + */ + +GLboolean uglMesaMakeCurrentContext (UGL_MESA_CONTEXT umc, + GLsizei left, GLsizei top, + GLsizei width, GLsizei height); + +/* + * Move an OpenGL window by a delta value + * + * Input: dx, dy - delta values in pixels + * + * Return: GL_TRUE if success, GL_FALSE if error because of invalid + * coordinates. + */ +GLboolean uglMesaMoveWindow (GLsizei dx, GLsizei dy); + +/* + * Move an OpenGL window to an absolute position + * + * Input: left, top - new coordinates in pixels + * + * Return: GL_TRUE if success, GL_FALSE if error because of invalid + * coordinates. + */ +GLboolean uglMesaMoveToWindow (GLsizei left, GLsizei top); + +/* + * Resize an OpenGL window by a delta value + * + * Input: dw, dh - delta values in pixels + * + * Return: GL_TRUE if success, GL_FALSE if error because of invalid + * coordinates. + */ +GLboolean uglMesaResizeWindow (GLsizei dw, GLsizei dh); + +/* + * Resize an OpenGL window to an absolute size + * + * Input: width, height - new dimensions in pixels + * + * Return: GL_TRUE if success, GL_FALSE if error because of invalid + * coordinates. + */ +GLboolean uglMesaResizeToWindow (GLsizei width, GLsizei height); + +/* + * Destroy the current UGL/Mesa rendering context + * + */ +void uglMesaDestroyContext (void); + +/* + * Return the current UGL/Mesa context + * + * Return: a UGL/Mesa context, or NULL if error + * + */ +UGL_MESA_CONTEXT uglMesaGetCurrentContext (void); + +/* + * Swap front and back buffers in double buffering mode. This + * function is a no-op if there's no back buffer. In case of software + * double buffering a copy occurs from off-screen buffer to front + * buffer. Works faster with an hardware support. + */ + +void uglMesaSwapBuffers (void); + +/* + * Set pixel store/packing parameters for the current context. This + * is similar to glPixelStore. UGL uses Y coordinates increase + * downward. + * + * Input: pname - UGL_MESA_ROW_LENGTH + * zero, same as image width (default). + * value specify actual pixels per row in image buffer + * UGL_MESA_Y_UP: + * zero = Y coordinates increase downward (default) + * non-zero = Y coordinates increase upward + * value - value for the parameter pname + */ + +void uglMesaPixelStore (GLint pname, GLint value); + +/* + * Return an integer value like glGetIntegerv. + * + * Input: pname - UGL_MESA_LEFT_X return the x axis value + * of the most left pixel + * UGL_MESA_TOP_Y return the y axis value + * of the topper pixel + * UGL_MESA_WIDTH return current image width + * UGL_MESA_HEIGHT return current image height + * UGL_MESA_COLOR_FORMAT return image color format + * UGL_MESA_COLOR_MODEL return image color model + * UGL_MESA_PIXEL_FORMAT return pixel format + * UGL_MESA_ROW_LENGTH return row length in pixels + * UGL_MESA_RGB return true if RGB + * UGL_MESA_COLOR_INDEXED return true if color indexed + * value - pointer to integer in which to return result. + */ +void uglMesaGetIntegerv (GLint pname, GLint *value); + +/* + * Return the depth buffer associated with an UGL/Mesa 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. + * + */ +GLboolean uglMesaGetDepthBuffer (GLint *width, GLint *height, + GLint *bytesPerValue, void **buffer); + +/* + * Return the color buffer associated with an UGL/Mesa context. + * Input: c - the UGL/Mesa context + * Output: width, height - size of buffer in pixels + * format - buffer format (UGLMESA_FORMAT) + * buffer - pointer to color buffer values + * Return: GL_TRUE or GL_FALSE to indicate success or failure. + * + */ +GLboolean uglMesaGetColorBuffer (GLint *width, GLint *height, + GLint *format, void **buffer); + +/* + * Color allocation in indexed mode. + * This function does nothing in RGB mode. + * + * Input: index - Value for the current color index + * red - Red component (between 0 and 1) + * green - Green component (between 0 and 1) + * blue - Blue component (between 0 and 1) + * + * Return: GL_TRUE if success, or GL_FALSE if index<0 or * clutSize<index, + * red, green and blue are not between 0.0 and 1.0. + * + */ + +GLboolean uglMesaSetColor (GLubyte index, GLfloat red, + GLfloat green, GLfloat blue); + +#ifdef __cplusplus +} +#endif + + +#endif |