Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright © 2011 Intel Corporation
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the "Software"),
  6.  * to deal in the Software without restriction, including without limitation
  7.  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
  8.  * and/or sell copies of the Software, and to permit persons to whom the
  9.  * Software is furnished to do so, subject to the following conditions:
  10.  *
  11.  * The above copyright notice and this permission notice (including the next
  12.  * paragraph) shall be included in all copies or substantial portions of the
  13.  * Software.
  14.  *
  15.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  16.  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  17.  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
  18.  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  19.  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  20.  * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
  21.  * DEALINGS IN THE SOFTWARE.
  22.  */
  23. extern "C" {
  24. #include "glxclient.h"
  25. };
  26.  
  27. class fake_glx_screen : public glx_screen {
  28. public:
  29.    fake_glx_screen(struct glx_display *glx_dpy, int num, const char *ext)
  30.    {
  31.       this->vtable = &fake_glx_screen::vt;
  32.       this->serverGLXexts = 0;
  33.       this->effectiveGLXexts = 0;
  34.       this->display = 0;
  35.       this->dpy = 0;
  36.       this->scr = num;
  37.       this->visuals = 0;
  38.       this->configs = 0;
  39.  
  40.       this->display = glx_dpy;
  41.       this->dpy = (glx_dpy != NULL) ? glx_dpy->dpy : NULL;
  42.  
  43.       this->serverGLXexts = new char[strlen(ext) + 1];
  44.       strcpy((char *) this->serverGLXexts, ext);
  45.    }
  46.  
  47.    ~fake_glx_screen()
  48.    {
  49.       delete [] this->serverGLXexts;
  50.    }
  51.  
  52. private:
  53.    static struct glx_screen_vtable vt;
  54. };
  55.  
  56. class fake_glx_screen_direct : public fake_glx_screen {
  57. public:
  58.    fake_glx_screen_direct(struct glx_display *glx_dpy, int num,
  59.                           const char *ext)
  60.       : fake_glx_screen(glx_dpy, num, ext)
  61.    {
  62.       this->vtable = &fake_glx_screen_direct::vt;
  63.    }
  64.  
  65. private:
  66.    static struct glx_screen_vtable vt;
  67. };
  68.  
  69. class fake_glx_context : public glx_context {
  70. public:
  71.    fake_glx_context(struct glx_screen *psc, struct glx_config *mode)
  72.    {
  73.       contexts_allocated++;
  74.  
  75.       this->vtable = &fake_glx_context::vt;
  76.       this->majorOpcode = 123;
  77.       this->screen = psc->scr;
  78.       this->psc = psc;
  79.       this->config = mode;
  80.       this->isDirect = false;
  81.       this->currentContextTag = -1;
  82.  
  83.       this->client_state_private = (struct __GLXattributeRec *) 0xcafebabe;
  84.    }
  85.  
  86.    ~fake_glx_context()
  87.    {
  88.       contexts_allocated--;
  89.    }
  90.  
  91.    /** Number of context that are allocated (and not freed). */
  92.    static int contexts_allocated;
  93.  
  94. private:
  95.    static const struct glx_context_vtable vt;
  96.  
  97.    static void destroy(struct glx_context *gc)
  98.    {
  99.       delete gc;
  100.    }
  101. };
  102.  
  103. class fake_glx_context_direct : public fake_glx_context {
  104. public:
  105.    fake_glx_context_direct(struct glx_screen *psc, struct glx_config *mode)
  106.       : fake_glx_context(psc, mode)
  107.    {
  108.       this->isDirect = True;
  109.    }
  110.  
  111.    static glx_context *create(struct glx_screen *psc, struct glx_config *mode,
  112.                               struct glx_context *shareList, int renderType)
  113.    {
  114.       (void) shareList;
  115.       (void) renderType;
  116.  
  117.       return new fake_glx_context_direct(psc, mode);
  118.    }
  119.  
  120.    static glx_context *create_attribs(struct glx_screen *psc,
  121.                                       struct glx_config *mode,
  122.                                       struct glx_context *shareList,
  123.                                       unsigned num_attribs,
  124.                                       const uint32_t *attribs,
  125.                                       unsigned *error)
  126.    {
  127.       (void) shareList;
  128.       (void) num_attribs;
  129.       (void) attribs;
  130.  
  131.       *error = 0;
  132.       return new fake_glx_context_direct(psc, mode);
  133.    }
  134. };
  135.