📄 basesurf.h
字号:
INT32 count;
AlphaStruct* pAlphaList;
} tFrameElement;
//Color Access Functions/
ColorFuncAccess* zm_pColorAcc;
CYUVInputFormatMngr* m_pyuvInputMngr;
CHWMemObj* m_pHwMemObj;
//Scroll bar support
double m_fScrollBarZoom;
//Support for Alpha Blending.....
UCHAR* m_pucLastImage;
HXBitmapInfoHeader m_bmiLastImage;
HXBitmapInfoHeader m_bmiLastBlt;
UINT32 m_ulLastBlendTime;
public:
CHXMapPtrToPtr m_YUVAImageList; //Maps site to YUVA image.
CHXSimpleList m_imageBlocks; //List of YUV blended images to paint.
CHXBaseSite* GetSite() {return m_pSite;}
protected:
CHXSimpleList m_LinkedSites;
HXREGION* m_pAdditionalColorKey;
BOOL m_bYUVBlending;
BOOL m_bVideoSurface2;
BOOL m_bOptimalVideoScheduler;
//XXXgfw I am assuming now that I can use the below scaling for
//XXXgfw my YUV optimized alphablending...
double m_scaleFactorX;
double m_scaleFactorY;
HXxRect* m_paSrcRects;
HXxRect* m_paDestRects;
//paSrcRects and paDestRects need to be HX_FREEed when you are done
//with them. internally a realloc is done so don't free then until
//you are sure you are done or want to reclaim the memory.
void _ConstructRects(HXxRect& rSrcRectCopy,
HXxRect& rDestRectCopy,
BOOL bDoAlpha,
int& nNumRects,
HXxRect** paSrcRects,
HXxRect** paDestRects,
HXREGION* pAdditionalRegion = NULL
);
//This determines what is the best way to ask for system memory to
//be filled in by rvrend under VidSurf2. You must delete the
//returned region.
HXREGION* _DetermineBestRegion();
public:
//Returns if any blending is going to happen or not.
BOOL _SetUpBlendRects( HXBitmapInfoHeader* pBitmapInfo = NULL,
UCHAR* pImageData = NULL);
protected:
BOOL _RecursiveYUVBlend( Image* pImage,
HXxRect boundingRect,
CBaseSurface* pSurface,
INT32 lXOffset,
INT32 lYOffset);
//blends the rects and put the results into m_imageBlocks.
BOOL _BlendYUVRects( AlphaStruct* pList, int nCount, UINT32 ulDestFourCC);
BOOL _DoYUVRectsIntersect();
void _RemoveYUVImageLists();
CHXBaseSite* _SearchForYUV(CHXBaseSite* pSite);
BOOL _AlphaSetupAndBlending(HXBitmapInfoHeader* pBitmapInfo,
UCHAR* pImageData,
HXxRect& rSrcRect,
HXxRect& rDestRect
);
void _AlphaBlend( HXREGION* pRegionToBlend, //window coords
UCHAR* pBottomImage,
HXBitmapInfoHeader* pbmiBottomImageInfo,
HXxPoint* pBottomPosition, //window coords
UCHAR* pTopImage,
HXBitmapInfoHeader* pbmiTopImageInfo,
HXxPoint* pTopPosition //window coords
);
//Returns whether or not this graphics device allows the shrinking of
//overlays.
virtual BOOL _AllowsOverlayShrinking();
virtual void _WaitForFlush();
BOOL m_bImageBlocksGood;
void AlignRect(HXxRect *pRect, int nMaxWidth, int nMaxHeight);
virtual void CreateColorAccess(IUnknown* pUnk) {zm_pColorAcc = new ColorFuncAccess(pUnk);}
virtual void CreateYuvInputMngr();
BOOL m_bAllocHook; // Are we tracing mem allocs
public:
//To test if a pixel is transparent or not.
BOOL IsPixelTransparent(HXxPoint& point, INT32 alpha );
HXBitmapInfo* GetLastBMI() { return (HXBitmapInfo*)&m_bmiLastBlt; }
void InitSurface(IUnknown* pUnk);
//Virtual Functions which must me implemented by each OS.
/************************************************************************
* Method:
* _ReleaseSurface
* Purpose:
* Destroys pSurface
*/
virtual void _ReleaseSurface(CBaseRootSurface* pSurface) = 0;
/************************************************************************
* Method:
* _DrawBlack
* Purpose:
* Fill the entire region with black
*/
virtual void _DrawBlack(void* pWindow) = 0;
/************************************************************************
* Method:
* _BltToPrimary
* Purpose:
* Transfer data from offscreen memory to the primary surface.
* This may not be applicable on some platforms.
*/
virtual HX_RESULT _BltToPrimary(REF(HXxRect) rDestRect, REF(HXxRect) rSrcRect) = 0;
/************************************************************************
* Method:
* _CreateBuffer
* Purpose:
* Create an offscreen (non-overlay) video buffer. This is used
* when overlay is not available .
* This may not be applicable on some platforms.
*/
virtual void _CreateBuffer() = 0;
/************************************************************************
* Method:
* _GetCaps
* Purpose:
* Query the current display device's drawing capabilities. See
* the list of display caps at the top of this file.
*/
virtual HX_RESULT _GetCaps(UINT32 *pfSurfaceCaps) = 0;
/************************************************************************
* Method:
* _CreateOverlay
* Purpose:
* Create a video surface of type cid at dimenstions x,y. If
* bOverlay is TRUE, the surface must be overlay.
*/
virtual HX_RESULT _CreateOverlay(BOOL bOverlay, int cid, int x, int y) = 0;
/************************************************************************
* Method:
* _LockInternalSurface
* Purpose:
* Obtain a writable pointer to the allocated video surface and
* prepare to write to it.
*/
virtual HX_RESULT _LockInternalSurface(UCHAR** ppSurfPtr, LONG32* pnSurfPitch, REF(HXxSize) srcSize) = 0;
/************************************************************************
* Method:
* _UnlockInternalSurface
* Purpose:
* Inform the video surface that you are finished writing to it.
*/
virtual HX_RESULT _UnlockInternalSurface(UCHAR* pSurfPtr) = 0;
/************************************************************************
* Method:
* _SetupDCObjects
* Purpose:
* Set the current display context with a specific brush and pen.
* This may not be applicable on some platforms.
*/
virtual void _SetupDCObjects(HXxDC hxxDC,
void** phOldBrush,
void** phOldPen) = 0;
/************************************************************************
* Method:
* _FillRectangle
* Purpose:
* Fill the specified rectangle with the current brush.
*/
virtual void _FillRectangle(HXxDC hxxDC,
UINT32 left,
UINT32 top,
UINT32 right,
UINT32 bottom) = 0;
/************************************************************************
* Method:
* _RestoreDCObjects
* Purpose:
* Restore the default pen and brush of the display context.
* This may not be applicable on some platforms.
*/
virtual void _RestoreDCObjects(HXxDC hxxDC, void* hOldBrush, void* hOldPen) = 0;
/************************************************************************
* Method:
* _GetCompositionSurfaceHXxDC
* Purpose:
* Get the display context of the composition surface.
* This may not be applicable on some platforms.
*/
virtual void _GetCompositionSurfaceHXxDC(HXxDC *hdc) = 0;
/************************************************************************
* Method:
* _ReleaseCompositionSurfaceHXxDC
* Purpose:
* Release the display context of the composition surface.
* This may not be applicable on some platforms.
*/
virtual void _ReleaseCompositionSurfaceHXxDC(HXxDC hdc) = 0;
/************************************************************************
* Method:
* _InsureColorMatch
* Purpose:
* Match inColor with that of the current display device.
* This may not be applicable on some platforms.
*/
virtual INT32 _InsureColorMatch(INT32 InColor) = 0;
/************************************************************************
* Method:
* _SetColorKey
* Purpose:
* Set the color of the overlay's colorkey.
* This may not be applicable on some platforms.
*/
virtual void _SetColorKey(INT32 nColorSpaceLowValue, INT32 nColorSpaceHighValue) = 0;
/************************************************************************
* Method:
* _UpdateOverlay
* Purpose:
* Update the position, size, and mode of the overaly.
* This may not be applicable on some platforms.
*/
virtual void _UpdateOverlay(HXxRect* src, HXxRect* dest, INT32 inFlags) = 0;
/************************************************************************
* Method:
* _IsSurfaceVisible
* Purpose:
* Is the current video surface visible.
*/
virtual BOOL _IsSurfaceVisible() = 0;
/************************************************************************
* Method:
* _ReleaseSurface
* Purpose:
* Destroys the allocated video surface
*/
virtual void _ReleaseSurface() = 0;
/************************************************************************
* Method:
* _GetDC
* Purpose:
* Get the display context for the site that owns this surface.
* This may not be applicable on some platforms.
*/
virtual HXxDC _GetDC(HXxWindow*) = 0;
/************************************************************************
* Method:
* _ReleaseDC
* Purpose:
* Release the display context for the site that owns this surface.
* This may not be applicable on some platforms.
*/
virtual void _ReleaseDC(HXxWindow*, HXxDC) = 0;
virtual void _ColorWindows();
virtual BOOL UsingOverlay();
virtual void _LockBlitter() {};
virtual void _UnlockBlitter() {};
virtual void _FlushSurfaces() {};
virtual void _WaitForQueuedFrames() {};
virtual HX_RESULT _ScheduleFrameForDisplay(void* pOsData,
tFrameElement* pItem,
UINT32 nResolution);
virtual void CreateHWMemObj(int cid) {};
};
#endif /* _BASESURF_H_ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -