/** * $Id$ * ***** BEGIN GPL LICENSE BLOCK ***** * * This program 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. * * This program 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. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. * All rights reserved. * * The Original Code is: all of this file. * * Contributor(s): none yet. * * ***** END GPL LICENSE BLOCK ***** */ #include "KX_BlenderGL.h" #ifdef HAVE_CONFIG_H #include #endif /* * This little block needed for linking to Blender... */ #ifdef WIN32 #include "BLI_winstuff.h" #endif #include #include #include "BMF_Api.h" #ifdef __APPLE__ #define GL_GLEXT_LEGACY 1 #include #include #else #include #if defined(__sun__) && !defined(__sparc__) #include #else #include #endif #endif #include "RAS_OpenGLRasterizer/RAS_GLExtensionManager.h" #include "RAS_OpenGLRasterizer/ARB_multitexture.h" #include "BL_Material.h" // MAXTEX /* Data types encoding the game world: */ #include "DNA_object_types.h" #include "DNA_scene_types.h" #include "DNA_screen_types.h" #include "DNA_camera_types.h" #include "DNA_world_types.h" #include "DNA_mesh_types.h" #include "DNA_meshdata_types.h" #include "DNA_image_types.h" #include "DNA_view3d_types.h" #include "DNA_material_types.h" #include "BKE_global.h" #include "BKE_bmfont.h" #include "BKE_image.h" #include "BIF_gl.h" extern "C" { #include "BDR_drawmesh.h" #include "BIF_mywindow.h" #include "BIF_toolbox.h" #include "BIF_graphics.h" /* For CURSOR_NONE CURSOR_WAIT CURSOR_STD */ } /* end of blender block */ #ifdef __APPLE__ #include #else #include #endif /* was in drawmesh.c */ void spack(unsigned int ucol) { char *cp= (char *)&ucol; glColor3ub(cp[3], cp[2], cp[1]); } void BL_warp_pointer(int x,int y) { warp_pointer(x,y); } void BL_SwapBuffers() { myswapbuffers(); } void BL_RenderText(int mode,const char* textstr,int textlen,struct MTFace* tface, unsigned int *col,float v1[3],float v2[3],float v3[3],float v4[3]) { Image* ima; if(mode & TF_BMFONT) { //char string[MAX_PROPSTRING]; int characters, index, character; float centerx, centery, sizex, sizey, transx, transy, movex, movey, advance; // bProperty *prop; // string = "Frank van Beek"; characters = textlen; ima = (struct Image*) tface->tpage; if (ima == NULL) { characters = 0; } if(!col) glColor3f(1.0f, 1.0f, 1.0f); glPushMatrix(); for (index = 0; index < characters; index++) { // lets calculate offset stuff character = textstr[index]; // space starts at offset 1 // character = character - ' ' + 1; matrixGlyph((ImBuf *)ima->ibufs.first, character, & centerx, ¢ery, &sizex, &sizey, &transx, &transy, &movex, &movey, &advance); glBegin(GL_POLYGON); // printf(" %c %f %f %f %f\n", character, tface->uv[0][0], tface->uv[0][1], ); // glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy); glTexCoord2f((tface->uv[0][0] - centerx) * sizex + transx, (tface->uv[0][1] - centery) * sizey + transy); if(col) spack(col[0]); // glVertex3fv(v1); glVertex3f(sizex * v1[0] + movex, sizey * v1[1] + movey, v1[2]); glTexCoord2f((tface->uv[1][0] - centerx) * sizex + transx, (tface->uv[1][1] - centery) * sizey + transy); if(col) spack(col[1]); // glVertex3fv(v2); glVertex3f(sizex * v2[0] + movex, sizey * v2[1] + movey, v2[2]); glTexCoord2f((tface->uv[2][0] - centerx) * sizex + transx, (tface->uv[2][1] - centery) * sizey + transy); if(col) spack(col[2]); // glVertex3fv(v3); glVertex3f(sizex * v3[0] + movex, sizey * v3[1] + movey, v3[2]); if(v4) { // glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, 1.0 - (1.0 - tface->uv[3][1]) * sizey - transy); glTexCoord2f((tface->uv[3][0] - centerx) * sizex + transx, (tface->uv[3][1] - centery) * sizey + transy); if(col) spack(col[3]); // glVertex3fv(v4); glVertex3f(sizex * v4[0] + movex, sizey * v4[1] + movey, v4[2]); } glEnd(); glTranslatef(advance, 0.0, 0.0); } glPopMatrix(); } } void DisableForText() { if(glIsEnabled(GL_BLEND)) glDisable(GL_BLEND); if(glIsEnabled(GL_LIGHTING)) { glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); } #if defined(GL_ARB_multitexture) && defined(WITH_GLEXT) if (!getenv("WITHOUT_GLEXT")) { for(int i=0; i