office-gobmx/goodies/inc/b3dtex.hxx

419 lines
12 KiB
C++

/*************************************************************************
*
* $RCSfile: b3dtex.hxx,v $
*
* $Revision: 1.3 $
*
* last change: $Author: aw $ $Date: 2001-07-03 13:00:45 $
*
* The Contents of this file are made available subject to the terms of
* either of the following licenses
*
* - GNU Lesser General Public License Version 2.1
* - Sun Industry Standards Source License Version 1.1
*
* Sun Microsystems Inc., October, 2000
*
* GNU Lesser General Public License Version 2.1
* =============================================
* Copyright 2000 by Sun Microsystems, Inc.
* 901 San Antonio Road, Palo Alto, CA 94303, USA
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License version 2.1, as published by the Free Software Foundation.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*
* Sun Industry Standards Source License Version 1.1
* =================================================
* The contents of this file are subject to the Sun Industry Standards
* Source License Version 1.1 (the "License"); You may not use this file
* except in compliance with the License. You may obtain a copy of the
* License at http://www.openoffice.org/license.html.
*
* Software provided under this License is provided on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING,
* WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS,
* MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING.
* See the License for the specific provisions governing your rights and
* obligations concerning the Software.
*
* The Initial Developer of the Original Code is: Sun Microsystems, Inc.
*
* Copyright: 2000 by Sun Microsystems, Inc.
*
* All Rights Reserved.
*
* Contributor(s): _______________________________________
*
*
************************************************************************/
#ifndef _B3D_B3DTEX_HXX
#define _B3D_B3DTEX_HXX
#ifndef _SV_OPENGL_HXX
#include <vcl/opengl.hxx>
#endif
#ifndef _SV_BITMAPEX_HXX
#include <vcl/bitmapex.hxx>
#endif
#ifndef _SV_COLOR_HXX
#include <vcl/color.hxx>
#endif
#ifndef _SV_SALBTYPE_HXX
#include <vcl/salbtype.hxx>
#endif
#ifndef _TOOLS_TIME_HXX
#include <tools/time.hxx>
#endif
// Vorausdeklarationen
class BitmapReadAccess;
class BitmapColor;
/*************************************************************************
|*
|* define for lifetime of a texture in texture cache.
|* Parameter of Time(...) call, so hrs, min, sec, 100thsec.
|* Timer for cache uses ten secs delays
|*
\************************************************************************/
#define B3D_TEXTURE_LIFETIME 0, 1, 0
/*************************************************************************
|*
|* Long-Zeiger fuer OpenGL Texturdatenuebergabe
|*
\************************************************************************/
#ifdef WIN
typedef UINT8 huge* GL_UINT8;
#else
typedef UINT8* GL_UINT8;
#endif
/*************************************************************************
|*
|* Art der Pixeldaten der Textur
|*
\************************************************************************/
enum Base3DTextureKind
{
Base3DTextureLuminance = 1,
Base3DTextureIntensity,
Base3DTextureColor
};
/*************************************************************************
|*
|* Modus der Textur
|*
\************************************************************************/
enum Base3DTextureMode
{
Base3DTextureReplace = 1,
Base3DTextureModulate,
Base3DTextureBlend
};
/*************************************************************************
|*
|* Filtermodus der Textur
|*
\************************************************************************/
enum Base3DTextureFilter
{
Base3DTextureNearest = 1,
Base3DTextureLinear
};
/*************************************************************************
|*
|* Wrapping-Modus
|*
\************************************************************************/
enum Base3DTextureWrap
{
Base3DTextureClamp = 1,
Base3DTextureRepeat,
Base3DTextureSingle
};
/*************************************************************************
|*
|* Defines fuer Maskenbildung um Entscheidung innerhalb von ModifyColor
|* zu beschleunigen
|*
\************************************************************************/
#define B3D_TXT_KIND_LUM 0x00
#define B3D_TXT_KIND_INT 0x01
#define B3D_TXT_KIND_COL 0x02
#define B3D_TXT_MODE_REP 0x04
#define B3D_TXT_MODE_MOD 0x08
#define B3D_TXT_MODE_BND 0x0C
#define B3D_TXT_FLTR_NEA 0x10
/*************************************************************************
|*
|* Klassen fuer TexturAttribute beim Anfordern von Texturen
|*
\************************************************************************/
#define TEXTURE_ATTRIBUTE_TYPE_COLOR 0x0000
#define TEXTURE_ATTRIBUTE_TYPE_BITMAP 0x0001
#define TEXTURE_ATTRIBUTE_TYPE_GRADIENT 0x0002
#define TEXTURE_ATTRIBUTE_TYPE_HATCH 0x0003
class TextureAttributes
{
private:
void* mpFloatTrans;
BOOL mbGhosted;
public:
TextureAttributes(BOOL bGhosted, void* pFT);
virtual BOOL operator==(const TextureAttributes&) const;
virtual UINT16 GetTextureAttributeType() const =0;
BOOL GetGhostedAttribute() { return mbGhosted; }
void* GetFloatTransAttribute() { return mpFloatTrans; }
};
class TextureAttributesColor : public TextureAttributes
{
private:
Color maColorAttribute;
public:
TextureAttributesColor(BOOL bGhosted, void* pFT, Color aColor);
virtual BOOL operator==(const TextureAttributes&) const;
virtual UINT16 GetTextureAttributeType() const;
Color GetColorAttribute() { return maColorAttribute; }
};
class TextureAttributesBitmap : public TextureAttributes
{
private:
Bitmap maBitmapAttribute;
public:
TextureAttributesBitmap(BOOL bGhosted, void* pFT, Bitmap aBmp);
virtual BOOL operator==(const TextureAttributes&) const;
virtual UINT16 GetTextureAttributeType() const;
Bitmap GetBitmapAttribute() { return maBitmapAttribute; }
};
class TextureAttributesGradient : public TextureAttributes
{
private:
void* mpFill;
void* mpStepCount;
public:
TextureAttributesGradient(BOOL bGhosted, void* pFT, void* pF, void *pSC);
virtual BOOL operator==(const TextureAttributes&) const;
virtual UINT16 GetTextureAttributeType() const;
void* GetFillAttribute() { return mpFill; }
void* GetStepCountAttribute() { return mpStepCount; }
};
class TextureAttributesHatch : public TextureAttributes
{
private:
void* mpFill;
public:
TextureAttributesHatch(BOOL bGhosted, void* pFT, void* pF);
virtual BOOL operator==(const TextureAttributes&) const;
virtual UINT16 GetTextureAttributeType() const;
void* GetHatchFillAttribute() { return mpFill; }
};
/*************************************************************************
|*
|* Klasse fuer Texturen in Base3D
|*
\************************************************************************/
class B3dTexture
{
protected:
// Die Bitmap(s) der Textur
Bitmap aBitmap;
AlphaMask aAlphaMask;
BitmapReadAccess* pReadAccess;
BitmapReadAccess* pAlphaReadAccess;
// Attribute bei der Generierung
TextureAttributes* pAttributes;
// Gibt die Haeufigkeit der Benutzung wieder
Time maTimeStamp;
// Farbe fuer Base3DTextureBlend - Modus
BitmapColor aColBlend;
// Farbe, wenn keine Textur an einer Stelle liegt
BitmapColor aColTexture;
// Art der Textur
Base3DTextureKind eKind;
// Modus der Textur
Base3DTextureMode eMode;
// Filter
Base3DTextureFilter eFilter;
// Wrapping-Modes fuer beide Freiheitsgrade
Base3DTextureWrap eWrapS;
Base3DTextureWrap eWrapT;
// Entscheidungsvariable
UINT8 nSwitchVal;
// Vorbestimmbare interne booleans
unsigned bTextureKindChanged : 1;
// Konstruktor / Destruktor
B3dTexture(TextureAttributes& rAtt,
BitmapEx& rBmpEx,
Base3DTextureKind=Base3DTextureColor,
Base3DTextureMode=Base3DTextureReplace,
Base3DTextureFilter=Base3DTextureNearest,
Base3DTextureWrap eS=Base3DTextureSingle,
Base3DTextureWrap eT=Base3DTextureSingle);
virtual ~B3dTexture();
// Interne Zugriffsfunktion auf die BitMapFarben
inline const BitmapColor GetBitmapColor(long nX, long nY);
inline const sal_uInt8 GetBitmapTransparency(long nX, long nY);
// Generate switch val for optimized own texture mapping
void SetSwitchVal();
// time stamp and texture cache methods
void Touch() { maTimeStamp = Time() + Time(B3D_TEXTURE_LIFETIME); }
const Time& GetTimeStamp() const { return maTimeStamp; }
public:
// Zugriff auf die Attribute der Textur
TextureAttributes& GetAttributes();
// Zugriff auf Bitmap
Bitmap& GetBitmap() { return aBitmap; }
AlphaMask& GetAlphaMask() { return aAlphaMask; }
BitmapEx GetBitmapEx() { return BitmapEx(aBitmap, aAlphaMask); }
const Size GetBitmapSize() { return aBitmap.GetSizePixel(); }
// Texturfunktion
void ModifyColor(Color& rCol, double fS, double fT);
// Art der Pixeldaten lesen/bestimmen
void SetTextureKind(Base3DTextureKind eNew);
Base3DTextureKind GetTextureKind() { return eKind; }
// Texturmodus lesen/bestimmen
void SetTextureMode(Base3DTextureMode eNew);
Base3DTextureMode GetTextureMode() { return eMode; }
// Filtermodus lesen/bestimmen
void SetTextureFilter(Base3DTextureFilter eNew);
Base3DTextureFilter GetTextureFilter() { return eFilter; }
// Wrapping fuer beide Freiheitsgrade lesen/bestimmen
void SetTextureWrapS(Base3DTextureWrap eNew);
Base3DTextureWrap GetTextureWrapS() { return eWrapS; }
void SetTextureWrapT(Base3DTextureWrap eNew);
Base3DTextureWrap GetTextureWrapT() { return eWrapT; }
// Blend-Color lesen/bestimmen
void SetBlendColor(Color rNew);
Color GetBlendColor();
// Textur-Ersatz-Color lesen/bestimmen
void SetTextureColor(Color rNew);
Color GetTextureColor();
protected:
// Zugriff auf Konstruktor/Destruktor nur fuer die verwaltenden Klassen
friend class Base3D;
friend class Base3DOpenGL;
friend class B3dGlobalData;
friend class B3dTextureStore;
};
/*************************************************************************
|*
|* erweiterte Klasse fuer Texturen in Base3DOpenGL
|*
\************************************************************************/
class B3dTextureOpenGL : public B3dTexture
{
private:
// Name dieser Textur in OpenGL
GLuint nTextureName;
// Konstruktor / Destruktor
B3dTextureOpenGL(TextureAttributes& rAtt,
BitmapEx& rBmpEx,
OpenGL& rOGL,
Base3DTextureKind=Base3DTextureColor,
Base3DTextureMode=Base3DTextureReplace,
Base3DTextureFilter=Base3DTextureNearest,
Base3DTextureWrap eS=Base3DTextureClamp,
Base3DTextureWrap eT=Base3DTextureClamp);
virtual ~B3dTextureOpenGL();
// In OpenGL die Textur zerstoeren
void DestroyOpenGLTexture(OpenGL&);
public:
// Setze diese Textur in OpenGL als aktuelle Textur
void MakeCurrentTexture(OpenGL&);
// Erzeuge diese Textur als OpenGL-Textur
void CreateOpenGLTexture(OpenGL&);
protected:
// Zugriff auf Konstruktor/Destruktor nur fuer die verwaltenden Klassen
friend class Base3D;
friend class Base3DOpenGL;
friend class B3dTextureStore;
};
#endif // _B3D_B3DTEX_HXX