348 lines
9.6 KiB
C++
348 lines
9.6 KiB
C++
/* -----------------------------------------------------------------------------
|
|
GSFramework
|
|
Copyright 2001-2013 Emmanuel Julien. All Rights Reserved.
|
|
----------------------------------------------------------------------------- */
|
|
|
|
|
|
#include "binding_helpers.h"
|
|
#include "scene3d/mlight.h"
|
|
|
|
using namespace GS::S3D;
|
|
using namespace GS::Script;
|
|
|
|
|
|
static CObjectType light_derived_types[] = { typetag_Item, typetag_Light, typetag_Undefined };
|
|
|
|
SQInteger LightGetDiffuseIntensity(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->diffuse_intensity)
|
|
}
|
|
|
|
SQInteger LightSetProjectionTexture(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETSAFEPTR(t, GS::Render::Texture, typetag_Texture)
|
|
l->render_data->projection_texture = t;
|
|
__SQ_GETEND
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightSetDiffuseIntensity(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(i)
|
|
__SQ_GETEND
|
|
l->diffuse_intensity = i;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetDiffuseColor(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNVECTOR(l->diffuse_color)
|
|
}
|
|
SQInteger LightSetDiffuseColor(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETVECTOR(color)
|
|
__SQ_GETEND
|
|
l->diffuse_color = color;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetSpecularIntensity(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->specular_intensity)
|
|
}
|
|
SQInteger LightSetSpecularIntensity(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(i)
|
|
__SQ_GETEND
|
|
l->specular_intensity = i;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetSpecularColor(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNVECTOR(l->specular_color)
|
|
}
|
|
SQInteger LightSetSpecularColor(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETVECTOR(color)
|
|
__SQ_GETEND
|
|
l->specular_color = color;
|
|
__SQ_RETURN
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
SQInteger LightSetConeAngle(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(angle)
|
|
__SQ_GETEND
|
|
l->cone_angle = angle;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetConeAngle(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->cone_angle)
|
|
}
|
|
SQInteger LightSetEdgeAngle(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(angle)
|
|
__SQ_GETEND
|
|
l->edge_angle = angle;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetEdgeAngle(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->edge_angle)
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
//------------------------------------------------------------------------------
|
|
SQInteger LightSetRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(range)
|
|
__SQ_GETEND
|
|
l->range = range;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->range)
|
|
}
|
|
SQInteger LightSetShadowRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(shadow_range)
|
|
__SQ_GETEND
|
|
l->shadow_range = shadow_range;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetShadowRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->shadow_range)
|
|
}
|
|
SQInteger LightSetVolumeRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETFLOAT(range)
|
|
__SQ_GETEND
|
|
l->volume_range = range;
|
|
__SQ_RETURN
|
|
}
|
|
SQInteger LightGetVolumeRange(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNFLOAT(l->volume_range)
|
|
}
|
|
//------------------------------------------------------------------------------
|
|
|
|
SQInteger LightGetItem(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNSAFEPTR((MItem *)l, typetag_Item)
|
|
}
|
|
SQInteger LightGetType(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSINGLE(__SQ_GETCOBJECTBASE(l, MLight, light_derived_types))
|
|
__SQ_RETURNINT(l->model)
|
|
}
|
|
SQInteger LightSetType(HSQUIRRELVM vm)
|
|
{
|
|
__SQ_GETSTART(2)
|
|
__SQ_GETCOBJECTBASE(l, MLight, light_derived_types)
|
|
__SQ_GETINT(_type)
|
|
__SQ_GETEND
|
|
l->model = (GS::Core::Light::Model)_type;
|
|
__SQ_RETURN
|
|
}
|
|
|
|
//------------------------------------------------------------------------------
|
|
void RegisterLightBinding(HSQUIRRELVM vm)
|
|
{
|
|
/*#
|
|
Topic: Light
|
|
Type: Light
|
|
Related: Item
|
|
#*/
|
|
|
|
/*#
|
|
Section: LightColor
|
|
Desc: Light color functions
|
|
#*/
|
|
/*#
|
|
Func: LightGetDiffuseIntensity
|
|
Proto: float:Light
|
|
Desc: Get light diffuse intensity.
|
|
#*/
|
|
sq_register(vm, LightGetDiffuseIntensity, "LightGetDiffuseIntensity", _SC(".x"));
|
|
/*#
|
|
Func: LightGetDiffuseColor
|
|
Proto: Vector:Light
|
|
Desc: Get light diffuse color.
|
|
#*/
|
|
sq_register(vm, LightGetDiffuseColor, "LightGetDiffuseColor", _SC(".x"));
|
|
/*#
|
|
Func: LightSetDiffuseIntensity
|
|
Proto: void:Light,float intensity
|
|
Desc: Set light diffuse intensity.
|
|
#*/
|
|
sq_register(vm, LightSetDiffuseIntensity, "LightSetDiffuseIntensity", _SC(".xn"));
|
|
/*#
|
|
Func: LightSetDiffuseColor
|
|
Proto: void:Light,Vector color
|
|
Desc: Set light diffuse color.
|
|
#*/
|
|
sq_register(vm, LightSetDiffuseColor, "LightSetDiffuseColor", _SC(".xx"));
|
|
/*#
|
|
Func: LightGetSpecularIntensity
|
|
Proto: float:Light
|
|
Desc: Get light specular intensity.
|
|
#*/
|
|
sq_register(vm, LightGetSpecularIntensity, "LightGetSpecularIntensity", _SC(".x"));
|
|
/*#
|
|
Func: LightGetSpecularColor
|
|
Proto: Vector:Light
|
|
Desc: Get light specular color.
|
|
#*/
|
|
sq_register(vm, LightGetSpecularColor, "LightGetSpecularColor", _SC(".x"));
|
|
/*#
|
|
Func: LightSetSpecularIntensity
|
|
Proto: void:Light,float intensity
|
|
Desc: Set light specular intensity.
|
|
#*/
|
|
sq_register(vm, LightSetSpecularIntensity, "LightSetSpecularIntensity", _SC(".xn"));
|
|
/*#
|
|
Func: LightSetSpecularColor
|
|
Proto: void:Light,Vector color
|
|
Desc: Set light specular color.
|
|
#*/
|
|
sq_register(vm, LightSetSpecularColor, "LightSetSpecularColor", _SC(".xx"));
|
|
|
|
/*#
|
|
Section: LightSpot
|
|
Desc: Spot functions
|
|
#*/
|
|
/*#
|
|
Func: LightSetConeAngle
|
|
Proto: void:Light,float angle
|
|
Desc: Set light cone angle in radian, the cone angle is the spot area where intensity is at its maximum.
|
|
#*/
|
|
sq_register(vm, LightSetConeAngle, "LightSetConeAngle", _SC(".xn"));
|
|
/*#
|
|
Func: LightSetEdgeAngle
|
|
Proto: void:Light,float angle
|
|
Desc: Set light edge angle in radian, the edge angle is the spot area where intensity decreases from its maximum toward zero.
|
|
#*/
|
|
sq_register(vm, LightSetEdgeAngle, "LightSetEdgeAngle", _SC(".xn"));
|
|
/*#
|
|
Func: LightGetConeAngle
|
|
Proto: float:Light
|
|
Desc: Get light cone angle in radian.
|
|
#*/
|
|
sq_register(vm, LightGetConeAngle, "LightGetConeAngle", _SC(".x"));
|
|
/*#
|
|
Func: LightGetEdgeAngle
|
|
Proto: float:Light
|
|
Desc: Get light edge angle in radian.
|
|
#*/
|
|
sq_register(vm, LightGetEdgeAngle, "LightGetEdgeAngle", _SC(".x"));
|
|
|
|
/*#
|
|
Section: LightGeneric
|
|
Desc: Generic functions
|
|
#*/
|
|
/*#
|
|
Func: LightSetRange
|
|
Proto: void:Light,float range
|
|
Desc: Set the light range in meter.
|
|
#*/
|
|
sq_register(vm, LightSetRange, "LightSetRange", _SC(".xn"));
|
|
/*#
|
|
Func: LightGetRange
|
|
Proto: float:Light
|
|
Desc: Return the light range in meter.
|
|
#*/
|
|
sq_register(vm, LightGetRange, "LightGetRange", _SC(".x"));
|
|
/*#
|
|
Func: LightSetShadowRange
|
|
Proto: void:Light,float range
|
|
Desc: Set the light range in meter.
|
|
#*/
|
|
sq_register(vm, LightSetShadowRange, "LightSetShadowRange", _SC(".xn"));
|
|
/*#
|
|
Func: LightGetRange
|
|
Proto: float:Light
|
|
Desc: Return the light range in meter.
|
|
#*/
|
|
sq_register(vm, LightGetShadowRange, "LightGetShadowRange", _SC(".x"));
|
|
/*#
|
|
Func: LightSetVolumeRange
|
|
Proto: void:Light,float range
|
|
Desc: Set the light volume range in meter. The volume range has no relation with the volumetric system and is only a performance hint used by some renderer. If unsure this value should be kept equal to the light range.
|
|
#*/
|
|
sq_register(vm, LightSetVolumeRange, "LightSetVolumeRange", _SC(".xn"));
|
|
/*#
|
|
Func: LightGetVolumeRange
|
|
Proto: float:Light
|
|
Desc: Return the light volume range in meter.
|
|
#*/
|
|
sq_register(vm, LightGetVolumeRange, "LightGetVolumeRange", _SC(".x"));
|
|
|
|
/*#
|
|
Func: LightSetProjectionTexture
|
|
Proto: void:Light,Texture
|
|
Desc: Set light projection texture.
|
|
#*/
|
|
sq_register(vm, LightSetProjectionTexture, "LightSetProjectionTexture", _SC(".xx"));
|
|
/*#
|
|
Func: LightGetItem
|
|
Proto: Item:Light
|
|
Desc: Get light item.
|
|
#*/
|
|
sq_register(vm, LightGetItem, "LightGetItem", _SC(".x"));
|
|
/*#
|
|
Func: LightGetType
|
|
Proto: LightType:Light
|
|
Desc: Get light type.
|
|
#*/
|
|
sq_register(vm, LightGetType, "LightGetType", _SC(".x"));
|
|
/*#
|
|
Func: LightSetType
|
|
Proto: void:Light,LightType type
|
|
Desc: Set light type.
|
|
#*/
|
|
sq_register(vm, LightSetType, "LightSetType", _SC(".xi"));
|
|
|
|
/*#
|
|
Enum: LightType
|
|
Values: LightTypeNone,LightTypeSpot,LightTypeLinear,LightTypePoint
|
|
#*/
|
|
using GS::Core::Light;
|
|
|
|
sq_pushstring(vm, "LightTypeNone", -1); sq_pushinteger(vm, Light::Model_None); sq_newslot(vm, -3, true);
|
|
sq_pushstring(vm, "LightTypeSpot", -1); sq_pushinteger(vm, Light::Model_Spot); sq_newslot(vm, -3, true);
|
|
sq_pushstring(vm, "LightTypeLinear", -1); sq_pushinteger(vm, Light::Model_Linear); sq_newslot(vm, -3, true);
|
|
sq_pushstring(vm, "LightTypePoint", -1); sq_pushinteger(vm, Light::Model_Point); sq_newslot(vm, -3, true);
|
|
}
|
|
//------------------------------------------------------------------------------
|