windows-nt/Source/XPSP1/NT/shell/osshell/control/scrnsave/museum/texture.h
2020-09-26 16:20:57 +08:00

76 lines
2.4 KiB
C++

/*****************************************************************************\
FILE: texture.h
DESCRIPTION:
Manage a texture for several instance for each monitor. Also manage keeping the
ratio correct when it's not square when loaded.
BryanSt 2/9/2000
Copyright (C) Microsoft Corp 2000-2001. All rights reserved.
\*****************************************************************************/
#ifndef TEXTURE_H
#define TEXTURE_H
#include "util.h"
#include "main.h"
#include "config.h"
extern int g_nTotalTexturesLoaded;
extern int g_nTexturesRenderedInThisFrame;
class CTexture : public IUnknown
{
public:
//////////////////////////////////////////////////////
// Public Interfaces
//////////////////////////////////////////////////////
// *** IUnknown ***
virtual STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppvObj);
virtual STDMETHODIMP_(ULONG) AddRef(void);
virtual STDMETHODIMP_(ULONG) Release(void);
// Member Functions
IDirect3DTexture8 * GetTexture(float * pfScale = NULL);
DWORD GetTextureWidth(void) {GetTexture(); return m_dxImageInfo.Width;}
DWORD GetTextureHeight(void) {GetTexture(); return m_dxImageInfo.Height;}
float GetScale(void) {GetTexture(); return m_fScale;}
float GetSurfaceRatio(void) {GetTexture(); return 1.0f; /*(((float) m_dxImageInfo.Height) / ((float) m_dxImageInfo.Width));*/}
BOOL IsLoadedInAnyDevice(void);
BOOL IsLoadedForThisDevice(void);
CTexture(CMSLogoDXScreenSaver * pMain, LPCTSTR pszPath, LPVOID pvBits, DWORD cbSize);
CTexture(CMSLogoDXScreenSaver * pMain, LPCTSTR pszPath, LPCTSTR pszResource, float fScale);
LPTSTR m_pszPath;
private:
// Helper Functions
void _Init(CMSLogoDXScreenSaver * pMain);
HRESULT _GetPictureInfo(HRESULT hr, LPTSTR pszString, DWORD cchSize);
BOOL _DoesImageNeedClipping(int * pnNewWidth, int * pnNewHeight);
virtual ~CTexture();
// Private Member Variables
long m_cRef;
// Member Variables
IDirect3DTexture8 * m_pTexture[10];
LPTSTR m_pszResource;
LPVOID m_pvBits; // The background thread will load the image into these bits. The forground thread needs to create the interface.
DWORD m_cbSize; // The number of bytes in pvBits
float m_fScale; // The scale value.
D3DXIMAGE_INFO m_dxImageInfo;
CMSLogoDXScreenSaver * m_pMain; // Weak reference
};
#endif // TEXTURE_H