00001 #include "ps2s/displayenv.h"
00002
00003 #include "GL/ps2gl.h"
00004
00005 #include "ps2gl/displaycontext.h"
00006 #include "ps2gl/dlist.h"
00007
00008 CDisplayContext::CDisplayContext( CGLContext &context )
00009 : GLContext(context),
00010 Frame0Mem(NULL), Frame1Mem(NULL),
00011 CurFrameMem(NULL), LastFrameMem(NULL),
00012 DisplayEnv(NULL),
00013 DisplayIsDblBuffered(true)
00014 {
00015 DisplayEnv = new GS::CDisplayEnv;
00016
00017 }
00018
00019 CDisplayContext::~CDisplayContext()
00020 {
00021
00022
00023
00024 delete DisplayEnv;
00025 }
00026
00027 void
00028 CDisplayContext::SetDisplayBuffers( GS::CMemArea *frame0Mem, GS::CMemArea *frame1Mem )
00029 {
00030 Frame0Mem = frame0Mem;
00031 Frame1Mem = frame1Mem;
00032
00033 DisplayIsDblBuffered = ( frame0Mem && frame1Mem );
00034
00035
00036
00037
00038 CurFrameMem = Frame0Mem;
00039 LastFrameMem = Frame1Mem;
00040
00041 int width = frame0Mem->GetWidth(), height = frame0Mem->GetHeight();
00042
00043 DisplayEnv->SetFB2( frame0Mem->GetWordAddr(), width );
00044 DisplayEnv->SetDisplay2( width, height * 2 );
00045 DisplayEnv->SendSettings();
00046 }
00047
00048 void
00049 CDisplayContext::SwapBuffers()
00050 {
00051
00052 if ( DisplayIsDblBuffered ) {
00053 GS::CMemArea* temp = CurFrameMem;
00054 CurFrameMem = LastFrameMem;
00055 LastFrameMem = temp;
00056
00057
00058
00059
00060 DisplayEnv->SetFB2Addr( CurFrameMem->GetWordAddr() );
00061 DisplayEnv->SendSettings();
00062 }
00063 }
00064
00065
00066
00067
00068
00079 void
00080 pglSetDisplayBuffers( pgl_area_handle_t frame0_mem, pgl_area_handle_t frame1_mem )
00081 {
00082 pGLContext->GetDisplayContext().SetDisplayBuffers( reinterpret_cast<GS::CMemArea*>(frame0_mem),
00083 reinterpret_cast<GS::CMemArea*>(frame1_mem) );
00084 }
00085
00087
00088
00089
00090
00091
00092 void glViewport( GLint x, GLint y,
00093 GLsizei width, GLsizei height )
00094 {
00095 mNotImplemented( );
00096 }
00097