00001 #ifndef MYTHRENDER_H_ 00002 #define MYTHRENDER_H_ 00003 00004 #include <QSize> 00005 #include <QMutex> 00006 00007 typedef enum 00008 { 00009 kRenderUnknown = 0, 00010 kRenderDirect3D9, 00011 kRenderVDPAU, 00012 kRenderOpenGL1, 00013 kRenderOpenGL2, 00014 kRenderOpenGL2ES, 00015 } RenderType; 00016 00017 class MythRender 00018 { 00019 public: 00020 MythRender(RenderType type) 00021 : m_type(type), m_size(QSize()), m_errored(false), m_refCount(0) 00022 { 00023 UpRef(); 00024 } 00025 00026 bool IsShared(void) const 00027 { 00028 return m_refCount > 1; 00029 } 00030 00031 void UpRef(void) 00032 { 00033 m_refLock.lock(); 00034 m_refCount++; 00035 m_refLock.unlock(); 00036 } 00037 00038 void DownRef(void) 00039 { 00040 m_refLock.lock(); 00041 m_refCount--; 00042 if (m_refCount <= 0) 00043 { 00044 m_refLock.unlock(); 00045 delete this; 00046 return; 00047 } 00048 m_refLock.unlock(); 00049 } 00050 00051 RenderType Type(void) const { return m_type; } 00052 bool IsErrored(void) const { return m_errored; } 00053 QSize GetSize(void) const { return m_size; } 00054 virtual void Release(void) { } 00055 00056 protected: 00057 virtual ~MythRender() { } 00058 00059 RenderType m_type; 00060 QSize m_size; 00061 bool m_errored; 00062 QMutex m_refLock; 00063 int m_refCount; 00064 }; 00065 00066 #endif
1.6.3