Exemplo n.º 1
0
// 최초 draw전에 호출되서 새화면이 백버퍼에 그려져 있다고 가정함
BOOL XOverlap::Create( void )
{
	if( XE::IsEmpty( m_szImgTo ) )		// 이미지파일이 없으면 이전화면 프레임버퍼에서 새화면 프레임버퍼로 오버랩되는것이다.
		SetpSurface2( GRAPHICS->CreateScreenToSurface( GetbHighReso() ) );	// to	현재 백버퍼에 새화면이 그려져있어야 한다
	else
		SetpSurface2( IMAGE_MNG->Load( /*GetbHighReso(), */m_szImgTo ) );	
	return 1;
}
Exemplo n.º 2
0
// 이전화면과 현재화면을 오버랩시킴
XOverlap::XOverlap( BOOL bHighReso, float fSec ) 
	: XTransition( bHighReso, fSec, TRUE )
{ 
	Init(); 
	SetpSurface1( GRAPHICS->s_pLastBackBuffer );		// from 이전화면을 XGraphics로부터 받아온다
	if( GetpSurface1() == NULL )		// 최초로 띄워지는 씬이 오버랩으로 시작한다면 캡쳐해놓은게 없을거다. 그럼 현재 백버퍼를 그냥 캡쳐함
		SetpSurface1( GRAPHICS->CreateScreenToSurface( GetbHighReso() ) );
	GRAPHICS->s_pLastBackBuffer = NULL;				// 포인터를 옮겨옴
}
Exemplo n.º 3
0
BOOL XSurfaceOpenGL::CreatePNG( LPCTSTR szFilename, BOOL bSrcKeep )
{
//	g_Pool.AllocMark(5);
    XImage<DWORD> *pImage = new XImageiOS<DWORD>( GetbHighReso() );
    pImage->Load( szFilename );

    // 빈 텍스쳐 만듬.
    SetSrcImg( NULL, pImage->GetMemWidth(), pImage->GetMemHeight() );
    int memw = GetMemWidth();
    int memh = GetMemHeight();
//	m_nWidth = pImage->GetWidth();
//	m_nHeight = pImage->GetHeight();
    // w,h값을 2^단위로 정렬한다.
    GLsizei alignedW = pImage->GetMemWidth();
    GLsizei alignedH = pImage->GetMemHeight();
    GRAPHICS->AlignPowSize( &alignedW, &alignedH );
    m_nAlignedWidth = alignedW;
    m_nAlignedHeight = alignedH;

    // 정렬된 크기로 버텍스버퍼생성.
    CreateVertexBuffer( GetWidth(), GetHeight(), 0, 0, memw, memh, alignedW, alignedH );

    glGenTextures( 1, &m_textureID );
    XBREAK( m_textureID == 0 );
    glBindTexture(GL_TEXTURE_2D, m_textureID );
    if( m_textureID == 0 )
    {
        XERROR( "memw:%d memh:%d", GetMemWidth(), GetMemHeight() );
        return FALSE;
    }
    // gl텍스쳐로 쓰기 위해 크기를 정렬한다
    {
//		g_Pool.AllocMark(4);
        DWORD *temp, *_temp, *src;
        temp = _temp = new DWORD[ alignedW * alignedH ];
        memset( temp, 0, alignedW * alignedH * sizeof(DWORD) );
        int i, j;
        src = pImage->GetTextureData();
        for( i = 0; i < memh; i ++ )
        {
            for( j = 0; j < memw; j ++ )
            {
                *_temp++ = *src++;
            }
            _temp += (alignedW - memw);
        }
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
        glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
        glTexImage2D(GL_TEXTURE_2D,
                     0,
                     GL_RGBA,
                     alignedW,
                     alignedH,
                     0,
                     GL_RGBA,
                     GL_UNSIGNED_BYTE,
                     temp );
        SAFE_DELETE( temp );
//		g_Pool.RestoreMark(4);
    }
    // 클래스내 보관용 이미지를 가져옴
    if( bSrcKeep )
    {
        DWORD *pSrcImg;
        pImage->MovePtr( &pSrcImg );    // Image메모리 소유권을 가져온다
        SetSrcImg( pSrcImg, memw, memh );
    }
    SAFE_DELETE( pImage );
//	g_Pool.RestoreMark(5);
    /*	if( bSrcKeep == FALSE ) {
    		SAFE_DELETE( temp );
    	}
    	else
    		m_pSrcImg = temp; */
    return TRUE;
}
Exemplo n.º 4
0
BOOL XSlideInOut::Create( void )
{
	// 스크린에서 픽셀얻어오는건 반드시 Create()에서 해야한다. 오버랩같은건 씬을 한번 그리고 다음턴에서 그화면을 얻어와야 하기때문에 생성자에서 스크린픽셀을 잡으면 안되기 때문이다
	GRAPHICS->ScreenToSurface( GetbHighReso(), GetpSurface2() );
	return 1;
}