From f173204498085c278b2ad407ae7dcd3217c59a3e Mon Sep 17 00:00:00 2001 From: Rodrigo Braz Monteiro Date: Thu, 12 Apr 2007 12:49:41 +0000 Subject: [PATCH] Very early, incomplete, and so far unused gl text class. Originally committed to SVN as r1059. --- aegisub/gl_text.cpp | 163 ++++++++++++++++++++++++++++++++++++++++++++ aegisub/gl_text.h | 96 ++++++++++++++++++++++++++ 2 files changed, 259 insertions(+) create mode 100644 aegisub/gl_text.cpp create mode 100644 aegisub/gl_text.h diff --git a/aegisub/gl_text.cpp b/aegisub/gl_text.cpp new file mode 100644 index 000000000..35aa12924 --- /dev/null +++ b/aegisub/gl_text.cpp @@ -0,0 +1,163 @@ +// Copyright (c) 2007, Rodrigo Braz Monteiro +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of the Aegisub Group nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// 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 COPYRIGHT OWNER 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. +// +// ----------------------------------------------------------------------------- +// +// AEGISUB +// +// Website: http://aegisub.cellosoft.com +// Contact: mailto:zeratul@cellosoft.com +// + + +/////////// +// Headers +#include "gl_text.h" + + +/////////////////// +// Static instance +OpenGLText* OpenGLText::instance; + + +/////////////// +// Constructor +OpenGLText::OpenGLText() { + r = g = b = a = 1.0f; +} + + +////////////// +// Destructor +OpenGLText::~OpenGLText() { +} + + +//////////////// +// Get instance +OpenGLText* OpenGLText::GetInstance() { + if (!instance) instance = new OpenGLText(); + wxASSERT(instance); + return instance; +} + + +//////////// +// Set font +void OpenGLText::DoSetFont(wxString face,int size) { +} + + +////////////// +// Set colour +void OpenGLText::DoSetColour(wxColour col,float alpha) { + r = col.Red() / 255.0f; + g = col.Green() / 255.0f; + b = col.Blue() / 255.0f; + a = alpha; +} + + +///////// +// Print +void OpenGLText::DoPrint(wxString text,int x,int y) { +} + + +/////////////// +// Get a glyph +OpenGLTextGlyph OpenGLText::GetGlyph(int i) { + glyphMap::iterator res = glyphs.find(i); + + // Found + if (res != glyphs.end()) return res->second; + + // Not found, create it + return CreateGlyph(i); +} + + +////////////////// +// Create a glyph +OpenGLTextGlyph OpenGLText::CreateGlyph(int n) { + // Create glyph + OpenGLTextGlyph glyph; + glyph.x = 0; + glyph.y = 0; + glyph.w = 0; + glyph.h = 0; + glyph.tex = 0; + + // Render glyph; + int w = 16; + int h = 16; + + // Insert into some texture + bool ok = false; + for (unsigned int i=0;iCanFit(w,h)) { + textures[i]->Insert(glyph); + ok = true; + } + } + + // No texture could fit it, create a new one + if (!ok) { + textures.push_back(new OpenGLTextTexture()); + textures.back()->Insert(glyph); + } + + // Set glyph and return it + glyphs[n] = glyph; + return glyph; +} + + +/////////////////////// +// Texture constructor +OpenGLTextTexture::OpenGLTextTexture() { +} + + +////////////////////// +// Texture destructor +OpenGLTextTexture::~OpenGLTextTexture() { +} + + +////////////////////////// +// Can fit a glyph in it? +bool OpenGLTextTexture::CanFit(int w,int h) { + return true; +} + + +//////////////////////// +// Insert a glyph in it +void OpenGLTextTexture::Insert(OpenGLTextGlyph glyph) { +} + diff --git a/aegisub/gl_text.h b/aegisub/gl_text.h new file mode 100644 index 000000000..bf2cbd63a --- /dev/null +++ b/aegisub/gl_text.h @@ -0,0 +1,96 @@ +// Copyright (c) 2007, Rodrigo Braz Monteiro +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are met: +// +// * Redistributions of source code must retain the above copyright notice, +// this list of conditions and the following disclaimer. +// * 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. +// * Neither the name of the Aegisub Group nor the names of its contributors +// may be used to endorse or promote products derived from this software +// without specific prior written permission. +// +// 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 COPYRIGHT OWNER 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. +// +// ----------------------------------------------------------------------------- +// +// AEGISUB +// +// Website: http://aegisub.cellosoft.com +// Contact: mailto:zeratul@cellosoft.com +// + +#pragma once + +/////////// +// Headers +#include +#include +#include +#include + + +///////////////////// +// Glyph information +class OpenGLTextGlyph { +public: + int tex; + float x,y,w,h; +}; + +typedef std::map glyphMap; + + +/////////////// +// Texture map +class OpenGLTextTexture { +public: + GLuint tex; + + bool CanFit(int w,int h); + void Insert(OpenGLTextGlyph glyph); + + OpenGLTextTexture(); + ~OpenGLTextTexture(); +}; + + +///////////////////////////// +// OpenGL Text Drawing class +class OpenGLText { +private: + float r,g,b,a; + static OpenGLText* instance; + + glyphMap glyphs; + std::vector textures; + + OpenGLText(); + ~OpenGLText(); + + OpenGLTextGlyph GetGlyph(int i); + OpenGLTextGlyph CreateGlyph(int i); + + static OpenGLText* GetInstance(); + void DoSetFont(wxString face,int size); + void DoSetColour(wxColour col,float alpha); + void DoPrint(wxString text,int x,int y); + +public: + static void SetFont(wxString face,int size) { GetInstance()->DoSetFont(face,size); } + static void SetColour(wxColour col,float alpha=1.0f) { GetInstance()->DoSetColour(col,alpha); } + static void Print(wxString text,int x,int y) { GetInstance()->DoPrint(text,x,y); } +};