X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=radiant%2Fglwidget.cpp;h=0820d78795be8efd1ee3c73373d50c7b12730fc2;hp=4498107faa5f29a3964c9b2580ffc134d7d4b75f;hb=4ebf4de56410776f8aa2b1e47ff71d40c57af629;hpb=b1bfb19ecd5ec8355065b2028a6de0c850197b2d diff --git a/radiant/glwidget.cpp b/radiant/glwidget.cpp index 4498107f..0820d787 100644 --- a/radiant/glwidget.cpp +++ b/radiant/glwidget.cpp @@ -1,254 +1,52 @@ /* -Copyright (c) 2001, Loki software, inc. -All rights reserved. + Copyright (C) 2001-2006, William Joseph. + All Rights Reserved. -Redistribution and use in source and binary forms, with or without modification, -are permitted provided that the following conditions are met: + This file is part of GtkRadiant. -Redistributions of source code must retain the above copyright notice, this list -of conditions and the following disclaimer. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -Redistributions in binary form must reproduce the above copyright notice, this -list of conditions and the following disclaimer in the documentation and/or -other materials provided with the distribution. + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -Neither the name of Loki software nor the names of its contributors may be used -to endorse or promote products derived from this software without specific prior -written permission. + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' -AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY -DIRECT,INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES -(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON -ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -*/ - -// OpenGL widget based on GtkGLExt - -#include "stdafx.h" - -#include #include "glwidget.h" -#include "qgl.h" -typedef int* attribs_t; -typedef const attribs_t* configs_iterator; - -int config_rgba32[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 8, - GDK_GL_BLUE_SIZE, 8, - GDK_GL_GREEN_SIZE, 8, - GDK_GL_ALPHA_SIZE, 8, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 1, - GDK_GL_BLUE_SIZE, 1, - GDK_GL_GREEN_SIZE, 1, - GDK_GL_ALPHA_SIZE, 1, - GDK_GL_ATTRIB_LIST_NONE, -}; - -const attribs_t configs[] = { - config_rgba32, - config_rgba, -}; +#include "igtkgl.h" +#include "modulesystem.h" +#include "gtkutil/glwidget.h" -GdkGLConfig* glconfig_new() +class GtkGLAPI { - GdkGLConfig* glconfig = NULL; +_QERGtkGLTable m_gtkgl; +public: +typedef _QERGtkGLTable Type; +STRING_CONSTANT( Name, "*" ); - for(configs_iterator i = configs, end = configs + 2; i != end && glconfig == NULL; ++i) - { - glconfig = gdk_gl_config_new(*i); - } - - if(glconfig == NULL) - { - return gdk_gl_config_new_by_mode((GdkGLConfigMode)(GDK_GL_MODE_RGBA | GDK_GL_MODE_DOUBLE)); - } - - return glconfig; +GtkGLAPI(){ + m_gtkgl.glwidget_new = &glwidget_new; + m_gtkgl.glwidget_swap_buffers = &glwidget_swap_buffers; + m_gtkgl.glwidget_make_current = &glwidget_make_current; + m_gtkgl.glwidget_destroy_context = &glwidget_destroy_context; + m_gtkgl.glwidget_create_context = &glwidget_create_context; } - -int config_rgba32_depth32[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 8, - GDK_GL_BLUE_SIZE, 8, - GDK_GL_GREEN_SIZE, 8, - GDK_GL_ALPHA_SIZE, 8, - GDK_GL_DEPTH_SIZE, 32, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba32_depth24[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 8, - GDK_GL_BLUE_SIZE, 8, - GDK_GL_GREEN_SIZE, 8, - GDK_GL_ALPHA_SIZE, 8, - GDK_GL_DEPTH_SIZE, 24, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba32_depth16[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 8, - GDK_GL_BLUE_SIZE, 8, - GDK_GL_GREEN_SIZE, 8, - GDK_GL_ALPHA_SIZE, 8, - GDK_GL_DEPTH_SIZE, 16, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba32_depth[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 8, - GDK_GL_BLUE_SIZE, 8, - GDK_GL_GREEN_SIZE, 8, - GDK_GL_ALPHA_SIZE, 8, - GDK_GL_DEPTH_SIZE, 1, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba_depth16[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 1, - GDK_GL_BLUE_SIZE, 1, - GDK_GL_GREEN_SIZE, 1, - GDK_GL_ALPHA_SIZE, 1, - GDK_GL_DEPTH_SIZE, 16, - GDK_GL_ATTRIB_LIST_NONE, -}; - -int config_rgba_depth[] = { - GDK_GL_RGBA, - GDK_GL_DOUBLEBUFFER, - GDK_GL_RED_SIZE, 1, - GDK_GL_BLUE_SIZE, 1, - GDK_GL_GREEN_SIZE, 1, - GDK_GL_ALPHA_SIZE, 1, - GDK_GL_DEPTH_SIZE, 1, - GDK_GL_ATTRIB_LIST_NONE, -}; - -const attribs_t configs_with_depth[] = -{ - config_rgba32_depth32, - config_rgba32_depth24, - config_rgba32_depth16, - config_rgba32_depth, - config_rgba_depth16, - config_rgba_depth, -}; - -GdkGLConfig* glconfig_new_with_depth() -{ - GdkGLConfig* glconfig = NULL; - - for(configs_iterator i = configs_with_depth, end = configs_with_depth + 6; i != end && glconfig == NULL; ++i) - { - glconfig = gdk_gl_config_new(*i); - } - - if(glconfig == NULL) - { - return gdk_gl_config_new_by_mode((GdkGLConfigMode)(GDK_GL_MODE_RGBA | GDK_GL_MODE_DOUBLE | GDK_GL_MODE_DEPTH)); - } - - return glconfig; -} - -GtkWidget* WINAPI gtk_glwidget_new (gboolean zbuffer, GtkWidget* share) -{ - GtkWidget* drawing_area = gtk_drawing_area_new(); - GdkGLConfig* glconfig = (zbuffer) ? glconfig_new_with_depth() : glconfig_new(); - GdkGLContext* shared_context = (share) ? gtk_widget_get_gl_context(share) : NULL; - - gtk_widget_set_gl_capability (drawing_area, glconfig, shared_context, TRUE, GDK_GL_RGBA_TYPE); - - return drawing_area; -} - -void WINAPI gtk_glwidget_destroy_context (GtkWidget *widget) -{ -} - -void WINAPI gtk_glwidget_create_context (GtkWidget *widget) -{ -} - -void WINAPI gtk_glwidget_swap_buffers (GtkWidget *widget) -{ - GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); - gdk_gl_drawable_swap_buffers (gldrawable); -} - -gboolean WINAPI gtk_glwidget_make_current (GtkWidget *widget) -{ - GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); - GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); - return gdk_gl_drawable_gl_begin (gldrawable, glcontext); -} - -GLuint font_list_base; -static gchar font_string[] = "courier 8"; -static gint font_height; - -void gtk_glwidget_create_font (GtkWidget *widget) -{ - GdkGLContext *glcontext = gtk_widget_get_gl_context (widget); - GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable (widget); - - PangoFontDescription *font_desc; - PangoFont *font; - PangoFontMetrics *font_metrics; - - font_list_base = qglGenLists (256); - - font_desc = pango_font_description_from_string (font_string); - - font = gdk_gl_font_use_pango_font (font_desc, 0, 256, font_list_base); - - if(font != NULL) - { - font_metrics = pango_font_get_metrics (font, NULL); - - font_height = pango_font_metrics_get_ascent (font_metrics) + - pango_font_metrics_get_descent (font_metrics); - font_height = PANGO_PIXELS (font_height); - - pango_font_metrics_unref (font_metrics); - } - - pango_font_description_free (font_desc); -} - - -void gtk_glwidget_print_string(const char *s) -{ - qglListBase(font_list_base); - qglCallLists(strlen(s), GL_UNSIGNED_BYTE, (unsigned char *)s); +_QERGtkGLTable* getTable(){ + return &m_gtkgl; } +}; -void gtk_glwidget_print_char(char s) -{ - qglListBase(font_list_base); - qglCallLists(1, GL_UNSIGNED_BYTE, (unsigned char *) &s); -} +#include "modulesystem/singletonmodule.h" +#include "modulesystem/moduleregistry.h" +typedef SingletonModule GtkGLModule; +typedef Static StaticGtkGLModule; +StaticRegisterModule staticRegisterGtkGL( StaticGtkGLModule::instance() );