UpdateTexture can now take any image format; it doesn't have to match the original format, or even be a standard pixel format. This is because we can often do the conversion much more efficiently within UpdateTexture than we can in the caller. With D3D, we can convert any source format as we copy, preventing an extra blit. OpenGL can do it on the fly if it happens to be a known texture format. We can figure out the pixel format from the image itself, so there's no need to pass pixfmt to UpdateTexture. Add BGR8, for movies with OpenGL.
75 lines
2.2 KiB
C++
75 lines
2.2 KiB
C++
#ifndef RAGEDISPLAY_D3D_H
|
|
#define RAGEDISPLAY_D3D_H
|
|
|
|
class RageException_D3DNotInstalled: public exception { };
|
|
class RageException_D3DNoAcceleration: public exception { };
|
|
|
|
|
|
class RageDisplay_D3D: public RageDisplay
|
|
{
|
|
public:
|
|
RageDisplay_D3D( VideoModeParams params );
|
|
~RageDisplay_D3D();
|
|
void Update(float fDeltaTime);
|
|
|
|
bool IsSoftwareRenderer();
|
|
void ResolutionChanged();
|
|
const PixelFormatDesc *GetPixelFormatDesc(PixelFormat pf) const;
|
|
|
|
void BeginFrame();
|
|
void EndFrame();
|
|
VideoModeParams GetVideoModeParams() const;
|
|
void SetBlendMode( BlendMode mode );
|
|
bool SupportsTextureFormat( PixelFormat pixfmt );
|
|
unsigned CreateTexture( PixelFormat pixfmt, SDL_Surface*& img );
|
|
void UpdateTexture(
|
|
unsigned uTexHandle,
|
|
SDL_Surface* img,
|
|
int xoffset, int yoffset, int width, int height
|
|
);
|
|
void DeleteTexture( unsigned uTexHandle );
|
|
void SetTexture( RageTexture* pTexture );
|
|
void SetTextureModeModulate();
|
|
void SetTextureModeGlow( GlowMode m=GLOW_WHITEN );
|
|
void SetTextureWrapping( bool b );
|
|
int GetMaxTextureSize() const;
|
|
void SetTextureFiltering( bool b);
|
|
bool IsZBufferEnabled() const;
|
|
void SetZBuffer( bool b );
|
|
void ClearZBuffer();
|
|
void SetBackfaceCull( bool b );
|
|
void SetAlphaTest( bool b );
|
|
void SetMaterial(
|
|
float emissive[4],
|
|
float ambient[4],
|
|
float diffuse[4],
|
|
float specular[4],
|
|
float shininess
|
|
);
|
|
void SetLighting( bool b );
|
|
void SetLightOff( int index );
|
|
void SetLightDirectional(
|
|
int index,
|
|
RageColor ambient,
|
|
RageColor diffuse,
|
|
RageColor specular,
|
|
RageVector3 dir );
|
|
|
|
void DrawQuads( const RageVertex v[], int iNumVerts );
|
|
void DrawFan( const RageVertex v[], int iNumVerts );
|
|
void DrawStrip( const RageVertex v[], int iNumVerts );
|
|
void DrawTriangles( const RageVertex v[], int iNumVerts );
|
|
void DrawIndexedTriangles( const RageVertex v[], int iNumVerts, const Uint16* pIndices, int iNumIndices );
|
|
// void DrawLineStrip( const RageVertex v[], int iNumVerts, float LineWidth );
|
|
|
|
void SaveScreenshot( CString sPath );
|
|
protected:
|
|
bool TryVideoMode( VideoModeParams params, bool &bNewDeviceOut );
|
|
void SetViewport(int shift_left, int shift_down);
|
|
RageMatrix GetOrthoMatrix( float l, float r, float b, float t, float zn, float zf );
|
|
|
|
};
|
|
|
|
#endif
|
|
|