1 /* 2 Copyright (C) 2002 Rice1964 3 4 This program is free software; you can redistribute it and/or 5 modify it under the terms of the GNU General Public License 6 as published by the Free Software Foundation; either version 2 7 of the License, or (at your option) any later version. 8 9 This program is distributed in the hope that it will be useful, 10 but WITHOUT ANY WARRANTY; without even the implied warranty of 11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 GNU General Public License for more details. 13 14 You should have received a copy of the GNU General Public License 15 along with this program; if not, write to the Free Software 16 Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 17 18 */ 19 20 #ifndef _TEXTURE_BUFFER_H_ 21 #define _TEXTURE_BUFFER_H_ 22 23 #include "typedefs.h" 24 #include "TextureManager.h" 25 26 class CRenderTexture; 27 typedef struct { 28 CRenderTexture *pRenderTexture; 29 SetImgInfo CI_Info; 30 31 uint32_t bufferWidth; 32 uint32_t bufferHeight; 33 uint32_t N64Width; 34 uint32_t N64Height; 35 float scaleX; 36 float scaleY; 37 38 int maxUsedHeight; 39 uint32_t updateAtFrame; 40 uint32_t updateAtUcodeCount; 41 42 bool isUsed; 43 uint32_t knownHeight; 44 45 uint32_t crcInRDRAM; 46 uint32_t crcCheckedAtFrame; 47 48 TxtrCacheEntry txtEntry; 49 } RenderTextureInfo; 50 51 52 class CRenderTexture 53 { 54 public: 55 friend class CGraphicsContext; 56 friend class CDXGraphicsContext; 57 friend class FrameBufferManager; 58 friend class DXFrameBufferManager; 59 friend class OGLFrameBufferManager; CRenderTexture(int width,int height,RenderTextureInfo * pInfo,TextureUsage usage)60 CRenderTexture(int width, int height, RenderTextureInfo* pInfo, TextureUsage usage) 61 { 62 m_beingRendered = false; 63 m_width = m_height = 0; 64 m_pTexture = NULL; 65 m_pInfo = pInfo; 66 m_usage = usage; 67 } ~CRenderTexture()68 virtual ~CRenderTexture() {} 69 70 virtual bool SetAsRenderTarget(bool enable)=0; 71 virtual void LoadTexture(TxtrCacheEntry* pEntry)=0; 72 StoreToRDRAM(int infoIdx)73 virtual void StoreToRDRAM(int infoIdx) {}; 74 GetDimension(int & width,int & height)75 void GetDimension(int &width, int &height) 76 { 77 width = m_width; 78 height = m_height; 79 } 80 IsBeingRendered()81 bool IsBeingRendered() 82 { 83 return m_beingRendered; 84 } 85 GetUsage()86 TextureUsage GetUsage() {return m_usage;} 87 88 89 protected: 90 int m_width; 91 int m_height; 92 bool m_beingRendered; 93 TextureUsage m_usage; 94 95 CTexture* m_pTexture; 96 RenderTextureInfo* m_pInfo; 97 }; 98 99 100 class COGLRenderTexture : public CRenderTexture 101 { 102 // Haven't implemented yet 103 public: 104 COGLRenderTexture(int width, int height, RenderTextureInfo* pInfo, TextureUsage usage); 105 ~COGLRenderTexture(); 106 107 bool SetAsRenderTarget(bool enable); 108 void LoadTexture(TxtrCacheEntry* pEntry); 109 void StoreToRDRAM(int infoIdx); 110 111 protected: 112 bool InitPBuffer(void); 113 void ShutdownPBuffer(void); 114 115 int m_widthCreated; 116 int m_heightCreated; 117 118 119 COGLTexture *m_pOGLTexture; 120 }; 121 122 #endif 123 124 125 126