|
|
@@ -29,7 +29,9 @@
|
|
|
#include "../Graphics/CustomGeometry.h"
|
|
|
#include "../Graphics/DebugRenderer.h"
|
|
|
#include "../Graphics/DecalSet.h"
|
|
|
+#include "../Graphics/Geometry.h"
|
|
|
#include "../Graphics/Graphics.h"
|
|
|
+#include "../Graphics/IndexBuffer.h"
|
|
|
#include "../Graphics/Light.h"
|
|
|
#include "../Graphics/Material.h"
|
|
|
#include "../Graphics/Octree.h"
|
|
|
@@ -47,6 +49,7 @@
|
|
|
#include "../Graphics/Texture3D.h"
|
|
|
#include "../Graphics/TextureCube.h"
|
|
|
#include "../Graphics/Skybox.h"
|
|
|
+#include "../Graphics/VertexBuffer.h"
|
|
|
#include "../Graphics/Zone.h"
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
|
@@ -574,6 +577,145 @@ static const TechniqueEntry& MaterialGetTechniqueEntry(unsigned index, Material*
|
|
|
return ptr->GetTechniqueEntry(index);
|
|
|
}
|
|
|
|
|
|
+static bool VertexBufferSetData(VectorBuffer& src, VertexBuffer* dest)
|
|
|
+{
|
|
|
+ // Make sure there is enough data
|
|
|
+ if (dest->GetVertexCount() && src.GetSize() >= dest->GetVertexCount() * dest->GetVertexSize())
|
|
|
+ return dest->SetData(&src.GetBuffer()[0]);
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static bool VertexBufferSetDataRange(VectorBuffer& src, unsigned start, unsigned count, bool discard, VertexBuffer* dest)
|
|
|
+{
|
|
|
+ // Make sure there is enough data
|
|
|
+ if (dest->GetVertexCount() && src.GetSize() >= count * dest->GetVertexSize())
|
|
|
+ return dest->SetDataRange(&src.GetBuffer()[0], start, count, discard);
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static VectorBuffer VertexBufferGetData(VertexBuffer* src)
|
|
|
+{
|
|
|
+ VectorBuffer ret;
|
|
|
+ void* data = src->Lock(0, src->GetVertexCount(), false);
|
|
|
+
|
|
|
+ if (data)
|
|
|
+ {
|
|
|
+ ret.Write(data, src->GetVertexCount() * src->GetVertexSize());
|
|
|
+ ret.Seek(0);
|
|
|
+ src->Unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static bool IndexBufferSetData(VectorBuffer& src, IndexBuffer* dest)
|
|
|
+{
|
|
|
+ // Make sure there is enough data
|
|
|
+ if (dest->GetIndexCount() && src.GetSize() >= dest->GetIndexCount() * dest->GetIndexSize())
|
|
|
+ return dest->SetData(&src.GetBuffer()[0]);
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static bool IndexBufferSetDataRange(VectorBuffer& src, unsigned start, unsigned count, bool discard, IndexBuffer* dest)
|
|
|
+{
|
|
|
+ // Make sure there is enough data
|
|
|
+ if (dest->GetIndexCount() && src.GetSize() >= count * dest->GetIndexSize())
|
|
|
+ return dest->SetDataRange(&src.GetBuffer()[0], start, count, discard);
|
|
|
+ else
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
+static VectorBuffer IndexBufferGetData(IndexBuffer* src)
|
|
|
+{
|
|
|
+ VectorBuffer ret;
|
|
|
+ void* data = src->Lock(0, src->GetIndexCount(), false);
|
|
|
+
|
|
|
+ if (data)
|
|
|
+ {
|
|
|
+ ret.Write(data, src->GetIndexCount() * src->GetIndexSize());
|
|
|
+ ret.Seek(0);
|
|
|
+ src->Unlock();
|
|
|
+ }
|
|
|
+
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static void RegisterBuffers(asIScriptEngine* engine)
|
|
|
+{
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_NONE", (void*)&MASK_NONE);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_POSITION", (void*)&MASK_POSITION);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_NORMAL", (void*)&MASK_NORMAL);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_COLOR", (void*)&MASK_COLOR);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_TEXCOORD1", (void*)&MASK_TEXCOORD1);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_TEXCOORD2", (void*)&MASK_TEXCOORD2);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_CUBETEXCOORD1", (void*)&MASK_CUBETEXCOORD1);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_CUBETEXCOORD2", (void*)&MASK_CUBETEXCOORD2);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_TANGENT", (void*)&MASK_TANGENT);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_BLENDWEIGHTS", (void*)&MASK_BLENDWEIGHTS);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_BLENDINDICES", (void*)&MASK_BLENDINDICES);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX1", (void*)&MASK_INSTANCEMATRIX1);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX2", (void*)&MASK_INSTANCEMATRIX2);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_INSTANCEMATRIX3", (void*)&MASK_INSTANCEMATRIX3);
|
|
|
+ engine->RegisterGlobalProperty("const uint MASK_DEFAULT", (void*)&MASK_DEFAULT);
|
|
|
+
|
|
|
+ engine->RegisterEnum("PrimitiveType");
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_LIST", TRIANGLE_LIST);
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "LINE_LIST", LINE_LIST);
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "POINT_LIST", POINT_LIST);
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_STRIP", TRIANGLE_STRIP);
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "LINE_STRIP", LINE_STRIP);
|
|
|
+ engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_FAN", TRIANGLE_FAN);
|
|
|
+
|
|
|
+ RegisterObject<VertexBuffer>(engine, "VertexBuffer");
|
|
|
+ RegisterObjectConstructor<VertexBuffer>(engine, "VertexBuffer");
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "void SetSize(uint, uint, bool dynamic = false)", asMETHOD(VertexBuffer, SetSize), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "bool SetData(VectorBuffer&)", asFUNCTION(VertexBufferSetData), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "bool SetDataRange(VectorBuffer&, uint, uint, bool discard = false)", asFUNCTION(VertexBufferSetDataRange), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "VectorBuffer GetData()", asFUNCTION(VertexBufferGetData), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "void set_shadowed(bool)", asMETHOD(VertexBuffer, SetShadowed), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "bool get_shadowed() const", asMETHOD(VertexBuffer, IsShadowed), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "bool get_dynamic() const", asMETHOD(VertexBuffer, IsDynamic), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "uint get_vertexCount() const", asMETHOD(VertexBuffer, GetVertexCount), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "uint get_vertexSize() const", asMETHODPR(VertexBuffer, GetVertexSize, () const, unsigned), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("VertexBuffer", "uint get_elementMask() const", asMETHOD(VertexBuffer, GetElementMask), asCALL_THISCALL);
|
|
|
+
|
|
|
+ RegisterObject<IndexBuffer>(engine, "IndexBuffer");
|
|
|
+ RegisterObjectConstructor<IndexBuffer>(engine, "IndexBuffer");
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "void SetSize(uint, bool, bool dynamic = false)", asMETHOD(IndexBuffer, SetSize), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "bool SetData(VectorBuffer&)", asFUNCTION(IndexBufferSetData), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "bool SetDataRange(VectorBuffer&, uint, uint, bool discard = false)", asFUNCTION(IndexBufferSetDataRange), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "VectorBuffer GetData()", asFUNCTION(IndexBufferGetData), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "void set_shadowed(bool)", asMETHOD(IndexBuffer, SetShadowed), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "bool get_shadowed() const", asMETHOD(IndexBuffer, IsShadowed), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "bool get_dynamic() const", asMETHOD(IndexBuffer, IsDynamic), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "uint get_indexCount() const", asMETHOD(IndexBuffer, GetIndexCount), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("IndexBuffer", "uint get_indexSize() const", asMETHOD(IndexBuffer, GetIndexSize), asCALL_THISCALL);
|
|
|
+
|
|
|
+ RegisterObject<Geometry>(engine, "Geometry");
|
|
|
+ RegisterObjectConstructor<Geometry>(engine, "Geometry");
|
|
|
+ engine->RegisterObjectMethod("Geometry", "void set_numVertexBuffers(uint)", asMETHOD(Geometry, SetNumVertexBuffers), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_numVertexBuffers() const", asMETHOD(Geometry, GetNumVertexBuffers), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "bool SetVertexBuffer(uint, VertexBuffer@+, uint elementMask = MASK_DEFAULT)", asMETHOD(Geometry, SetVertexBuffer), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "void SetIndexBuffer(IndexBuffer@+)", asMETHOD(Geometry, SetIndexBuffer), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "bool SetDrawRange(PrimitiveType, uint, uint, bool getUsedVertexRange = true)", asMETHODPR(Geometry, SetDrawRange, (PrimitiveType, unsigned, unsigned, bool), bool),asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "bool SetDrawRange(PrimitiveType, uint, uint, uint, uint, bool checkIllegal = true)", asMETHODPR(Geometry, SetDrawRange, (PrimitiveType, unsigned, unsigned, unsigned, unsigned, bool), bool), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "VertexBuffer@+ get_vertexBuffers(uint) const", asMETHOD(Geometry, GetVertexBuffer), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_vertexElementMasks(uint) const", asMETHOD(Geometry, GetVertexElementMask), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "void set_indexBuffer(IndexBuffer@+)", asMETHOD(Geometry, SetIndexBuffer), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "IndexBuffer@+ get_indexBuffer() const", asMETHOD(Geometry, GetIndexBuffer), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "PrimitiveType get_primitiveType() const", asMETHOD(Geometry, GetPrimitiveType), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_indexStart() const", asMETHOD(Geometry, GetIndexStart), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_indexCount() const", asMETHOD(Geometry, GetIndexCount), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_vertexStart() const", asMETHOD(Geometry, GetVertexStart), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "uint get_vertexCount() const", asMETHOD(Geometry, GetVertexCount), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "void set_lodDistance(float)", asMETHOD(Geometry, SetLodDistance), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "float get_lodDistance() const", asMETHOD(Geometry, GetLodDistance), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Geometry", "bool get_empty() const", asMETHOD(Geometry, IsEmpty), asCALL_THISCALL);
|
|
|
+}
|
|
|
+
|
|
|
static void RegisterMaterial(asIScriptEngine* engine)
|
|
|
{
|
|
|
engine->RegisterObjectType("BiasParameters", sizeof(BiasParameters), asOBJ_VALUE | asOBJ_POD | asOBJ_APP_CLASS_C);
|
|
|
@@ -711,10 +853,17 @@ static void RegisterModel(asIScriptEngine* engine)
|
|
|
{
|
|
|
RegisterResource<Model>(engine, "Model");
|
|
|
engine->RegisterObjectMethod("Model", "Model@ Clone(const String&in cloneName = String()) const", asFUNCTION(ModelClone), asCALL_CDECL_OBJLAST);
|
|
|
+ engine->RegisterObjectMethod("Model", "bool SetGeometry(uint, uint, Geometry@+)", asMETHOD(Model, SetGeometry), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "Geometry@+ GetGeometry(uint, uint) const", asMETHOD(Model, GetGeometry), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "void set_boundingBox(const BoundingBox&in)", asMETHOD(Model, SetBoundingBox), asCALL_THISCALL);
|
|
|
engine->RegisterObjectMethod("Model", "const BoundingBox& get_boundingBox() const", asMETHOD(Model, GetBoundingBox), asCALL_THISCALL);
|
|
|
engine->RegisterObjectMethod("Model", "Skeleton@+ get_skeleton()", asMETHOD(Model, GetSkeleton), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "void set_numGeometries(uint)", asMETHOD(Model, SetNumGeometries), asCALL_THISCALL);
|
|
|
engine->RegisterObjectMethod("Model", "uint get_numGeometries() const", asMETHOD(Model, GetNumGeometries), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "bool set_numGeometryLodLevels(uint, uint)", asMETHOD(Model, SetNumGeometryLodLevels), asCALL_THISCALL);
|
|
|
engine->RegisterObjectMethod("Model", "uint get_numGeometryLodLevels(uint) const", asMETHOD(Model, GetNumGeometryLodLevels), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "bool set_geometryCenters(uint, const Vector3&in)", asMETHOD(Model, SetGeometryCenter), asCALL_THISCALL);
|
|
|
+ engine->RegisterObjectMethod("Model", "const Vector3& get_geometryCenters(uint) const", asMETHOD(Model, GetGeometryCenter), asCALL_THISCALL);
|
|
|
engine->RegisterObjectMethod("Model", "uint get_numMorphs() const", asMETHOD(Model, GetNumMorphs), asCALL_THISCALL);
|
|
|
}
|
|
|
|
|
|
@@ -1211,14 +1360,6 @@ static void RegisterParticleEmitter(asIScriptEngine* engine)
|
|
|
|
|
|
static void RegisterCustomGeometry(asIScriptEngine* engine)
|
|
|
{
|
|
|
- engine->RegisterEnum("PrimitiveType");
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_LIST", TRIANGLE_LIST);
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "LINE_LIST", LINE_LIST);
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "POINT_LIST", POINT_LIST);
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_STRIP", TRIANGLE_STRIP);
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "LINE_STRIP", LINE_STRIP);
|
|
|
- engine->RegisterEnumValue("PrimitiveType", "TRIANGLE_FAN", TRIANGLE_FAN);
|
|
|
-
|
|
|
engine->RegisterObjectType("CustomGeometryVertex", 0, asOBJ_REF);
|
|
|
engine->RegisterObjectBehaviour("CustomGeometryVertex", asBEHAVE_ADDREF, "void f()", asFUNCTION(FakeAddRef), asCALL_CDECL_OBJLAST);
|
|
|
engine->RegisterObjectBehaviour("CustomGeometryVertex", asBEHAVE_RELEASE, "void f()", asFUNCTION(FakeReleaseRef), asCALL_CDECL_OBJLAST);
|
|
|
@@ -1629,6 +1770,7 @@ void RegisterGraphicsAPI(asIScriptEngine* engine)
|
|
|
RegisterRenderPath(engine);
|
|
|
RegisterTextures(engine);
|
|
|
RegisterMaterial(engine);
|
|
|
+ RegisterBuffers(engine);
|
|
|
RegisterModel(engine);
|
|
|
RegisterAnimation(engine);
|
|
|
RegisterDrawable(engine);
|