/**
* $Id:$
* ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
*
* The contents of this file may be used under the terms of either the GNU
* General Public License Version 2 or later (the "GPL", see
* http://www.gnu.org/licenses/gpl.html ), or the Blender License 1.0 or
* later (the "BL", see http://www.blender.org/BL/ ) which has to be
* bought from the Blender Foundation to become active, in which case the
* above mentioned GPL option does not apply.
*
* The Original Code is Copyright (C) 2002 by NaN Holding BV.
* All rights reserved.
*
* The Original Code is: all of this file.
*
* Contributor(s): none yet.
*
* ***** END GPL/BL DUAL LICENSE BLOCK *****
*/
/*
* vanillaRenderPipe_int.h
*
* Version: $Id: vanillaRenderPipe_int.h,v 1.4 2000/09/14 09:11:40 nzc Exp $
*/
#ifndef VANILLARENDERPIPE_INT_H
#define VANILLARENDERPIPE_INT_H "$Id: vanillaRenderPipe_int.h,v 1.4 2000/09/14 09:11:40 nzc Exp $"
#include "vanillaRenderPipe_types.h"
#include "zbufferdatastruct_types.h"
/**
* Z buffer initializer, for new pipeline.
*
* AColourBuffer : colour buffer for one line
* APixbufExt : pixel data buffer for one line, depth RE_ZBUFLEN
*
*/
void initRenderBuffers(int width);
/* void initRenderBuffers(void); */
/**
* Z buffer destructor, frees stuff from initZBuffers().
*/
void freeRenderBuffers(void);
/**
* Fill the accumulation buffer APixbufExt with face and halo indices.
* Note: Uses globals.
* @param y the line number to set
*/
void calcZBufLine(int y);
/**
* Shade and render the pixels in this line, into AColourBuffer
* Note: Uses globals.
* @param y the line number to set
*/
void renderZBufLine(int y);
/**
* Count and sort the list behind ap into buf. Sorts on min. distance.
* Low index <=> high z
*/
int countAndSortPixelFaces(int buf[RE_MAX_FACES_PER_PIXEL][5],
RE_APixstrExt *ap);
/**
* Oversample buffer with conflict resolution. Output to sampcol.
* - proper antialiasing on faces
* - add-blending on faces
* - alpha thresholding on all faces, and on halos
* - traced
* @param zrow the sorted list of faces and distances
* @param totvlak the number of faces in this list
* @param x the x pixel coordinate in SCS
* @param y the y pixel coordinate in SCS
* @param osaNr the number times the picture is oversampled
*/
void oversamplePixel(int zrow[RE_MAX_FACES_PER_PIXEL][RE_PIXELFIELDSIZE],
int totvlak, float x, float y, int osaNr);
/**
* Calculate the view depth to this object on this location, with
* the current view parameters in R.
*/
int calcDepth(float x, float y, void *data, int type);
/**
* Fills in distances of all faces in a z buffer, for given jitter settings.
*/
int fillZBufDistances(void);
/**
* Fills in distances of faces in the z buffer.
*
* Halo z buffering ----------------------------------------------
*
* A halo is treated here as a billboard: no z-extension, always
* oriented perpendicular to the viewer. The rest of the z-buffer
* stores face-numbers first, then calculates colours as the
* final image is rendered. We'll use the same approach here,
* which differs from the original method (which was add halos per
* scan line). This means that the z-buffer now also needs to
* store info about what sort of 'thing' the index refers to.
*
* Halo extension:
* h.maxy ---------
* | h.xs + h.rad
* | h.xs
* | h.xs - h.rad
* h.miny ---------
*
* These coordinates must be clipped to picture size.
* I'm not quite certain about halo numbering.
*
* Halos and jittering -------------------------------------------
*
* Halos were not jittered previously. Now they are. I wonder
* whether this may have some adverse effects here.
* @return 1 for succes, 0 if the operation was interrupted.
*/
int zBufferAllFaces(void);
/**
* Fills in distances of halos in the z buffer.
* @return 1 for succes, 0 if the operation was interrupted.
*/
int zBufferAllHalos(void);
/**
* New fill function for z buffer, for edge-only rendering.
*/
void zBufferFillEdge(float *vec1, float *vec2);
/**
* New fill function for z buffer.
*/
void zBufferFillFace(float *v1, float *v2, float *v3);
/**
* One more filler: fill in halo data in z buffer.
* Empty so far, but may receive content of halo loop.
*/
void zBufferFillHalo(void);
/**
* Copy the colour buffer output to R.rectot, to line y.
*/
void transferColourBufferToOutput(int y);
/**
* Set the colour buffer fields to zero.
*/
void eraseColBuf(RE_COLBUFTYPE *buf);
/**
* Blend source over dest, and leave result in dest. 1 pixel.
*/
void blendOverFloat(int type, float* dest, float* source, void* data);
/**
* Blend source over dest, and leave result in dest. 1 pixel into
* multiple bins.
*/
void blendOverFloatRow(int type, float* dest, float* source,
void* data, int mask, int osaNr) ;
#endif /* VANILLARENDERPIPE_INT_H */