00001
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
00028
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
00044
00045
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,
00058 frame0Mem->GetPixFormat() );
00059 DisplayEnv->SetFB2( frame0Mem->GetWordAddr(), width,
00060 0, 0,
00061 frame0Mem->GetPixFormat() );
00062
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
00074 if ( DisplayIsDblBuffered ) {
00075 GS::CMemArea* temp = CurFrameMem;
00076 CurFrameMem = LastFrameMem;
00077 LastFrameMem = temp;
00078
00079
00080
00081
00082 #ifndef PS2_LINUX
00083 DisplayEnv->SetFB2Addr( CurFrameMem->GetWordAddr() );
00084 #else
00085 DisplayEnv->SetFB1Addr( 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
00115
00116
00117 * gl api
00118 */
00119
00120 void glViewport( GLint x, GLint y,
00121 GLsizei width, GLsizei height )
00122 {
00123 mNotImplemented( );
00124 }
00125