⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 indirect.c

📁 Mesa is an open-source implementation of the OpenGL specification - a system for rendering interacti
💻 C
📖 第 1 页 / 共 5 页
字号:
/* DO NOT EDIT - This file generated automatically by glX_proto_send.py (from Mesa) script *//* * (C) Copyright IBM Corporation 2004, 2005 * 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, sub license, * 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 (including the next * paragraph) 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 NON-INFRINGEMENT.  IN NO EVENT SHALL * IBM, * AND/OR THEIR SUPPLIERS 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. */#include <GL/gl.h>#include "indirect.h"#include "glxclient.h"#include "indirect_size.h"#include "dispatch.h"#include "glapi.h"#include "glthread.h"#include <GL/glxproto.h>#ifdef USE_XCB#include <X11/Xlib-xcb.h>#include <xcb/xcb.h>#include <xcb/glx.h>#endif /* USE_XCB */#define __GLX_PAD(n) (((n) + 3) & ~3)#  if defined(__i386__) && defined(__GNUC__) && !defined(__CYGWIN__) && !defined(__MINGW32__)#    define FASTCALL __attribute__((fastcall))#  else#    define FASTCALL#  endif#  if defined(__GNUC__)#    define NOINLINE __attribute__((noinline))#  else#    define NOINLINE#  endif#if !defined __GNUC__ || __GNUC__ < 3#  define __builtin_expect(x, y) x#endif/* If the size and opcode values are known at compile-time, this will, on * x86 at least, emit them with a single instruction. */#define emit_header(dest, op, size)            \    do { union { short s[2]; int i; } temp;    \         temp.s[0] = (size); temp.s[1] = (op); \         *((int *)(dest)) = temp.i; } while(0)NOINLINE CARD32__glXReadReply(Display * dpy, size_t size, void *dest,               GLboolean reply_is_always_array){    xGLXSingleReply reply;    (void) _XReply(dpy, (xReply *) & reply, 0, False);    if (size != 0) {        if ((reply.length > 0) || reply_is_always_array) {            const GLint bytes = (reply_is_always_array)                ? (4 * reply.length) : (reply.size * size);            const GLint extra = 4 - (bytes & 3);            _XRead(dpy, dest, bytes);            if (extra < 4) {                _XEatData(dpy, extra);            }        } else {            (void) memcpy(dest, &(reply.pad3), size);        }    }    return reply.retval;}NOINLINE void__glXReadPixelReply(Display * dpy, __GLXcontext * gc, unsigned max_dim,                    GLint width, GLint height, GLint depth, GLenum format,                    GLenum type, void *dest, GLboolean dimensions_in_reply){    xGLXSingleReply reply;    GLint size;    (void) _XReply(dpy, (xReply *) & reply, 0, False);    if (dimensions_in_reply) {        width = reply.pad3;        height = reply.pad4;        depth = reply.pad5;        if ((height == 0) || (max_dim < 2)) {            height = 1;        }        if ((depth == 0) || (max_dim < 3)) {            depth = 1;        }    }    size = reply.length * 4;    if (size != 0) {        void *buf = Xmalloc(size);        if (buf == NULL) {            _XEatData(dpy, size);            __glXSetError(gc, GL_OUT_OF_MEMORY);        } else {            const GLint extra = 4 - (size & 3);            _XRead(dpy, buf, size);            if (extra < 4) {                _XEatData(dpy, extra);            }            __glEmptyImage(gc, 3, width, height, depth, format, type,                           buf, dest);            Xfree(buf);        }    }}#define X_GLXSingle 0NOINLINE FASTCALL GLubyte *__glXSetupSingleRequest(__GLXcontext * gc, GLint sop, GLint cmdlen){    xGLXSingleReq *req;    Display *const dpy = gc->currentDpy;    (void) __glXFlushRenderBuffer(gc, gc->pc);    LockDisplay(dpy);    GetReqExtra(GLXSingle, cmdlen, req);    req->reqType = gc->majorOpcode;    req->contextTag = gc->currentContextTag;    req->glxCode = sop;    return (GLubyte *) (req) + sz_xGLXSingleReq;}NOINLINE FASTCALL GLubyte *__glXSetupVendorRequest(__GLXcontext * gc, GLint code, GLint vop,                        GLint cmdlen){    xGLXVendorPrivateReq *req;    Display *const dpy = gc->currentDpy;    (void) __glXFlushRenderBuffer(gc, gc->pc);    LockDisplay(dpy);    GetReqExtra(GLXVendorPrivate, cmdlen, req);    req->reqType = gc->majorOpcode;    req->glxCode = code;    req->vendorCode = vop;    req->contextTag = gc->currentContextTag;    return (GLubyte *) (req) + sz_xGLXVendorPrivateReq;}const GLuint __glXDefaultPixelStore[9] = { 0, 0, 0, 0, 0, 0, 0, 0, 1 };#define zero                        (__glXDefaultPixelStore+0)#define one                         (__glXDefaultPixelStore+8)#define default_pixel_store_1D      (__glXDefaultPixelStore+4)#define default_pixel_store_1D_size 20#define default_pixel_store_2D      (__glXDefaultPixelStore+4)#define default_pixel_store_2D_size 20#define default_pixel_store_3D      (__glXDefaultPixelStore+0)#define default_pixel_store_3D_size 36#define default_pixel_store_4D      (__glXDefaultPixelStore+0)#define default_pixel_store_4D_size 36static FASTCALL NOINLINE voidgeneric_3_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 8;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 4);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_4_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 8;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 4);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_6_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 12;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 8);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_8_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 12;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 8);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_12_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 16;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 12);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_16_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 20;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 16);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_24_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 28;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 24);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}static FASTCALL NOINLINE voidgeneric_32_byte(GLint rop, const void *ptr){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 36;    emit_header(gc->pc, rop, cmdlen);    (void) memcpy((void *) (gc->pc + 4), ptr, 32);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}#define X_GLsop_NewList 101void__indirect_glNewList(GLuint list, GLenum mode){    __GLXcontext *const gc = __glXGetCurrentContext();    Display *const dpy = gc->currentDpy;#ifndef USE_XCB    const GLuint cmdlen = 8;#endif    if (__builtin_expect(dpy != NULL, 1)) {#ifdef USE_XCB        xcb_connection_t *c = XGetXCBConnection(dpy);        (void) __glXFlushRenderBuffer(gc, gc->pc);        xcb_glx_new_list(c, gc->currentContextTag, list, mode);#else        GLubyte const *pc =            __glXSetupSingleRequest(gc, X_GLsop_NewList, cmdlen);        (void) memcpy((void *) (pc + 0), (void *) (&list), 4);        (void) memcpy((void *) (pc + 4), (void *) (&mode), 4);        UnlockDisplay(dpy);        SyncHandle();#endif /* USE_XCB */    }    return;}#define X_GLsop_EndList 102void__indirect_glEndList(void){    __GLXcontext *const gc = __glXGetCurrentContext();    Display *const dpy = gc->currentDpy;#ifndef USE_XCB    const GLuint cmdlen = 0;#endif    if (__builtin_expect(dpy != NULL, 1)) {#ifdef USE_XCB        xcb_connection_t *c = XGetXCBConnection(dpy);        (void) __glXFlushRenderBuffer(gc, gc->pc);        xcb_glx_end_list(c, gc->currentContextTag);#else        (void) __glXSetupSingleRequest(gc, X_GLsop_EndList, cmdlen);        UnlockDisplay(dpy);        SyncHandle();#endif /* USE_XCB */    }    return;}#define X_GLrop_CallList 1void__indirect_glCallList(GLuint list){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint cmdlen = 8;    emit_header(gc->pc, X_GLrop_CallList, cmdlen);    (void) memcpy((void *) (gc->pc + 4), (void *) (&list), 4);    gc->pc += cmdlen;    if (__builtin_expect(gc->pc > gc->limit, 0)) {        (void) __glXFlushRenderBuffer(gc, gc->pc);    }}#define X_GLrop_CallLists 2void__indirect_glCallLists(GLsizei n, GLenum type, const GLvoid * lists){    __GLXcontext *const gc = __glXGetCurrentContext();    const GLuint compsize = __glCallLists_size(type);    const GLuint cmdlen = 12 + __GLX_PAD((compsize * n));    if (n < 0) {        __glXSetError(gc, GL_INVALID_VALUE);        return;    }    if (__builtin_expect((n >= 0) && (gc->currentDpy != NULL), 1)) {        if (cmdlen <= gc->maxSmallRenderCommandSize) {            if ((gc->pc + cmdlen) > gc->bufEnd) {                (void) __glXFlushRenderBuffer(gc, gc->pc);            }            emit_header(gc->pc, X_GLrop_CallLists, cmdlen);            (void) memcpy((void *) (gc->pc + 4), (void *) (&n), 4);            (void) memcpy((void *) (gc->pc + 8), (void *) (&type), 4);            (void) memcpy((void *) (gc->pc + 12), (void *) (lists),                          (compsize * n));            gc->pc += cmdlen;            if (__builtin_expect(gc->pc > gc->limit, 0)) {                (void) __glXFlushRenderBuffer(gc, gc->pc);            }        } else {            const GLint op = X_GLrop_CallLists;            const GLuint cmdlenLarge = cmdlen + 4;            GLubyte *const pc = __glXFlushRenderBuffer(gc, gc->pc);            (void) memcpy((void *) (pc + 0), (void *) (&cmdlenLarge), 4);            (void) memcpy((void *) (pc + 4), (void *) (&op), 4);            (void) memcpy((void *) (pc + 8), (void *) (&n), 4);            (void) memcpy((void *) (pc + 12), (void *) (&type), 4);            __glXSendLargeCommand(gc, pc, 16, lists, (compsize * n));        }    }}#define X_GLsop_DeleteLists 103void__indirect_glDeleteLists(GLuint list, GLsizei range){    __GLXcontext *const gc = __glXGetCurrentContext();    Display *const dpy = gc->currentDpy;#ifndef USE_XCB    const GLuint cmdlen = 8;#endif    if (__builtin_expect(dpy != NULL, 1)) {#ifdef USE_XCB        xcb_connection_t *c = XGetXCBConnection(dpy);        (void) __glXFlushRenderBuffer(gc, gc->pc);        xcb_glx_delete_lists(c, gc->currentContextTag, list, range);#else        GLubyte const *pc =            __glXSetupSingleRequest(gc, X_GLsop_DeleteLists, cmdlen);        (void) memcpy((void *) (pc + 0), (void *) (&list), 4);        (void) memcpy((void *) (pc + 4), (void *) (&range), 4);        UnlockDisplay(dpy);        SyncHandle();#endif /* USE_XCB */    }    return;}#define X_GLsop_GenLists 104GLuint__indirect_glGenLists(GLsizei range){    __GLXcontext *const gc = __glXGetCurrentContext();    Display *const dpy = gc->currentDpy;    GLuint retval = (GLuint) 0;#ifndef USE_XCB    const GLuint cmdlen = 4;#endif    if (__builtin_expect(dpy != NULL, 1)) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -