X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=source%2Frice_gles%2Fsrc%2FFrameBuffer.h;fp=source%2Frice_gles%2Fsrc%2FFrameBuffer.h;h=1d796e9ee62262dd63591745838e8862ceced198;hb=d07c171fa694cae985ad7045f9ce2b2f1a5699b4;hp=0000000000000000000000000000000000000000;hpb=ca22e7b76883b946060a6b40bb8709c1981e1cf6;p=mupen64plus-pandora.git diff --git a/source/rice_gles/src/FrameBuffer.h b/source/rice_gles/src/FrameBuffer.h new file mode 100644 index 0000000..1d796e9 --- /dev/null +++ b/source/rice_gles/src/FrameBuffer.h @@ -0,0 +1,146 @@ +/* +Copyright (C) 2002 Rice1964 + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +*/ + +#ifndef _FRAME_BUFFER_H_ +#define _FRAME_BUFFER_H_ + +#include "typedefs.h" +#include "RenderTexture.h" +#include "TextureManager.h" + +typedef int SURFFORMAT; + +extern void TexRectToN64FrameBuffer_16b(uint32 x0, uint32 y0, uint32 width, uint32 height, uint32 dwTile); +extern void TexRectToFrameBuffer_8b(uint32 dwXL, uint32 dwYL, uint32 dwXH, uint32 dwYH, float t0u0, float t0v0, float t0u1, float t0v1, uint32 dwTile); + +class FrameBufferManager +{ + friend class CGraphicsContext; + friend class CDXGraphicsContext; +public: + FrameBufferManager(); + virtual ~FrameBufferManager(); + + void Initialize(); + void CloseUp(); + void Set_CI_addr(SetImgInfo &newCI); + void UpdateRecentCIAddr(SetImgInfo &ciinfo); + void SetAddrBeDisplayed(uint32 addr); + bool HasAddrBeenDisplayed(uint32 addr, uint32 width); + int FindRecentCIInfoIndex(uint32 addr); + bool IsDIaRenderTexture(); + + int CheckAddrInRenderTextures(uint32 addr, bool checkcrc = true); + uint32 ComputeRenderTextureCRCInRDRAM(int infoIdx); + void CheckRenderTextureCRCInRDRAM(void); + int CheckRenderTexturesWithNewCI(SetImgInfo &CIinfo, uint32 height, bool byNewTxtrBuf); + virtual void ClearN64FrameBufferToBlack(uint32 left=0, uint32 top=0, uint32 width=0, uint32 height=0); + virtual int SetBackBufferAsRenderTexture(SetImgInfo &CIinfo, int ciInfoIdx); + void LoadTextureFromRenderTexture(TxtrCacheEntry* pEntry, int infoIdx); + void UpdateFrameBufferBeforeUpdateFrame(); + virtual void RestoreNormalBackBuffer(); // restore the normal back buffer + virtual void CopyBackToFrameBufferIfReadByCPU(uint32 addr); + virtual void SetRenderTexture(void); + virtual void CloseRenderTexture(bool toSave); + virtual void ActiveTextureBuffer(void); + + int IsAddrInRecentFrameBuffers(uint32 addr); + int CheckAddrInBackBuffers(uint32 addr, uint32 memsize, bool copyToRDRAM = false); + + uint8 CIFindIndex(uint16 val); + uint32 ComputeCImgHeight(SetImgInfo &info, uint32 &height); + + int FindASlot(void); + + bool ProcessFrameWriteRecord(); + void FrameBufferWriteByCPU(uint32 addr, uint32 size); + void FrameBufferReadByCPU( uint32 addr ); + bool FrameBufferInRDRAMCheckCRC(); + void StoreRenderTextureToRDRAM(int infoIdx = -1); + + virtual bool IsRenderingToTexture() {return m_isRenderingToTexture;} + + // Device dependent functions + virtual void SaveBackBuffer(int ciInfoIdx, RECT* pRect=NULL, bool forceToSaveToRDRAM = false); // Copy the current back buffer to temp buffer + virtual void CopyBackBufferToRenderTexture(int idx, RecentCIInfo &ciInfo, RECT* pRect=NULL) {} // Copy the current back buffer to temp buffer + virtual void CopyBufferToRDRAM(uint32 addr, uint32 fmt, uint32 siz, uint32 width, + uint32 height, uint32 bufWidth, uint32 bufHeight, uint32 startaddr, + uint32 memsize, uint32 pitch, TextureFmt bufFmt, void *surf, uint32 bufPitch); + virtual void StoreBackBufferToRDRAM(uint32 addr, uint32 fmt, uint32 siz, uint32 width, + uint32 height, uint32 bufWidth, uint32 bufHeight, uint32 startaddr=0xFFFFFFFF, + uint32 memsize=0xFFFFFFFF, uint32 pitch=0, SURFFORMAT surf_fmt=SURFFMT_A8R8G8B8) {} +#ifdef DEBUGGER + virtual void DisplayRenderTexture(int infoIdx = -1); +#endif + +protected: + bool m_isRenderingToTexture; + int m_curRenderTextureIndex; + int m_lastTextureBufferIndex; +}; + +class DXFrameBufferManager : public FrameBufferManager +{ + virtual ~DXFrameBufferManager() {} + +public: + // Device dependent functions + virtual void CopyBackBufferToRenderTexture(int idx, RecentCIInfo &ciInfo, RECT* pRect=NULL); // Copy the current back buffer to temp buffer + virtual void StoreBackBufferToRDRAM(uint32 addr, uint32 fmt, uint32 siz, uint32 width, + uint32 height, uint32 bufWidth, uint32 bufHeight, uint32 startaddr=0xFFFFFFFF, + uint32 memsize=0xFFFFFFFF, uint32 pitch=0, SURFFORMAT surf_fmt=SURFFMT_A8R8G8B8); +}; + +class OGLFrameBufferManager : public FrameBufferManager +{ + virtual ~OGLFrameBufferManager() {} + +public: + // Device dependent functions + virtual void CopyBackBufferToRenderTexture(int idx, RecentCIInfo &ciInfo, RECT* pRect=NULL); // Copy the current back buffer to temp buffer + virtual void StoreBackBufferToRDRAM(uint32 addr, uint32 fmt, uint32 siz, uint32 width, + uint32 height, uint32 bufWidth, uint32 bufHeight, uint32 startaddr=0xFFFFFFFF, + uint32 memsize=0xFFFFFFFF, uint32 pitch=0, SURFFORMAT surf_fmt=SURFFMT_A8R8G8B8); +}; + +extern RenderTextureInfo gRenderTextureInfos[]; +extern RenderTextureInfo newRenderTextureInfo; + +#define NEW_TEXTURE_BUFFER + +extern RenderTextureInfo g_ZI_saves[2]; +extern RenderTextureInfo *g_pRenderTextureInfo; + + +extern FrameBufferManager* g_pFrameBufferManager; + +extern RecentCIInfo g_RecentCIInfo[]; +extern RecentViOriginInfo g_RecentVIOriginInfo[]; +extern RenderTextureInfo gRenderTextureInfos[]; +extern int numOfTxtBufInfos; +extern RecentCIInfo *g_uRecentCIInfoPtrs[5]; +extern uint8 RevTlutTable[0x10000]; + +extern uint32 CalculateRDRAMCRC(void *pAddr, uint32 left, uint32 top, uint32 width, uint32 height, uint32 size, uint32 pitchInBytes ); +extern uint16 ConvertRGBATo555(uint8 r, uint8 g, uint8 b, uint8 a); +extern uint16 ConvertRGBATo555(uint32 color32); +extern void InitTlutReverseLookup(void); + +#endif +