Main Page   Modules   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

gmanager.cpp

Go to the documentation of this file.
00001 /*           Copyright (C) 2001 Sony Computer Entertainment America
00002                               All Rights Reserved
00003                                SCEA Confidential                                */
00004 
00005 #include <stdio.h>
00006 
00007 #include "GL/ps2gl.h"
00008 
00009 #include "ps2s/packet.h"
00010 #include "ps2s/cpu_matrix.h"
00011 #include "ps2s/math.h"
00012 #include "ps2s/displayenv.h"
00013 
00014 #include "ps2gl/gmanager.h"
00015 #include "ps2gl/glcontext.h"
00016 #include "ps2gl/dlist.h"
00017 #include "ps2gl/clear.h"
00018 #include "ps2gl/matrix.h"
00019 #include "ps2gl/debug.h"
00020 
00021 /********************************************
00022  * class CVertArray
00023  */
00024 
00025 CVertArray::CVertArray()
00026 {
00027    Vertices = Normals = TexCoords = Colors = NULL;
00028    VerticesAreValid = NormalsAreValid = TexCoordsAreValid = ColorsAreValid = false;
00029    WordsPerVertex = WordsPerTexCoord = WordsPerColor = 0;
00030    WordsPerNormal = 3; // not set by NormalPointer
00031 }
00032 
00033 /********************************************
00034  * class CGeomManager
00035  */
00036 
00037 // static members
00038 
00039 CVertArray      *CGeomManager::VertArray;
00040 
00041 bool            CGeomManager::DoNormalize = false;
00042 
00043 CGeomManager::CGeomManager( CGLContext &context )
00044    : GLContext(context),
00045      CurNormal(0.0f, 0.0f, 0.0f),
00046      Vu1Prim(GL_INVALID_VALUE),
00047      InsideBeginEnd(false)
00048 {
00049 }
00050 
00051 /********************************************
00052  * gl api
00053  */
00054 
00073 void glVertexPointer( GLint size, GLenum type,
00074                       GLsizei stride, const GLvoid *ptr )
00075 {
00076    if ( stride != 0 ) {
00077       mNotImplemented( "stride must be 0" );
00078       return;
00079    }
00080    if ( type != GL_FLOAT ) {
00081       mNotImplemented( "type must be float" );
00082       return;
00083    }
00084    
00085    CVertArray &vertArray = pGLContext->GetGeomManager().GetVertArray();
00086    vertArray.SetVertices( (void*)ptr );
00087    vertArray.SetWordsPerVertex( size );
00088 }
00089 
00095 void glNormalPointer( GLenum type, GLsizei stride,
00096                       const GLvoid *ptr )
00097 {
00098    pglNormalPointer( 3, type, stride, ptr );
00099 }
00100 
00107 void glTexCoordPointer( GLint size, GLenum type,
00108                         GLsizei stride, const GLvoid *ptr )
00109 {
00110    if ( stride != 0 ) {
00111       mNotImplemented( "stride must be 0" );
00112       return;
00113    }
00114    if ( type != GL_FLOAT ) {
00115       mNotImplemented( "type must be float" );
00116       return;
00117    }
00118    
00119    CVertArray &vertArray = pGLContext->GetGeomManager().GetVertArray();
00120    vertArray.SetTexCoords( (void*)ptr );
00121    vertArray.SetWordsPerTexCoord( size );
00122 }
00123 
00130 void glColorPointer( GLint size, GLenum type,
00131                      GLsizei stride, const GLvoid *ptr )
00132 {
00133    if ( stride != 0 ) {
00134       mNotImplemented( "stride must be 0" );
00135       return;
00136    }
00137    if ( type != GL_FLOAT ) {
00138       mNotImplemented( "type must be float" );
00139       return;
00140    }
00141    
00142    CVertArray &vertArray = pGLContext->GetGeomManager().GetVertArray();
00143    vertArray.SetColors( (void*)ptr );
00144    vertArray.SetWordsPerColor( size );
00145 }
00146 
00158 void glDrawArrays( GLenum mode, GLint first, GLsizei count )
00159 {
00160    CGeomManager& gmanager = pGLContext->GetGeomManager();
00161    gmanager.DrawArrays( mode, first, count );
00162 }
00163 
00167 void glFlush( void )
00168 {
00169    CGeomManager& gmanager = pGLContext->GetGeomManager();
00170    gmanager.Flush();
00171 }
00172  // gl_api
00174 
00175 void glEnableClientState( GLenum cap )
00176 {
00177    CGeomManager& gmanager = pGLContext->GetGeomManager();
00178    CVertArray &vertArray = gmanager.GetVertArray();
00179 
00180    switch (cap) {
00181       case GL_NORMAL_ARRAY: vertArray.SetNormalsValid(true); break;
00182       case GL_VERTEX_ARRAY: vertArray.SetVerticesValid(true); break;
00183       case GL_COLOR_ARRAY: vertArray.SetColorsValid(true); break;
00184       case GL_TEXTURE_COORD_ARRAY: vertArray.SetTexCoordsValid(true); break;
00185 
00186       case GL_INDEX_ARRAY:
00187       case GL_EDGE_FLAG_ARRAY:
00188          mNotImplemented( "capability = %d", cap );
00189          break;
00190    }
00191 }
00192 
00193 void glDisableClientState( GLenum cap )
00194 {
00195    CGeomManager &gmanager = pGLContext->GetGeomManager();
00196    CVertArray &vertArray = gmanager.GetVertArray();
00197 
00198    switch (cap) {
00199       case GL_NORMAL_ARRAY: vertArray.SetNormalsValid(false); break;
00200       case GL_VERTEX_ARRAY: vertArray.SetVerticesValid(false); break;
00201       case GL_COLOR_ARRAY: vertArray.SetColorsValid(false); break;
00202       case GL_TEXTURE_COORD_ARRAY: vertArray.SetTexCoordsValid(false); break;
00203 
00204       case GL_INDEX_ARRAY:
00205       case GL_EDGE_FLAG_ARRAY:
00206          mNotImplemented( "capability = %d", cap );
00207          break;
00208    }
00209 }
00210 
00211 
00212 
00213 void glBegin( GLenum mode )
00214 {
00215    CGeomManager& gmanager = pGLContext->GetGeomManager();
00216    gmanager.BeginGeom( mode );
00217 }
00218 
00219 void glNormal3f( GLfloat x, GLfloat y, GLfloat z )
00220 {
00221    CGeomManager& gmanager = pGLContext->GetGeomManager();
00222    gmanager.Normal( cpu_vec_xyz(x, y, z) );
00223 }
00224 
00225 void glNormal3fv( const GLfloat *v )
00226 {
00227    glNormal3f( v[0], v[1], v[2] );
00228 }
00229 
00230 void glVertex4f( GLfloat x, GLfloat y, GLfloat z, GLfloat w )
00231 {
00232    CGeomManager &gmanager = pGLContext->GetGeomManager();
00233    gmanager.Vertex( cpu_vec_xyzw(x, y, z, w) );
00234 }
00235 
00236 void glVertex4fv( const GLfloat *vertex )
00237 {
00238    glVertex4f( vertex[0], vertex[1], vertex[2], vertex[3] );
00239 }
00240 
00241 void glVertex3f( GLfloat x, GLfloat y, GLfloat z )
00242 {
00243    glVertex4f(x, y, z, 1.0f);
00244 }
00245 
00246 void glVertex3fv( const GLfloat *vertex )
00247 {
00248    glVertex4f( vertex[0], vertex[1], vertex[2], 1.0f );
00249 }
00250 
00251 void glTexCoord2f( GLfloat u, GLfloat v )
00252 {
00253    CGeomManager &gmanager = pGLContext->GetGeomManager();
00254    gmanager.TexCoord( u, v );
00255 }
00256 
00257 void glTexCoord2fv( const GLfloat *texCoord )
00258 {
00259    glTexCoord2f( texCoord[0], texCoord[1] );
00260 }
00261 
00262 void glColor3f( GLfloat red, GLfloat green, GLfloat blue )
00263 {
00264    CGeomManager &gmanager = pGLContext->GetGeomManager();
00265    gmanager.Color( cpu_vec_xyzw(red, green, blue, 1.0f) );
00266 }
00267 
00268 void glEnd( void )
00269 {
00270    CGeomManager &gmanager = pGLContext->GetGeomManager();
00271    gmanager.EndGeom();
00272 }
00273 
00274 /********************************************
00275  * pgl api
00276  */
00277 
00285 void pglNormalPointer( GLint size, GLenum type,
00286                        GLsizei stride, const GLvoid *ptr )
00287 {
00288    if ( stride != 0 ) {
00289       mNotImplemented( "stride must be 0" );
00290       return;
00291    }
00292    if ( type != GL_FLOAT ) {
00293       mNotImplemented( "type must be float" );
00294       return;
00295    }
00296    
00297    CVertArray &vertArray = pGLContext->GetGeomManager().GetVertArray();
00298    vertArray.SetNormals( (void*)ptr );
00299    vertArray.SetWordsPerNormal(size);
00300 }

ps2gl version 0.2