blob: 58d500adcbc018dec110366f8b5e63dc93b20026 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
#include <drawinglayer/drawinglayerdllapi.h>
#include <drawinglayer/processor3d/baseprocessor3d.hxx>
#include <basegfx/matrix/b3dhommatrix.hxx>
#include <basegfx/range/b2drange.hxx>
#include <basegfx/color/bcolormodifier.hxx>
#include <svtools/optionsdrawinglayer.hxx>
#include <boost/shared_ptr.hpp>
//////////////////////////////////////////////////////////////////////////////
// predefines
namespace basegfx {
class BZPixelRaster;
class B3DPolygon;
class B3DPolyPolygon;
}
namespace drawinglayer { namespace attribute {
class SdrSceneAttribute;
class SdrLightingAttribute;
class MaterialAttribute3D;
}}
namespace drawinglayer { namespace primitive3d {
class PolygonHairlinePrimitive3D;
class PolyPolygonMaterialPrimitive3D;
class GradientTexturePrimitive3D;
class HatchTexturePrimitive3D;
class BitmapTexturePrimitive3D;
class TransformPrimitive3D;
class ModifiedColorPrimitive3D;
}}
namespace drawinglayer { namespace texture {
class GeoTexSvx;
}}
//////////////////////////////////////////////////////////////////////////////
namespace drawinglayer
{
namespace processor3d
{
/** DefaultProcessor3D class
This processor renders all feeded primitives to a 2D raster where for all
primitives the two basic methods rasterconvertB3DPolygon for hairlines and
rasterconvertB3DPolyPolygon for filled geometry is called. It is a beseclass to
e.g. base a Z-Buffer supported renderer on the 3D primitive processing.
*/
class DefaultProcessor3D : public BaseProcessor3D
{
protected:
/// read-only scene infos (normal handling, etc...)
const attribute::SdrSceneAttribute& mrSdrSceneAttribute;
/// read-only light infos (lights, etc...)
const attribute::SdrLightingAttribute& mrSdrLightingAttribute;
/// renderer range. Need to be correctly set by the derived implementations
/// normally the (0, 0, W, H) range from mpBZPixelRaster
basegfx::B2DRange maRasterRange;
/// the modifiedColorPrimitive stack
basegfx::BColorModifierStack maBColorModifierStack;
/// the current active texture
boost::shared_ptr< texture::GeoTexSvx > mpGeoTexSvx;
/// the current active transparence texture
boost::shared_ptr< texture::GeoTexSvx > mpTransparenceGeoTexSvx;
/// SvtOptionsDrawinglayer incarnation to react on diverse settings
const SvtOptionsDrawinglayer maDrawinglayerOpt;
/// counter for entered transparence textures
sal_uInt32 mnTransparenceCounter;
/// bitfield
unsigned mbModulate : 1;
unsigned mbFilter : 1;
unsigned mbSimpleTextureActive : 1;
//////////////////////////////////////////////////////////////////////////////
// rendering support
void impRenderGradientTexturePrimitive3D(const primitive3d::GradientTexturePrimitive3D& rPrimitive, bool bTransparence);
void impRenderHatchTexturePrimitive3D(const primitive3d::HatchTexturePrimitive3D& rPrimitive);
void impRenderBitmapTexturePrimitive3D(const primitive3d::BitmapTexturePrimitive3D& rPrimitive);
void impRenderModifiedColorPrimitive3D(const primitive3d::ModifiedColorPrimitive3D& rModifiedCandidate);
void impRenderPolygonHairlinePrimitive3D(const primitive3d::PolygonHairlinePrimitive3D& rPrimitive);
void impRenderPolyPolygonMaterialPrimitive3D(const primitive3d::PolyPolygonMaterialPrimitive3D& rPrimitive);
void impRenderTransformPrimitive3D(const primitive3d::TransformPrimitive3D& rTransformCandidate);
//////////////////////////////////////////////////////////////////////////////
// rasterconversions for filled and non-filled polygons. These NEED to be
// implemented from derivations
virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const = 0;
virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const = 0;
// the processing method for a single, known primitive
virtual void processBasePrimitive3D(const primitive3d::BasePrimitive3D& rBasePrimitive);
public:
DefaultProcessor3D(
const geometry::ViewInformation3D& rViewInformation,
const attribute::SdrSceneAttribute& rSdrSceneAttribute,
const attribute::SdrLightingAttribute& rSdrLightingAttribute);
virtual ~DefaultProcessor3D();
/// data read access
const attribute::SdrSceneAttribute& getSdrSceneAttribute() const { return mrSdrSceneAttribute; }
const attribute::SdrLightingAttribute& getSdrLightingAttribute() const { return mrSdrLightingAttribute; }
/// data read access renderer stuff
const basegfx::BColorModifierStack& getBColorModifierStack() const { return maBColorModifierStack; }
const boost::shared_ptr< texture::GeoTexSvx >& getGeoTexSvx() const { return mpGeoTexSvx; }
const boost::shared_ptr< texture::GeoTexSvx >& getTransparenceGeoTexSvx() const { return mpTransparenceGeoTexSvx; }
sal_uInt32 getTransparenceCounter() const { return mnTransparenceCounter; }
bool getModulate() const { return mbModulate; }
bool getFilter() const { return mbFilter; }
bool getSimpleTextureActive() const { return mbSimpleTextureActive; }
/// access to Drawinglayer configuration options
const SvtOptionsDrawinglayer& getOptionsDrawinglayer() const { return maDrawinglayerOpt; }
};
} // end of namespace processor3d
} // end of namespace drawinglayer
//////////////////////////////////////////////////////////////////////////////
#endif // INCLUDED_DRAWINGLAYER_PROCESSOR3D_DEFAULTPROCESSOR3D_HXX
// eof