From 1d59a53cd4af1b72b418b921cae0714264f5323b Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sun, 18 Mar 2018 12:54:14 +0100 Subject: [PATCH] - added worldtexture.cpp --- src/textures/worldtexture.cpp | 133 ++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 src/textures/worldtexture.cpp diff --git a/src/textures/worldtexture.cpp b/src/textures/worldtexture.cpp new file mode 100644 index 0000000000..0370bf3e81 --- /dev/null +++ b/src/textures/worldtexture.cpp @@ -0,0 +1,133 @@ +/* +** worldtexture.cpp +** Intermediate class for some common code for several classes +** +**--------------------------------------------------------------------------- +** Copyright 2018 Christoph Oelckers +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without +** modification, are permitted provided that the following conditions +** are met: +** +** 1. Redistributions of source code must retain the above copyright +** notice, this list of conditions and the following disclaimer. +** 2. Redistributions in binary form must reproduce the above copyright +** notice, this list of conditions and the following disclaimer in the +** documentation and/or other materials provided with the distribution. +** 3. The name of the author may not be used to endorse or promote products +** derived from this software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +** IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +** OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +** IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +** INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +** NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +** THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +**--------------------------------------------------------------------------- +** +** +*/ + +#include "textures.h" + + +//========================================================================== +// +// +// +//========================================================================== + +FWorldTexture::FWorldTexture(const char *name, int lumpnum) + : FTexture(name, lumpnum) +{ +} + +//========================================================================== +// +// +// +//========================================================================== + +FWorldTexture::~FWorldTexture() +{ + Unload(); + for(int i = 0; i < 2; i++) + { + if (Spandata[i] != nullptr) + { + FreeSpans (Spandata[i]); + Spandata[i] = nullptr; + } + } +} + +//========================================================================== +// +// +// +//========================================================================== + +void FWorldTexture::Unload () +{ + for(int i = 0; i < 2; i++) + { + if (!(PixelsAreStatic & (1 << i))) + { + delete[] Pixeldata[i]; + } + Pixeldata[i] = nullptr; + } + FTexture::Unload(); +} + +//========================================================================== +// +// +// +//========================================================================== + +const uint8_t *FWorldTexture::GetColumn (unsigned int column, const Span **spans_out) +{ + GetPixels(); + if ((unsigned)column >= (unsigned)Width) + { + if (WidthMask + 1 == Width) + { + column &= WidthMask; + } + else + { + column %= Width; + } + } + if (spans_out != nullptr) + { + if (Spandata[0] == nullptr) + { + Spandata[0] = CreateSpans (Pixeldata[0]); + } + *spans_out = Spandata[0][column]; + } + return Pixeldata[0] + column*Height; +} + +//========================================================================== +// +// +// +//========================================================================== + +const uint8_t *FWorldTexture::GetPixels () +{ + if (Pixeldata[0] == nullptr) + { + Pixeldata[0] = MakeTexture (LegacyRenderStyles[STYLE_Normal]); + } + return Pixeldata[0]; +} +