void D3D9RenderTargetTexture::RenderStringToBmp(const D3D9Font &Font, const String &Text, const Rectangle2i &Region, RGBColor FontColor, RGBColor BackgroundColor, Bitmap &Bmp)
{
    D3D9ProtectRenderTarget Protection(_Device, true, true);

    SetAsRenderTarget();
    _Device->Clear(0, NULL, D3DCLEAR_ZBUFFER | D3DCLEAR_TARGET, D3DCOLOR_ARGB(BackgroundColor.a, BackgroundColor.r, BackgroundColor.g, BackgroundColor.b), 1.0f, 0 );
    Font.DrawString(Text, Vec2f(Region.Min), float(Region.Width()), FontColor);
    GetData(Bmp);
}
Esempio n. 2
0
CGXRenderTexture::~CGXRenderTexture()
{
	if( m_beingRendered )
	{
		g_pFrameBufferManager->CloseRenderTexture(false);
		SetAsRenderTarget(false);
	}

	SAFE_DELETE(m_pTexture);

	m_beingRendered = false;
}
COGLRenderTexture::~COGLRenderTexture()
{
    if( m_beingRendered )
    {
        g_pFrameBufferManager->CloseRenderTexture(false);
        SetAsRenderTarget(false);
    }

    ShutdownPBuffer();
    SAFE_DELETE(m_pTexture);
    m_pOGLTexture = NULL;
    m_beingRendered = false;
}
Esempio n. 4
0
void CGXRenderTexture::LoadTexture(TxtrCacheEntry* pEntry)
{
#if 0
	//This function copies the current color buffer (m_pTexture for this RenderTexture) to pEntry->pTexture
	bool IsBeingRendered = m_beingRendered;
	if( IsBeingRendered )
	{
		TXTRBUF_DUMP(TRACE0("Warning, loading from render_texture while it is being rendered"));

		SetAsRenderTarget(false);
		//return;
	}

	CTexture *pSurf = pEntry->pTexture;
	TxtrInfo &ti = pEntry->ti;

	// Need to load texture from the saved back buffer

	MYLPDIRECT3DTEXTURE pNewTexture = MYLPDIRECT3DTEXTURE(pSurf->GetTexture());
	MYLPDIRECT3DSURFACE pNewSurface = NULL;
	HRESULT res = pNewTexture->GetSurfaceLevel(0,&pNewSurface);
	MYLPDIRECT3DSURFACE pSourceSurface = NULL;
	(MYLPDIRECT3DTEXTURE(m_pTexture->GetTexture()))->GetSurfaceLevel(0,&pSourceSurface);

	int left = (pEntry->ti.Address- m_pInfo->CI_Info.dwAddr )%m_pInfo->CI_Info.bpl + pEntry->ti.LeftToLoad;
	int top = (pEntry->ti.Address- m_pInfo->CI_Info.dwAddr)/m_pInfo->CI_Info.bpl + pEntry->ti.TopToLoad;
	RECT srcrect = {uint32(left*m_pInfo->scaleX) ,uint32(top*m_pInfo->scaleY), 
		uint32(min(m_width, left+(int)ti.WidthToLoad)*m_pInfo->scaleX), 
		uint32(min(m_height,top+(int)ti.HeightToLoad)*m_pInfo->scaleY) };

	if( pNewSurface != NULL && pSourceSurface != NULL )
	{
		if( left < m_width && top<m_height )
		{
			RECT dstrect = {0,0,ti.WidthToLoad,ti.HeightToLoad};
			HRESULT res = D3DXLoadSurfaceFromSurface(pNewSurface,NULL,&dstrect,pSourceSurface,NULL,&srcrect,D3DX_FILTER_POINT ,0xFF000000);
			DEBUGGER_IF_DUMP(( res != S_OK), {DebuggerAppendMsg("Error to reload texture from render_texture, res=%x", res);} );
Esempio n. 5
0
// ===========================================================================
COGLRenderTexture::COGLRenderTexture(int width, int height, RenderTextureInfo* pInfo, TextureUsage usage)
    :   CRenderTexture(width, height, pInfo, usage),
#ifndef XENON
        m_pOGLTexture(NULL)
#else
        m_pxeTexture(NULL)
#endif
{
    if( usage == AS_BACK_BUFFER_SAVE )
    {
#ifndef XENON
        m_pTexture = m_pOGLTexture = new COGLTexture(width, height, usage);
#else
        m_pTexture = m_pxeTexture = new CxeTexture(width, height, usage);
#endif		
        if( !m_pTexture )
        {
            TRACE0("Error to create OGL render_texture");
            SAFE_DELETE(m_pTexture);
        }
    }

    m_width = width;
    m_height = height;
    m_beingRendered = false;
}

COGLRenderTexture::~COGLRenderTexture()
{
    if( m_beingRendered )
    {
        g_pFrameBufferManager->CloseRenderTexture(false);
        SetAsRenderTarget(false);
    }

    ShutdownPBuffer();
    SAFE_DELETE(m_pTexture);
#ifndef XENON
    m_pOGLTexture = NULL;
#else
    m_pxeTexture = NULL;
#endif
    m_beingRendered = false;
}

bool COGLRenderTexture::InitPBuffer( void )
{
    return true;
}

void COGLRenderTexture::ShutdownPBuffer(void)
{
}

bool COGLRenderTexture::SetAsRenderTarget(bool enable)
{
   return true;
}

void COGLRenderTexture::LoadTexture(TxtrCacheEntry* pEntry)
{
}

void COGLRenderTexture::StoreToRDRAM(int infoIdx)
{
}

#if 0//def __GX__
CGXRenderTexture::CGXRenderTexture(int width, int height, RenderTextureInfo* pInfo, TextureUsage usage)
: CRenderTexture(width, height, pInfo, usage)
{
//	m_pTexture = new CDirectXTexture(width, height, usage);
	m_pTexture = new COGLTexture(width, height, usage);
	if( m_pTexture )
	{
		m_width = width;
		m_height = height;
	}
	else
	{
		TRACE0("Error to create DX render_texture");
		SAFE_DELETE(m_pTexture);
	}

	m_pColorBufferSave = NULL;
	m_pDepthBufferSave = NULL;
	m_beingRendered = false;
}