1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: base3d.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 #ifndef _B3D_BASE3D_HXX
32 #define _B3D_BASE3D_HXX
34 //#ifndef _B3D_B3DLIGHT_HXX
35 //#include "b3dlight.hxx"
38 #ifndef _B3D_HMATRIX_HXX
39 #include "hmatrix.hxx"
42 //#ifndef _B3D_B3DENTITY_HXX
43 //#include "b3dentty.hxx"
46 //#ifndef _B3D_B3DCOMPO_HXX
47 //#include "b3dcompo.hxx"
55 //#ifndef _SV_OUTDEV3D_HXX
56 //#include <vcl/outdev3d.hxx>
60 #include <vcl/timer.hxx>
63 #ifndef _VOS_MUTEX_HXX_
64 #include <vos/mutex.hxx>
67 // Vorausdeklarationen
72 //class TextureAttributes;
73 //class B3dTransformationSet;
77 /*************************************************************************
81 \************************************************************************/
83 //SV_DECL_PTRARR_DEL(B3dTextureStore, B3dTexture*, 0, 4);
85 /*************************************************************************
87 |* Globale Daten fuer Base3D
89 \************************************************************************/
94 // // Texturverwaltung
95 // Container maTextureStore;
97 // vos::OMutex maMutex;
100 // DECL_LINK(TimerHdl, AutoTimer*);
104 // virtual ~B3dGlobalData();
106 // B3dTexture* ObtainTexture(TextureAttributes& rAtt);
107 // void InsertTexture(B3dTexture* pNew);
108 // void DeleteTexture(B3dTexture* pOld);
109 // void DeleteAllTextures();
112 /*************************************************************************
114 |* Bisher vorhandene Renderer
116 \************************************************************************/
118 //#define BASE3D_TYPE_DEFAULT 0x0000
119 //#define BASE3D_TYPE_OPENGL 0x0001
120 //#define BASE3D_TYPE_PRINTER 0x0002
122 /*************************************************************************
124 |* Moegliche Objekttypen fuer Primitive
126 \************************************************************************/
128 enum Base3DObjectMode
131 // die folgenden Primitive muessen von jedem abgeleiteten Renderer
132 // ausgefuehrt werden koennen
145 // ab hier beginnen hoehere Primitive, die mit speziellen Methoden
146 // innerhalb von Base3D auf die obenstehenden Primitive
147 // abgebildet werden. Diese Methoden tun dies alles im object
148 // coordinate system.
150 // PolyPolygon ohne Selbstueberschneidungen und ohne
151 // Ueberschneidungen der evtl. vorhandenen Teilpolygone
152 Base3DComplexPolygon
,
154 // Beliebiges PolyPolygon mit Selbstueberschneidungen und
155 // Ueberschneidungen der weiteren Teilpolygone
156 Base3DComplexPolygonCut
159 /*************************************************************************
161 |* Moegliche Darstellungsarten fuer Primitive
163 \************************************************************************/
165 enum Base3DRenderMode
167 Base3DRenderNone
= 0,
173 /*************************************************************************
175 |* Moegliche CullingModes fuer Polygone
177 \************************************************************************/
186 /*************************************************************************
188 |* Moegliche ShadeModels fuer Polygone
190 \************************************************************************/
192 enum Base3DShadeModel
199 /*************************************************************************
201 |* Unterstuetzung PolygonOffset
203 \************************************************************************/
205 enum Base3DPolygonOffset
207 Base3DPolygonOffsetFill
= 1,
208 Base3DPolygonOffsetLine
,
209 Base3DPolygonOffsetPoint
212 /*************************************************************************
214 |* Genauigkeit der Berechnungen; im Zweifelsfall wird dieser
215 |* Wert benutzt, um mit 0.0 zu vergleichen oder Abstaende von
216 |* Randvereichen von Wertebereichen zu testen
218 \************************************************************************/
220 #define SMALL_DVALUE (0.0000001)
222 /*************************************************************************
224 |* Die Basisklasse fuer alle 3D Ausgaben
226 \************************************************************************/
228 //class Base3D : public OutDev3D
231 // // das OutputDevice, das Ziel dieser Base3D Engine ist. Wird bereits
232 // // im Konstruktor uebergeben und kann nicht veraendert werden.
233 // OutputDevice* pDevice;
235 // // ObjectCreationMode
236 // Base3DObjectMode eObjectMode;
238 // // current color and alpha blending
239 // Color aCurrentColor;
241 // // Komplexe Polygone
242 // B3dComplexPolygon aComplexPolygon;
245 // Base3DRenderMode eRenderModeFront;
246 // Base3DRenderMode eRenderModeBack;
248 // // ShadeMode fuer Polygone
249 // Base3DShadeModel eShadeModel;
252 // Base3DCullMode eCullMode;
254 // // PointSize, LineWidth
255 // double fPointSize;
256 // double fLineWidth;
259 // Rectangle aScissorRectangle;
262 // B3dTexture* pActiveTexture;
264 // // Aktuelles TransformationSet
265 // B3dTransformationSet* pTransformationSet;
267 // // Aktuelle Beleuchtung
268 // B3dLightGroup* pLightGroup;
271 // B3dMaterial aMaterialFront;
272 // B3dMaterial aMaterialBack;
274 // // Darstellungsqualitaet (0..255)
275 // UINT8 nDisplayQuality;
278 // unsigned bEdgeFlag : 1;
280 // // Gueltigkeit des Kontextes, wird in
281 // // den Konstruktoren gesetzt
282 // unsigned bContextIsValid : 1;
284 // // Variablen fuer PolygonOffset
285 // unsigned bPolyOffsetFill : 1;
286 // unsigned bPolyOffsetLine : 1;
287 // unsigned bPolyOffsetPoint : 1;
289 // // Scissor-Region gesetzt?
290 // unsigned bScissorRegionActive : 1;
293 // unsigned bDitherActive : 1;
295 // // Hint auf transparente Anteile in der Szene
296 // unsigned bTransparentParts : 1;
298 // // FlatMode force switch
299 // unsigned bForceFlat : 1;
302 // // Konstruktor, Destruktor
303 // Base3D(OutputDevice* pOutDev);
304 // virtual ~Base3D();
306 // // setze das ContextIsValid - Flag
307 // void SetContextIsValid(BOOL bNew=TRUE)
308 // { bContextIsValid=bNew; }
310 // static Base3D* CreateScreenRenderer(OutputDevice* pDev);
314 // virtual UINT16 GetBase3DType()=0;
316 // // Zugriff auf das zu verwendende OutputDevice
317 // OutputDevice* GetOutputDevice()
318 // { return pDevice; }
320 // // Hint auf transparente Anteile in der Szene setzen/lesen
321 // void SetTransparentPartsContainedHint(BOOL bNew) { bTransparentParts = bNew; }
322 // BOOL GetTransparentPartsContainedHint() { return bTransparentParts; }
324 // // Zugriff auf globale Daten von allen Base3D's
326 // B3dGlobalData& GetGlobalData();
329 // // Erzeugen bzw. Zerstoeren eines Base3D Kontextes
330 // static Base3D* Create(OutputDevice* pOutDev, BOOL bForcePrinter=FALSE);
331 // virtual void Destroy(OutputDevice *pOutDev);
333 // // Gueltigkeit des Kontextes nach der Inkarnation
335 // BOOL IsContextValid()
336 // { return bContextIsValid; }
338 // void SetContextValid(BOOL bNew=TRUE) { bContextIsValid = bNew; }
341 // // TransformationSet setzen/lesen
342 // virtual void SetTransformationSet(B3dTransformationSet* pSet);
343 // B3dTransformationSet* GetTransformationSet() { return pTransformationSet; }
345 // // Beleuchtung setzen/lesen
346 // virtual void SetLightGroup(B3dLightGroup* pSet, BOOL bSetGlobal=TRUE);
347 // B3dLightGroup* GetLightGroup() { return pLightGroup; }
349 // // Szenenverwaltung
350 // virtual void StartScene() = 0;
351 // virtual void EndScene() = 0;
354 // virtual void SetScissorRegionPixel(const Rectangle& rRect, BOOL bActivate=TRUE);
355 // void SetScissorRegion(const Rectangle& rRect, BOOL bActivate=TRUE);
356 // virtual void ActivateScissorRegion(BOOL bNew);
357 // BOOL IsScissorRegionActive() { return bScissorRegionActive; }
358 // const Rectangle& GetScissorRegionPixel() { return aScissorRectangle; }
360 // // Dithering aktiv?
361 // BOOL GetDither() { return bDitherActive; }
362 // virtual void SetDither(BOOL bNew);
364 // // Dithering aktiv?
365 // BOOL GetForceFlat() { return bForceFlat; }
366 // void SetForceFlat(BOOL bNew) { bForceFlat = bNew; }
368 // // Attribute Color (und Alpha)
369 // virtual void SetColor(Color aNew);
370 // virtual Color GetColor();
373 // virtual void SetMaterial(Color aNew,
374 // Base3DMaterialValue=Base3DMaterialAmbient,
375 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
376 // Color GetMaterial(Base3DMaterialValue=Base3DMaterialAmbient,
377 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
378 // virtual void SetShininess(UINT16 nExponent,
379 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
380 // UINT16 GetShininess(Base3DMaterialMode=Base3DMaterialFrontAndBack);
381 // void ResetMaterial(Base3DMaterialMode=Base3DMaterialFrontAndBack);
384 // B3dTexture* ObtainTexture(TextureAttributes& rAtt);
385 // B3dTexture* ObtainTexture(TextureAttributes& rAtt, BitmapEx& rBitmapEx);
386 // void DeleteTexture(TextureAttributes& rAtt);
387 // void DeleteAllTextures();
389 // virtual B3dTexture* CreateTexture(TextureAttributes& rAtt, BitmapEx& rBitmapEx);
391 // virtual void DestroyTexture(B3dTexture*);
393 // virtual void SetActiveTexture(B3dTexture* pTex=NULL);
394 // B3dTexture* GetActiveTexture() { return pActiveTexture; }
395 // BOOL IsTextureActive() { return (pActiveTexture != NULL) ? TRUE : FALSE; }
397 // // Darstellungsqualitaet
398 // virtual void SetDisplayQuality(UINT8 nNew);
399 // UINT8 GetDisplayQuality();
402 // virtual void SetPolygonOffset(
403 // Base3DPolygonOffset eNew=Base3DPolygonOffsetLine, BOOL bNew=FALSE);
404 // BOOL GetPolygonOffset(Base3DPolygonOffset eNew=Base3DPolygonOffsetLine);
407 // virtual void SetRenderMode(Base3DRenderMode eNew,
408 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
409 // Base3DRenderMode GetRenderMode(
410 // Base3DMaterialMode=Base3DMaterialFrontAndBack);
413 // virtual void SetShadeModel(Base3DShadeModel eNew);
414 // Base3DShadeModel GetShadeModel();
417 // virtual void SetCullMode(Base3DCullMode eNew);
418 // Base3DCullMode GetCullMode();
421 // BOOL GetEdgeFlag();
422 // virtual void SetEdgeFlag(BOOL bNew=TRUE);
424 // // PointSize, LineWidth
425 // double GetPointSize();
426 // virtual void SetPointSize(double fNew=1.0);
427 // double GetLineWidth();
428 // virtual void SetLineWidth(double fNew=1.0);
430 // // geometrische Objekte hinzufuegen
432 // virtual Base3DObjectMode GetObjectMode();
434 // // geometrische Daten
435 // void AddVertex(Vector3D& rVertex);
436 // void AddVertex(Vector3D& rVertex,
437 // Vector3D& rNormal);
438 // void AddVertex(Vector3D& rVertex,
439 // Vector3D& rNormal, Vector3D& rTexPos);
440 // void AddVertex(B3dEntity& rEnt);
441 // void PostAddVertex(B3dEntity& rEnt);
443 // // Geometrische Daten uebergeben
444 // virtual B3dEntity& GetFreeEntity();
446 // // Primitiv beginnen/abschliessen
447 // void StartPrimitive(Base3DObjectMode eMode);
448 // void EndPrimitive();
450 // // Ein Objekt in Form einer B3dGeometry direkt ausgeben
451 // virtual void DrawPolygonGeometry(B3dGeometry& rGeometry, BOOL bOutline=FALSE);
454 // // Testfunktion um gezielte 3D-Ausgaben zu testen
455 // void Test(const Rectangle& rBound, const Rectangle& rVisible);
459 // // geometrische Daten uebergeben
460 // virtual void ImplPostAddVertex(B3dEntity& rEnt) = 0;
462 // // Direkter Zugriff auf B3dMaterial
463 // // fuer abgeleitete Klassen
464 // B3dMaterial& GetMaterialObject(Base3DMaterialMode=Base3DMaterialFront);
466 // // Primitiv beginnen/abschliessen
467 // virtual void ImplStartPrimitive() = 0;
468 // virtual void ImplEndPrimitive() = 0;
470 // // Geometrische Daten uebergeben
471 // virtual B3dEntity& ImplGetFreeEntity() = 0;
473 // // Funktionen, um mit hoeheren Primitiven umzugehen
474 // void HandleComplexPolygon();
477 }//end of namespace binfilter
479 #endif // _B3D_BASE3D_HXX