/* 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 */ #ifndef UGLMESA_H #define UGLMESA_H #ifdef __cplusplus extern "C" { #endif #define UGL_MESA_MAJOR_VERSION 1 #define UGL_MESA_MINOR_VERSION 0 #include #include /* * 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