00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef BASESOFTRENDERSURFACE_H
00022 #define BASESOFTRENDERSURFACE_H
00023
00024 #include "RenderSurface.h"
00025 #include "Rect.h"
00026 #include <SDL.h>
00027
00028
00029
00030
00031
00032
00033 class BaseSoftRenderSurface : public RenderSurface
00034 {
00035 protected:
00036
00037 uint8 *pixels;
00038 uint8 *pixels00;
00039
00040
00041 uint16 *zbuffer;
00042 uint8 *zbuffer00;
00043
00044
00045 int bytes_per_pixel;
00046 int bits_per_pixel;
00047 int format_type;
00048
00049
00050 sint32 ox, oy;
00051 sint32 width, height;
00052 sint32 pitch;
00053 sint32 zpitch;
00054 bool flipped;
00055
00056
00057 Pentagram::Rect clip_window;
00058
00059
00060 uint32 lock_count;
00061
00062
00063 SDL_Surface *sdl_surf;
00064
00065
00066 Texture *rtt_tex;
00067
00068
00069 BaseSoftRenderSurface(SDL_Surface *);
00070
00071
00072 BaseSoftRenderSurface(int w, int h);
00073
00074
00075 BaseSoftRenderSurface(int w, int h, int bpp, int rsft, int gsft, int bsft, int asft);
00076 BaseSoftRenderSurface(int w, int h, uint8 *buf);
00077 virtual ECode GenericLock() { return P_NO_ERROR; }
00078 virtual ECode GenericUnlock() { return P_NO_ERROR; }
00079
00080
00081 void SetPixelsPointer()
00082 {
00083 uint8 *pix00 = pixels00;
00084 uint8 *zbuf00 = zbuffer00;
00085
00086 if (flipped)
00087 {
00088 pix00 += -pitch * (height-1);
00089 zbuf00 += -zpitch * (height-1);
00090 }
00091
00092 pixels = pix00 + ox*bytes_per_pixel + oy*pitch;
00093 zbuffer = reinterpret_cast<uint16*>(zbuf00 + ox + oy * zpitch);
00094 }
00095
00096 public:
00097
00098
00099 virtual ~BaseSoftRenderSurface();
00100
00101
00102
00103
00104
00105
00106
00107
00108 virtual ECode BeginPainting();
00109
00110
00111
00112 virtual ECode EndPainting();
00113
00114
00115 virtual Texture *GetSurfaceAsTexture();
00116
00117
00118
00119
00120
00121
00122
00123 virtual void SetOrigin(sint32 x, sint32 y);
00124
00125
00126 virtual void GetOrigin(sint32 &x, sint32 &y) const;
00127
00128
00129 virtual void GetSurfaceDims(Pentagram::Rect &) const;
00130
00131
00132 virtual void GetClippingRect(Pentagram::Rect &) const;
00133
00134
00135 virtual void SetClippingRect(const Pentagram::Rect &);
00136
00137
00138 virtual sint16 CheckClipped(const Pentagram::Rect &) const;
00139
00140
00141 virtual void SetFlipped(bool flipped);
00142
00143
00144 virtual bool IsFlipped() const;
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 virtual void CreateNativePalette(Pentagram::Palette* palette);
00163
00164 };
00165
00166 #endif