GLPCTexture.h

Go to the documentation of this file.
00001 //# GLPCTexture.h:      Holds data for displaying images as textures.
00002 //# Copyright (C) 2001
00003 //# Associated Universities, Inc. Washington DC, USA.
00004 //#
00005 //# This library is free software; you can redistribute it and/or modify it
00006 //# under the terms of the GNU Library General Public License as published by
00007 //# the Free Software Foundation; either version 2 of the License, or (at your
00008 //# option) any later version.
00009 //#
00010 //# This library is distributed in the hope that it will be useful, but WITHOUT
00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00012 //# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
00013 //# License for more details.
00014 //#
00015 //# You should have received a copy of the GNU Library General Public License
00016 //# along with this library; if not, write to the Free Software Foundation,
00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
00018 //#
00019 //# Correspondence concerning AIPS++ should be addressed as follows:
00020 //#        Internet email: aips2-request@nrao.edu.
00021 //#        Postal address: AIPS++ Project Office
00022 //#                        National Radio Astronomy Observatory
00023 //#                        520 Edgemont Road
00024 //#                        Charlottesville, VA 22903-2475 USA
00025 //#
00026 //# $Id$
00027 
00028 #ifndef TRIALDISPLAY_GLPCTEXTURE_H
00029 #define TRIALDISPLAY_GLPCTEXTURE_H
00030 
00031 #include <graphics/X11/X_enter.h>
00032 #include <GL/gl.h>
00033 #include <X11/Xlib.h>
00034 #include <X11/Intrinsic.h>
00035 #include <graphics/X11/X_exit.h>
00036 #include <casa/aips.h>
00037 #include <display/Display/GLPCDisplayList.h>
00038 
00039 namespace casa { //# NAMESPACE CASA - BEGIN
00040 
00041 // <summary>
00042 // Holds parameters for setting glTexParameteri variables.
00043 // </summary>
00044 // <visibility=local>
00045 // <synopsis>
00046 // Holds parameters for setting glTexParameteri variables. See the man
00047 // page for glTexParameteri for description. This class is not needed
00048 // unless the caller wishes to change the defaults for a textured image.
00049 // maxtexturesize is used to specify the maximum texture size used for
00050 // an image. The value used will be the smallest power of 2 that
00051 // is >= maxtexturesize. By default, the display hosts' maximum texture
00052 // size will be used. Again, this isn't normally changed.
00053 // GLPCTextureParams may be deleted after GLPCTexturedImage is created.
00054         class GLPCTextureParams {
00055         public:
00056                 GLPCTextureParams();
00057                 GLPCTextureParams(const GLPCTextureParams &);
00058                 GLPCTextureParams(const GLPCTextureParams *);
00059                 void copy(const GLPCTextureParams &p);
00060                 ~GLPCTextureParams();
00061                 // Set min/mag filters. If magFilter is 0, use min Filter.
00062                 void filter(GLint minFilter, GLint magFilter=0);
00063                 // Set wrap parameters. If wrapT is 0, use wrapS.
00064                 void wrap(GLint wrapS, GLint wrapT=0);
00065 
00066                 // Set value to use for max texture size. Value will be rounded
00067                 // up to a power of 2 >= maxTextureSize.
00068                 void maxTextureSize(GLint maxtexturesize);
00069                 void format(GLenum fmt);
00070 
00071                 // For glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode);
00072                 void environMode(GLenum mode);
00073         public:
00074                 // glTexParameteri(GL_TEXTURE_2D, x, y).
00075                 GLint   min_filter_;    // GL_TEXTURE_MIN_FILTER
00076                 GLint   mag_filter_;    // GL_TEXTURE_MAG_FILTER
00077                 GLint   wrap_s_;        // GL_TEXTURE_WRAP_S
00078                 GLint   wrap_t_;        // GL_TEXTURE_WRAP_T
00079 
00080                 // Maximum texture size to use. Default is host's max texture size.
00081                 GLuint  maxtexturesize_;
00082                 GLenum  envmode_;       // GL_DECAL, GL_BLEND or GL_MODULATE.
00083                 GLenum  format_;        // GL_RGB or GL_COLOR_INDEX.
00084         private:
00085                 void init();
00086         };
00087 
00088         class GLPCTextureObject;
00089 
00090 // <prerequisite>
00091 // <li> <linkto class="GLPCDisplayListEntry">GLPCDisplayListEntry</linkto>
00092 // </prerequisite>
00093 // <synopsis>
00094 // GLPCTexturedImage is used to convert an image to texture objects for
00095 // display. The pixels array contains pixels stored as RGB triples.
00096 // This class is typically only used by
00097 // <linkto class="GLPixelCanvas">GLPixelCanvas</linkto>
00098 // If the image is larger than the maximum texture size, it will be broken
00099 // into pieces that fit.
00100 // </synopsis>
00101 //<thrown><li> AipsError </thrown>
00102         class GLPCTexturedImage : public GLPCDisplayListEntry {
00103         public:
00104                 GLPCTexturedImage(GLsizei width, GLsizei height,
00105                                   const GLushort *pixels,
00106                                   const GLPCTextureParams* = NULL);
00107                 ~GLPCTexturedImage();
00108                 void draw();    // Draw image using current values.
00109                 // Draw image and save values for later.
00110                 void draw(GLfloat x, GLfloat y, GLfloat z=0.0,
00111                           GLfloat xscale=1.0, GLfloat yscale=1.0);
00112 
00113                 void envmode(GLenum mode);
00114                 GLenum envmode()const {
00115                         return params_->envmode_;
00116                 }
00117                 GLPCTextureParams *params()const {
00118                         return params_;
00119                 }
00120         private:
00121                 void createTextures(GLsizei dWidth, GLsizei dHeight);
00122                 void storeImage(GLsizei dWidth, GLsizei dHeight,
00123                                 const GLushort *pixels);
00124                 int     ntx_, nty_;
00125                 int     numTextures_;           // ntx_*nty_;
00126                 GLPCTextureObject **textures_;  // numtexures entries.
00127                 GLfloat x_, y_, z_;
00128                 GLfloat xscale_, yscale_;
00129                 GLsizei dWidth_, dHeight_;
00130                 GLPCTextureParams *params_;
00131                 GLint   maxTextureSize_;
00132         };
00133 
00134 
00135 } //# NAMESPACE CASA - END
00136 
00137 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines

Generated on 31 Aug 2016 for casa by  doxygen 1.6.1