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); }
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; }
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);} );
// =========================================================================== 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; }