📄 glxclient.h
字号:
/*** License Applicability. Except to the extent portions of this file are** made subject to an alternative license as permitted in the SGI Free** Software License B, Version 1.1 (the "License"), the contents of this** file are subject only to the provisions of the License. You may not use** this file except in compliance with the License. You may obtain a copy** of the License at Silicon Graphics, Inc., attn: Legal Services, 1600** Amphitheatre Parkway, Mountain View, CA 94043-1351, or at:** ** http://oss.sgi.com/projects/FreeB** ** Note that, as provided in the License, the Software is distributed on an** "AS IS" basis, with ALL EXPRESS AND IMPLIED WARRANTIES AND CONDITIONS** DISCLAIMED, INCLUDING, WITHOUT LIMITATION, ANY IMPLIED WARRANTIES AND** CONDITIONS OF MERCHANTABILITY, SATISFACTORY QUALITY, FITNESS FOR A** PARTICULAR PURPOSE, AND NON-INFRINGEMENT.** ** Original Code. The Original Code is: OpenGL Sample Implementation,** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics,** Inc. The Original Code is Copyright (c) 1991-2000 Silicon Graphics, Inc.** Copyright in any portions created by third parties is as indicated** elsewhere herein. All Rights Reserved.** ** Additional Notice Provisions: The application programming interfaces** established by SGI in conjunction with the Original Code are The** OpenGL(R) Graphics System: A Specification (Version 1.2.1), released** April 1, 1999; The OpenGL(R) Graphics System Utility Library (Version** 1.3), released November 4, 1998; and OpenGL(R) Graphics with the X** Window System(R) (Version 1.3), released October 19, 1998. This software** was created using the OpenGL(R) version 1.2.1 Sample Implementation** published by SGI, but has not been independently verified as being** compliant with the OpenGL(R) version 1.2.1 Specification.*//* $XFree86: xc/lib/GL/glx/glxclient.h,v 1.21 2004/02/09 23:46:31 alanh Exp $ *//** * \file glxclient.h * Direct rendering support added by Precision Insight, Inc. * * \author Kevin E. Martin <kevin@precisioninsight.com> */#ifndef _GLX_client_h_#define _GLX_client_h_#define NEED_REPLIES#define NEED_EVENTS#include <X11/Xproto.h>#include <X11/Xlibint.h>#define GLX_GLXEXT_PROTOTYPES#include <GL/glx.h>#include <GL/glxext.h>#include <string.h>#include <stdlib.h>#include <stdio.h>#ifdef WIN32#include <stdint.h>#endif#include "GL/glxint.h"#include "GL/glxproto.h"#include "GL/internal/glcore.h"#include "glapitable.h"#include "glxextensions.h"#if defined( USE_XTHREADS )# include <X11/Xthreads.h>#elif defined( PTHREADS )# include <pthread.h>#endif#define GLX_MAJOR_VERSION 1 /* current version numbers */#define GLX_MINOR_VERSION 4#define __GLX_MAX_TEXTURE_UNITS 32typedef struct __GLXcontextRec __GLXcontext;typedef struct __GLXdisplayPrivateRec __GLXdisplayPrivate;typedef struct _glapi_table __GLapi;/************************************************************************/#ifdef GLX_DIRECT_RENDERING#include <GL/internal/dri_interface.h>/** * Display dependent methods. This structure is initialized during the * \c driCreateDisplay call. */struct __DRIdisplayRec { /** * Method to destroy the private DRI display data. */ void (*destroyDisplay)(Display *dpy, void *displayPrivate); /** * Opaque pointer to private per display direct rendering data. * \c NULL if direct rendering is not supported on this display. */ struct __DRIdisplayPrivateRec *private; /** * Array of pointers to methods to create and initialize the private DRI * screen data. */ PFNCREATENEWSCREENFUNC * createNewScreen;};/*** We keep a linked list of these structures, one per DRI device driver.*/struct __DRIdriverRec { const char *name; void *handle; PFNCREATENEWSCREENFUNC createNewScreenFunc; struct __DRIdriverRec *next;};/*** Function to create and DRI display data and initialize the display** dependent methods.*/extern void *driCreateDisplay(Display *dpy, __DRIdisplay *pdisp);extern __DRIdriver *driGetDriver(Display *dpy, int scrNum);extern void DRI_glXUseXFont( Font font, int first, int count, int listbase );/*** Functions to obtain driver configuration information from a direct** rendering client application*/extern const char *glXGetScreenDriver (Display *dpy, int scrNum);extern const char *glXGetDriverConfig (const char *driverName);extern Bool __glXWindowExists(Display *dpy, GLXDrawable draw);#endif/************************************************************************/#define __GL_CLIENT_ATTRIB_STACK_DEPTH 16typedef struct __GLXpixelStoreModeRec { GLboolean swapEndian; GLboolean lsbFirst; GLuint rowLength; GLuint imageHeight; GLuint imageDepth; GLuint skipRows; GLuint skipPixels; GLuint skipImages; GLuint alignment;} __GLXpixelStoreMode;typedef struct __GLXattributeRec { GLuint mask; /** * Pixel storage state. Most of the pixel store mode state is kept * here and used by the client code to manage the packing and * unpacking of data sent to/received from the server. */ __GLXpixelStoreMode storePack, storeUnpack; /** * Is EXT_vertex_array / GL 1.1 DrawArrays protocol specifically * disabled? */ GLboolean NoDrawArraysProtocol; /** * Vertex Array storage state. The vertex array component * state is stored here and is used to manage the packing of * DrawArrays data sent to the server. */ struct array_state_vector * array_state;} __GLXattribute;typedef struct __GLXattributeMachineRec { __GLXattribute *stack[__GL_CLIENT_ATTRIB_STACK_DEPTH]; __GLXattribute **stackPointer;} __GLXattributeMachine;/** * GLX state that needs to be kept on the client. One of these records * exist for each context that has been made current by this client. */struct __GLXcontextRec { /** * \name Drawing command buffer. * * Drawing commands are packed into this buffer before being sent as a * single GLX protocol request. The buffer is sent when it overflows or * is flushed by \c __glXFlushRenderBuffer. \c pc is the next location * in the buffer to be filled. \c limit is described above in the buffer * slop discussion. * * Commands that require large amounts of data to be transfered will * also use this buffer to hold a header that describes the large * command. * * These must be the first 6 fields since they are static initialized * in the dummy context in glxext.c */ /*@{*/ GLubyte *buf; GLubyte *pc; GLubyte *limit; GLubyte *bufEnd; GLint bufSize; /*@}*/ /** * The XID of this rendering context. When the context is created a * new XID is allocated. This is set to None when the context is * destroyed but is still current to some thread. In this case the * context will be freed on next MakeCurrent. */ XID xid; /** * The XID of the \c shareList context. */ XID share_xid; /** * Visual id. * * \deprecated * This filed has been largely been replaced by the \c mode field, but * the work is not quite done. */ VisualID vid; /** * Screen number. */ GLint screen; /** * \c GL_TRUE if the context was created with ImportContext, which * means the server-side context was created by another X client. */ GLboolean imported; /** * The context tag returned by MakeCurrent when this context is made * current. This tag is used to identify the context that a thread has * current so that proper server context management can be done. It is * used for all context specific commands (i.e., \c Render, \c RenderLarge, * \c WaitX, \c WaitGL, \c UseXFont, and \c MakeCurrent (for the old * context)). */ GLXContextTag currentContextTag; /** * \name Rendering mode * * The rendering mode is kept on the client as well as the server. * When \c glRenderMode is called, the buffer associated with the * previous rendering mode (feedback or select) is filled. */ /*@{*/ GLenum renderMode; GLfloat *feedbackBuf; GLuint *selectBuf; /*@}*/ /** * This is \c GL_TRUE if the pixel unpack modes are such that an image * can be unpacked from the clients memory by just copying. It may * still be true that the server will have to do some work. This * just promises that a straight copy will fetch the correct bytes. */ GLboolean fastImageUnpack; /** * Fill newImage with the unpacked form of \c oldImage getting it * ready for transport to the server. */ void (*fillImage)(__GLXcontext*, GLint, GLint, GLint, GLint, GLenum, GLenum, const GLvoid*, GLubyte*, GLubyte*); /** * Client side attribs. */ __GLXattributeMachine attributes; /** * Client side error code. This is set when client side gl API * routines need to set an error because of a bad enumerant or * running out of memory, etc. */ GLenum error; /** * Whether this context does direct rendering. */ Bool isDirect; /** * \c dpy of current display for this context. Will be \c NULL if not * current to any display, or if this is the "dummy context". */ Display *currentDpy; /** * The current drawable for this context. Will be None if this * context is not current to any drawable. currentReadable is below. */ GLXDrawable currentDrawable; /** * \name GL Constant Strings * * Constant strings that describe the server implementation * These pertain to GL attributes, not to be confused with * GLX versioning attributes. */ /*@{*/ GLubyte *vendor; GLubyte *renderer; GLubyte *version; GLubyte *extensions; /*@}*/ /** * Record the dpy this context was created on for later freeing */ Display *createDpy; /** * Maximum small render command size. This is the smaller of 64k and * the size of the above buffer. */ GLint maxSmallRenderCommandSize; /** * Major opcode for the extension. Copied here so a lookup isn't * needed. */ GLint majorOpcode;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -