| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- ** Command & Conquer Renegade(tm)
- ** Copyright 2025 Electronic Arts Inc.
- **
- ** This program is free software: you can redistribute it and/or modify
- ** it under the terms of the GNU General Public License as published by
- ** the Free Software Foundation, either version 3 of the License, or
- ** (at your option) any later version.
- **
- ** This program is distributed in the hope that it will be useful,
- ** but WITHOUT ANY WARRANTY; without even the implied warranty of
- ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- ** GNU General Public License for more details.
- **
- ** You should have received a copy of the GNU General Public License
- ** along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
- /***********************************************************************************************
- *** C O N F I D E N T I A L --- W E S T W O O D S T U D I O S ***
- ***********************************************************************************************
- * *
- * Project Name : WW3D *
- * *
- * $Archive:: /Commando/Code/ww3d2/surfaceclass.h $*
- * *
- * Original Author:: Nathaniel Hoffman *
- * *
- * $Author:: Patrick $*
- * *
- * $Modtime:: 2/26/02 6:14p $*
- * *
- * $Revision:: 18 $*
- * *
- *---------------------------------------------------------------------------------------------*
- * Functions: *
- * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
- #if defined(_MSC_VER)
- #pragma once
- #endif
- #ifndef SURFACECLASS_H
- #define SURFACECLASS_H
- #include "ww3dformat.h"
- #include "refcount.h"
- struct IDirect3DSurface8;
- class Vector2i;
- class Vector3;
- /*************************************************************************
- ** SurfaceClass
- **
- ** This is our surface class, which wraps IDirect3DSurface8.
- **
- ** Hector Yee 2/12/01 - added in fills, blits etc for font3d class
- **
- *************************************************************************/
- class SurfaceClass : public RefCountClass
- {
- public:
- struct SurfaceDescription {
- WW3DFormat Format; // Surface format
- unsigned int Width; // Surface width in pixels
- unsigned int Height; // Surface height in pixels
- };
- // Create surface with desired height, width and format.
- SurfaceClass(unsigned width, unsigned height, WW3DFormat format);
- // Create surface from a file.
- SurfaceClass(const char *filename);
- // Create the surface from a D3D pointer
- SurfaceClass(IDirect3DSurface8 *d3d_surface);
- ~SurfaceClass(void);
- // Get surface description
- void Get_Description(SurfaceDescription &surface_desc);
- // Lock / unlock the surface
- void * Lock(int * pitch);
- void Unlock(void);
- // HY -- The following functions are support functions for font3d
- // zaps the surface memory to zero
- void Clear();
- // copies the contents of one surface to another
- void Copy(
- unsigned int dstx, unsigned int dsty,
- unsigned int srcx, unsigned int srcy,
- unsigned int width, unsigned int height,
- const SurfaceClass *other);
- // support for copying from a byte array
- void Copy(const unsigned char *other);
- // support for copying from a byte array
- void Copy(Vector2i &min,Vector2i &max, const unsigned char *other);
- // copies the contents of one surface to another, stretches
- void Stretch_Copy(
- unsigned int dstx, unsigned int dsty,unsigned int dstwidth, unsigned int dstheight,
- unsigned int srcx, unsigned int srcy, unsigned int srcwidth, unsigned int srcheight,
- const SurfaceClass *source);
- // finds the bounding box of non-zero pixels, used in font3d
- void FindBB(Vector2i *min,Vector2i*max);
- // tests a column to see if the alpha is nonzero, used in font3d
- bool Is_Transparent_Column(unsigned int column);
- // makes a copy of the surface into a byte array
- unsigned char *CreateCopy(int *width,int *height,int*size,bool flip=false);
- // For use by TextureClass:
- IDirect3DSurface8 *Peek_D3D_Surface(void) { return D3DSurface; }
- // Attaching and detaching a surface pointer
- void Attach (IDirect3DSurface8 *surface);
- void Detach (void);
- // draws a horizontal line
- void DrawHLine(const unsigned int y,const unsigned int x1, const unsigned int x2, unsigned int color);
- void DrawPixel(const unsigned int x,const unsigned int y, unsigned int color);
- // get pixel function .. to be used infrequently
- void Get_Pixel(Vector3 &rgb, int x,int y);
- void Hue_Shift(const Vector3 &hsv_shift);
- bool Is_Monochrome(void);
- WW3DFormat Get_Surface_Format() const { return SurfaceFormat; }
- //
- // Handy utility functions
- //
- unsigned int PixelSize(const SurfaceDescription &sd);
- void Convert_Pixel(Vector3 &rgb, const SurfaceClass::SurfaceDescription &sd, const unsigned char * pixel);
- void Convert_Pixel(unsigned char * pixel,const SurfaceClass::SurfaceDescription &sd, const Vector3 &rgb);
- private:
- // Direct3D surface object
- IDirect3DSurface8 *D3DSurface;
- WW3DFormat SurfaceFormat;
- friend class TextureClass;
- };
- #endif
|