diff --git a/src/ZE_ZEngine.cpp b/src/ZE_ZEngine.cpp index e241996..00c7a34 100644 --- a/src/ZE_ZEngine.cpp +++ b/src/ZE_ZEngine.cpp @@ -13,7 +13,7 @@ \brief Central source file for ZEngine. Actual implementation of ZEngine singleton class, the core of ZEngine. -
$Id: ZE_ZEngine.cpp,v 1.53 2003/07/13 05:35:11 cozman Exp $
+
$Id: ZE_ZEngine.cpp,v 1.54 2003/08/01 21:56:58 cozman Exp $
\author James Turk **/ @@ -84,7 +84,9 @@ bool ZEngine::CreateDisplay(std::string title, std::string icon) SDL_Surface *iconImg; bool status=true; //status of setup, only true if everything went flawless int bpp; +#if GFX_BACKEND == OGL int rgb_size[3]; +#endif if(!mInitialized) { @@ -134,6 +136,7 @@ bool ZEngine::CreateDisplay(std::string title, std::string icon) } } +#if GFX_BACKEND == OGL //buffer sizes switch (mBPP) { @@ -168,6 +171,9 @@ bool ZEngine::CreateDisplay(std::string title, std::string icon) SDL_GL_SetAttribute(SDL_GL_ACCUM_ALPHA_SIZE, 0); flags |= SDL_OPENGL; +#elif GFX_BACKEND == SDL + flags |= SDL_DOUBLEBUF; +#endif //GFX_BACKEND if(!mInitialized) //only set these settings the first time { @@ -202,7 +208,9 @@ bool ZEngine::CreateDisplay(std::string title, std::string icon) mHeight = mScreen->h; mBPP = mScreen->format->BitsPerPixel; +#if GFX_BACKEND == OGL SetGL2D(); +#endif mKeyIsPressed = SDL_GetKeyState(NULL); @@ -296,7 +304,11 @@ SDL_Surface *ZEngine::Display() void ZEngine::Update() { +#if GFX_BACKEND == OGL SDL_GL_SwapBuffers(); +#elif GFX_BACKEND == SDL + SDL_Flip(mScreen); +#endif //keeps track of spf// mSecPerFrame = (GetTime()-mLastTime)/1000.0; @@ -311,9 +323,12 @@ void ZEngine::Update() } } -void ZEngine::Clear(float red, float green, float blue, float alpha) +#if GFX_BACKEND == OGL + +void ZEngine::Clear(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha) { - glClearColor(red,green,blue,alpha); + GLclampf r = red/255.0f, g = green/255.0f, b = blue/255.0f, a = alpha/255.0f; + glClearColor(r,g,b,a); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); glLoadIdentity(); } @@ -344,6 +359,15 @@ void ZEngine::SetGL2D() glLoadIdentity(); } +#elif GFX_BACKEND == SDL + +void ZEngine::Clear(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha) +{ + SDL_FillRect(mScreen,NULL,SDL_MapRGBA(mScreen->format,red,green,blue,alpha)); +} + +#endif //GFX_BACKEND + void ZEngine::Delay(Uint32 milliseconds) { SDL_Delay(milliseconds); diff --git a/src/ZE_ZImage.cpp b/src/ZE_ZImage.cpp index c4ab7c7..012a3ed 100644 --- a/src/ZE_ZImage.cpp +++ b/src/ZE_ZImage.cpp @@ -13,7 +13,7 @@ \brief Source file for ZImage. Implementation of ZImage, the Image class for ZEngine. -
$Id: ZE_ZImage.cpp,v 1.37 2003/07/11 20:51:44 cozman Exp $
+
$Id: ZE_ZImage.cpp,v 1.38 2003/08/01 21:56:58 cozman Exp $
\author James Turk **/ @@ -116,6 +116,8 @@ void ZImage::OpenFromImage(const ZImage &img, Sint16 x, Sint16 y, Sint16 w, Sint OpenFromImage(img.Surface(),x,y,w,h); } +#if GFX_BACKEND == OGL + //attach is really the core of ZImage, everything calls it, it converts SDL_Surface->OpenGL Texture->ZImage void ZImage::Attach(SDL_Surface *surface) { @@ -189,48 +191,6 @@ void ZImage::SetColorKey(Uint8 red, Uint8 green, Uint8 blue) rEngine->ReportError(ZERR_NOIMAGE,"SetColorKey"); } -void ZImage::Flip(bool horizontal, bool vertical) -{ - GLfloat temp; - //all that a flip does is invert the Min/Max coordinates - if(horizontal) - { - temp = rTexMinX; - rTexMinX = rTexMaxX; - rTexMaxX = temp; - } - - if(vertical) - { - temp = rTexMinY; - rTexMinY = rTexMaxY; - rTexMaxY = temp; - } -} - -//stretching and resizing is very inexpensive, done via variables -void ZImage::Stretch(float xFactor, float yFactor) -{ - rWidth = static_cast(xFactor*rWidth); - rHeight = static_cast(yFactor*rHeight); -} - -void ZImage::Resize(unsigned int width, unsigned int height) -{ - rWidth = width; - rHeight = height; -} - -//this is available for other uses of ZEngine -void ZImage::Bind() const -{ - if(rTexID) - glBindTexture(GL_TEXTURE_2D, rTexID); - else - rEngine->ReportError(ZERR_NOIMAGE,"Bind"); - -} - void ZImage::Draw(int x, int y) const { //source is same as float version, but uses glVertex2i @@ -285,11 +245,140 @@ void ZImage::DrawRotated(float x, float y, float angle) const glPopMatrix(); } +void ZImage::Flip(bool horizontal, bool vertical) +{ + GLfloat temp; + //all that a flip does is invert the Min/Max coordinates + if(horizontal) + { + temp = rTexMinX; + rTexMinX = rTexMaxX; + rTexMaxX = temp; + } + + if(vertical) + { + temp = rTexMinY; + rTexMinY = rTexMaxY; + rTexMaxY = temp; + } +} + +//stretching and resizing is very inexpensive, done via variables +void ZImage::Stretch(float xFactor, float yFactor) +{ + rWidth = static_cast(xFactor*rWidth); + rHeight = static_cast(yFactor*rHeight); +} + +void ZImage::Resize(unsigned int width, unsigned int height) +{ + rWidth = width; + rHeight = height; +} + +//this is available for other uses of ZEngine +void ZImage::Bind() const +{ + if(rTexID) + glBindTexture(GL_TEXTURE_2D, rTexID); + else + rEngine->ReportError(ZERR_NOIMAGE,"Bind"); + +} + bool ZImage::IsLoaded() const { return glIsTexture(rTexID) == GL_TRUE; } +#elif GFX_BACKEND == SDL + +void ZImage::Attach(SDL_Surface *surface) +{ + Release(); + + //surface conversion// + SDL_Surface *temp = surface; + surface = SDL_DisplayFormatAlpha(temp); //TTF_RenderTextBlended relys on this + if(surface) + { + FreeImage(temp); + } + else //can't convert + { + rEngine->ReportError(ZERR_SDL_INTERNAL,FormatStr("SDL_DisplayFormatAlpha failed in ZImage::Attach: %s",SDL_GetError())); + surface = temp; + } + + if(surface) + rImage = surface; + else + rEngine->ReportError(ZERR_NOIMAGE,"Attach"); +} + +void ZImage::Reload() +{ + //currently a no-op +} + +void ZImage::Release() +{ + FreeImage(rImage); +} + +void ZImage::SetAlpha(Uint8 alpha) +{ + rAlpha = alpha; + if(rImage) + { + if(SDL_SetAlpha(rImage, SDL_SRCALPHA, alpha) < 0) + rEngine->ReportError(ZERR_SDL_INTERNAL,FormatStr("SDL_SetAlpha failed in ZImage::SetAlpha: %s",SDL_GetError())); + } + else + rEngine->ReportError(ZERR_NOIMAGE,"SetAlpha"); +} + +void ZImage::SetColorKey(Uint8 red, Uint8 green, Uint8 blue) +{ + Uint32 color = SDL_MapRGBA(rImage->format,red,green,blue,255); + + if(rImage) + { + if(SDL_SetColorKey(rImage, SDL_RLEACCEL|SDL_SRCCOLORKEY, color) < 0) + rEngine->ReportError(ZERR_SDL_INTERNAL,FormatStr("SDL_SetColorKey failed in ZImage::SetColorKey: %s",SDL_GetError())); + //surface conversion// + SDL_Surface *temp = rImage; + rImage = SDL_DisplayFormatAlpha(temp); //TTF_RenderTextBlended relys on this + if(rImage) + { + FreeImage(temp); + } + else //can't convert + { + rEngine->ReportError(ZERR_SDL_INTERNAL,FormatStr("SDL_DisplayFormatAlpha failed in ZImage::SetColorKey: %s",SDL_GetError())); + rImage = temp; + } + } + else + rEngine->ReportError(ZERR_NOIMAGE,"SetColorKey"); +} + +void ZImage::Draw(int x, int y) const +{ + SDL_Rect rect; + rect.x = static_cast(x); + rect.y = static_cast(y); + SDL_BlitSurface(rImage, NULL, rEngine->Display(), &rect); +} + +bool ZImage::IsLoaded() const +{ + return rImage ? true : false; +} + +#endif //GFX_BACKEND + SDL_Surface* ZImage::Surface() const { return rImage; @@ -297,12 +386,12 @@ SDL_Surface* ZImage::Surface() const int ZImage::Width() const { - return rWidth; + return rImage->w; } int ZImage::Height() const { - return rHeight; + return rImage->h; } Uint8 ZImage::Alpha() const diff --git a/src/ZE_ZRect.cpp b/src/ZE_ZRect.cpp index dc42ac7..a347fa1 100644 --- a/src/ZE_ZRect.cpp +++ b/src/ZE_ZRect.cpp @@ -13,7 +13,7 @@ \brief Source file for ZRect. Implementation of ZRect, the Rectangle class for ZEngine. -
$Id: ZE_ZRect.cpp,v 1.12 2003/06/11 05:51:16 cozman Exp $
+
$Id: ZE_ZRect.cpp,v 1.13 2003/08/01 21:56:58 cozman Exp $
\author James Turk **/ @@ -23,16 +23,19 @@ namespace ZE { ZRect::ZRect() : + rEngine(ZEngine::GetInstance()), rX(0),rY(0),rWidth(0),rHeight(0) { } ZRect::ZRect(float x, float y, float width, float height) : + rEngine(ZEngine::GetInstance()), rX(x),rY(y),rWidth(width),rHeight(height) { } ZRect::ZRect(const SDL_Rect &rect) : + rEngine(ZEngine::GetInstance()), rX(static_cast(rect.x)), rY(static_cast(rect.y)), rWidth(static_cast(rect.w)), @@ -41,6 +44,7 @@ ZRect::ZRect(const SDL_Rect &rect) : } ZRect::ZRect(const ZRect &rhs) : + rEngine(ZEngine::GetInstance()), rX(rhs.X()),rY(rhs.Y()),rWidth(rhs.Width()),rHeight(rhs.Height()) { } @@ -96,6 +100,7 @@ bool ZRect::operator<(const ZRect &rhs) const void ZRect::Draw(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha) const { +#if GFX_BACKEND == OGL glBindTexture(GL_TEXTURE_2D,0); //reset to blank texture glColor4ub(red,green,blue,alpha); glBegin(GL_QUADS); @@ -105,6 +110,11 @@ void ZRect::Draw(Uint8 red, Uint8 green, Uint8 blue, Uint8 alpha) const glVertex2f(rX, rY+rHeight); glEnd(); glColor4ub(255,255,255,255); //restore color setting +#elif GFX_BACKEND == SDL + SDL_Rect rect = SDLrect(); + SDL_FillRect(rEngine->Display(), &rect, SDL_MapRGBA(rEngine->Display()->format,red,green,blue,alpha)); +#endif //GFX_BACKEND + } void ZRect::Move(float x, float y) diff --git a/src/external/SDLGL_Util.cpp b/src/external/SDLGL_Util.cpp index 8f29283..4550eb0 100755 --- a/src/external/SDLGL_Util.cpp +++ b/src/external/SDLGL_Util.cpp @@ -4,6 +4,8 @@ #include "external/SDLGL_Util.h" +#if GFX_BACKEND == OGL + //finds nearest power of two (going up), needed for surfaces int power_of_two(int input) { @@ -87,3 +89,5 @@ GLuint SDL_GL_LoadTexture(SDL_Surface *surface, GLfloat *texcoord) return texture; } + +#endif //GFX_BACKEND == OGL