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

displaycontext.cpp

Go to the documentation of this file.
00001 /*        Copyright (C) 2000,2001,2002  Sony Computer Entertainment America
00002           
00003           This file is subject to the terms and conditions of the GNU Lesser
00004           General Public License Version 2.1. See the file "COPYING" in the
00005           main directory of this archive for more details.                             */
00006 
00007 #include "GL/ps2gl.h"
00008 
00009 #include "ps2gl/displaycontext.h"
00010 #include "ps2gl/dlist.h"
00011 
00012 #include "ps2s/displayenv.h"
00013 
00014 CDisplayContext::CDisplayContext( CGLContext &context )
00015    : GLContext(context),
00016      Frame0Mem(NULL), Frame1Mem(NULL),
00017      CurFrameMem(NULL), LastFrameMem(NULL),
00018      DisplayEnv(NULL),
00019      DisplayIsDblBuffered(true),
00020      DisplayIsInterlaced(true)
00021 {
00022    DisplayEnv = new GS::CDisplayEnv;
00023 }
00024 
00025 CDisplayContext::~CDisplayContext()
00026 {
00027    // don't delete the frame mem areas -- they are created/destroyed by
00028    // the app
00029 
00030    delete DisplayEnv;
00031 }
00032      
00033 void
00034 CDisplayContext::SetDisplayBuffers( bool interlaced,
00035                                     GS::CMemArea *frame0Mem, GS::CMemArea *frame1Mem )
00036 {
00037    Frame0Mem = frame0Mem;
00038    Frame1Mem = frame1Mem;
00039 
00040    DisplayIsDblBuffered = ( frame0Mem && frame1Mem );
00041    DisplayIsInterlaced = interlaced;
00042 
00043    // "current" means the frame being drawn to by the loop of code executing on the core
00044    // "last" will be the frame being displayed if drawing immediately, or the frame not
00045    // displayed now if building up a packet to be sent next frame.
00046    CurFrameMem = Frame0Mem;
00047    LastFrameMem = Frame1Mem;
00048 
00049    int width = frame0Mem->GetWidth(), height = frame0Mem->GetHeight();
00050    int displayHeight = (DisplayIsInterlaced) ? height * 2 : height;
00051 
00052 #ifndef PS2_LINUX
00053    DisplayEnv->SetFB2( frame0Mem->GetWordAddr(), width, 0, 0, frame0Mem->GetPixFormat() );
00054    DisplayEnv->SetDisplay2( width, displayHeight );
00055 #else
00056    DisplayEnv->SetFB1( frame0Mem->GetWordAddr(), width,
00057                        0, 0, /* offsets in buffer */
00058                        frame0Mem->GetPixFormat() );
00059    DisplayEnv->SetFB2( frame0Mem->GetWordAddr(), width,
00060                        0, 0, /* offsets in buffer */
00061                        frame0Mem->GetPixFormat() );
00062    // DisplayEnv->SetDisplay2( width, height * 2 );
00063    DisplayEnv->SetBGColor( 0, 0, 0 );
00064    DisplayEnv->BlendUsingConstAlpha( 0x0 );
00065    DisplayEnv->SetDisplay2( width, displayHeight );
00066 #endif
00067    DisplayEnv->SendSettings();
00068 }
00069 
00070 void
00071 CDisplayContext::SwapBuffers()
00072 {
00073    // flip frame buffer ptrs
00074    if ( DisplayIsDblBuffered ) {
00075       GS::CMemArea* temp = CurFrameMem;
00076       CurFrameMem = LastFrameMem;
00077       LastFrameMem = temp;
00078 
00079       // display the last completed frame (which is frame n-2 because we're not
00080       // drawing immediately but building up a packet)
00081       // remember this is immediately sent, not delayed through a packet
00082 #ifndef PS2_LINUX
00083       DisplayEnv->SetFB2Addr( CurFrameMem->GetWordAddr() );
00084 #else
00085       DisplayEnv->SetFB2Addr( CurFrameMem->GetWordAddr() );
00086 #endif
00087       DisplayEnv->SendSettings();
00088    }
00089 }
00090 
00091 /********************************************
00092  * ps2gl C interface
00093  */
00094 
00106 void
00107 pglSetDisplayBuffers( int interlaced, pgl_area_handle_t frame0_mem, pgl_area_handle_t frame1_mem )
00108 {
00109    pGLContext->GetDisplayContext().SetDisplayBuffers( interlaced,
00110                                                       reinterpret_cast<GS::CMemArea*>(frame0_mem),
00111                                                       reinterpret_cast<GS::CMemArea*>(frame1_mem) );
00112 }
00113  // pgl_api
00115 
00116 /********************************************
00117  * gl api
00118  */
00119 
00120 void glPixelStorei( GLenum pname, int param )
00121 {
00122    mNotImplemented( );
00123 }
00124 
00125 void glReadPixels( int x, int y, int width, int height,
00126                    GLenum format, GLenum type, void *pixels )
00127 {
00128    mNotImplemented( );
00129 }
00130 
00131 void glViewport( GLint x, GLint y,
00132                        GLsizei width, GLsizei height )
00133 {
00134    mNotImplemented( );
00135 }
00136 

ps2gl version cvs