forked from amazingfate/loongoffice
This try uses full 3D renderers working on the same ZBuffer target, but are capable to render one stripe per thread. This is rougher in granularity and uses multiple cores better than the first try (see gerrit 24393) which was too fine-granular being based on scanline render parallelization. SecUred some more classes based on SdrPrimitive3D for multi- theaded usage (places where local buffered stuff is done) Change-Id: I4ddd5885ad41dd6432d0695e528818a86e427bfd Reviewed-on: https://gerrit.libreoffice.org/24538 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Noel Grandin <noelgrandin@gmail.com> Reviewed-by: Armin Le Grand <Armin.Le.Grand@cib.de>
107 lines
3.8 KiB
C++
107 lines
3.8 KiB
C++
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
|
|
/*
|
|
* This file is part of the LibreOffice project.
|
|
*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
*
|
|
* This file incorporates work covered by the following license notice:
|
|
*
|
|
* 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 .
|
|
*/
|
|
|
|
#ifndef INCLUDED_DRAWINGLAYER_PROCESSOR3D_ZBUFFERPROCESSOR3D_HXX
|
|
#define INCLUDED_DRAWINGLAYER_PROCESSOR3D_ZBUFFERPROCESSOR3D_HXX
|
|
|
|
#include <drawinglayer/drawinglayerdllapi.h>
|
|
|
|
#include <drawinglayer/processor3d/defaultprocessor3d.hxx>
|
|
#include <vcl/bitmapex.hxx>
|
|
|
|
namespace basegfx {
|
|
class BZPixelRaster;
|
|
}
|
|
|
|
namespace drawinglayer {
|
|
namespace attribute {
|
|
class SdrSceneAttribute;
|
|
class SdrLightingAttribute;
|
|
class MaterialAttribute3D;
|
|
}
|
|
namespace geometry {
|
|
class ViewInformation2D;
|
|
}
|
|
}
|
|
|
|
class ZBufferRasterConverter3D;
|
|
class RasterPrimitive3D;
|
|
|
|
namespace drawinglayer
|
|
{
|
|
namespace processor3d
|
|
{
|
|
/**
|
|
This 3D renderer derived from DefaultProcessor3D renders all feeded primitives to a 2D
|
|
raster bitmap using a Z-Buffer based approach. It is able to supersample and to handle
|
|
transparent content.
|
|
*/
|
|
class ZBufferProcessor3D : public DefaultProcessor3D
|
|
{
|
|
private:
|
|
/// the raster target, a Z-Buffer
|
|
basegfx::BZPixelRaster& mrBZPixelRaster;
|
|
|
|
/// inverse of EyeToView for rasterconversion with evtl. Phong shading
|
|
basegfx::B3DHomMatrix maInvEyeToView;
|
|
|
|
/// The raster converter for Z-Buffer
|
|
ZBufferRasterConverter3D* mpZBufferRasterConverter3D;
|
|
|
|
/* AA value. Defines how many oversamples will be used in X and Y. Values 0, 1
|
|
will switch it off while e.g. 2 will use 2x2 pixels for each pixel to create
|
|
*/
|
|
sal_uInt16 mnAntiAlialize;
|
|
|
|
/* remembered RasterPrimitive3D's which need to be painted back to front
|
|
for transparent 3D parts
|
|
*/
|
|
std::vector< RasterPrimitive3D >* mpRasterPrimitive3Ds;
|
|
|
|
sal_uInt32 mnStartLine;
|
|
sal_uInt32 mnStopLine;
|
|
|
|
// rasterconversions for filled and non-filled polygons
|
|
|
|
virtual void rasterconvertB3DPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolygon& rHairline) const override;
|
|
virtual void rasterconvertB3DPolyPolygon(const attribute::MaterialAttribute3D& rMaterial, const basegfx::B3DPolyPolygon& rFill) const override;
|
|
|
|
public:
|
|
ZBufferProcessor3D(
|
|
const geometry::ViewInformation3D& rViewInformation3D,
|
|
const attribute::SdrSceneAttribute& rSdrSceneAttribute,
|
|
const attribute::SdrLightingAttribute& rSdrLightingAttribute,
|
|
const basegfx::B2DRange& rVisiblePart,
|
|
sal_uInt16 nAntiAlialize,
|
|
double fFullViewSizeX,
|
|
double fFullViewSizeY,
|
|
basegfx::BZPixelRaster& rBZPixelRaster,
|
|
sal_uInt32 nStartLine,
|
|
sal_uInt32 nStopLine);
|
|
virtual ~ZBufferProcessor3D();
|
|
|
|
void finish();
|
|
};
|
|
}
|
|
}
|
|
|
|
#endif
|
|
|
|
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|