paysages3d/lib_paysages/atmosphere/atmosphere.h

84 lines
2.2 KiB
C

#ifndef _PAYSAGES_ATMOSPHERE_INTERFACE_H_
#define _PAYSAGES_ATMOSPHERE_INTERFACE_H_
#include "../shared/types.h"
#include "../euclid.h"
#include "../color.h"
#include "../pack.h"
#include "../layers.h"
#ifdef __cplusplus
extern "C" {
#endif
/*** TO EXTRACT ***/
typedef void* (*FuncObjectCreate)();
typedef void (*FuncObjectDelete)(void* object);
typedef void (*FuncObjectCopy)(void* source, void* destination);
typedef void (*FuncObjectValidate)(void* object);
typedef void (*FuncObjectSave)(PackStream* stream, void* object);
typedef void (*FuncObjectLoad)(PackStream* stream, void* object);
typedef void (*FuncObjectBind)(void* base, void* sub);
typedef struct {
FuncObjectCreate create;
FuncObjectDelete destroy;
FuncObjectCopy copy;
FuncObjectValidate validate;
FuncObjectSave save;
FuncObjectLoad load;
} StandardDefinition;
typedef struct {
FuncObjectCreate create;
FuncObjectDelete destroy;
FuncObjectBind bind;
} StandardRenderer;
/*** TO EXTRACT ***/
typedef enum
{
ATMOSPHERE_MODEL_PREETHAM = 0,
ATMOSPHERE_MODEL_BRUNETON = 1
} AtmosphereModel;
typedef struct
{
AtmosphereModel model;
double daytime;
double humidity;
Color sun_color;
double sun_radius;
double sun_halo_size;
Curve* sun_halo_profile;
double dome_lighting;
} AtmosphereDefinition;
typedef int (*FuncAtmosphereGetSkydomeLights)(Renderer* renderer, LightDefinition* array, int max_lights);
typedef Color (*FuncAtmosphereApplyAerialPerspective)(Renderer* renderer, Vector3 location, Color base);
typedef Color (*FuncAtmosphereGetSkyColor)(Renderer* renderer, Vector3 direction);
typedef Vector3 (*FuncAtmosphereGetSunDirection)(Renderer* renderer);
typedef struct
{
AtmosphereDefinition* definition;
FuncAtmosphereGetSkydomeLights getSkydomeLights;
FuncAtmosphereApplyAerialPerspective applyAerialPerspective;
FuncAtmosphereGetSkyColor getSkyColor;
FuncAtmosphereGetSunDirection getSunDirection;
void* _internal_data;
} AtmosphereRenderer;
extern StandardDefinition AtmosphereDefinitionClass;
extern StandardRenderer AtmosphereRendererClass;
void atmosphereRenderSkydome(Renderer* renderer);
#ifdef __cplusplus
}
#endif
#endif