summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/graphics/binding
diff options
context:
space:
mode:
authorchai <chaifix@163.com>2019-04-10 09:03:57 +0800
committerchai <chaifix@163.com>2019-04-10 09:03:57 +0800
commitb5b43bac50ad58949e70bcd1a34b1e6c4765fd51 (patch)
tree32e8655bf48ca059d818501c8d95fc92ae97b318 /source/modules/asura-core/graphics/binding
parent200f710983fd54b23437cb78d5a03c90b5a47523 (diff)
*misc
Diffstat (limited to 'source/modules/asura-core/graphics/binding')
-rw-r--r--source/modules/asura-core/graphics/binding/_gpu_buffer.cpp120
-rw-r--r--source/modules/asura-core/graphics/binding/_image.cpp10
-rw-r--r--source/modules/asura-core/graphics/binding/_shader.cpp100
3 files changed, 205 insertions, 25 deletions
diff --git a/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp b/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp
new file mode 100644
index 0000000..7a63c48
--- /dev/null
+++ b/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp
@@ -0,0 +1,120 @@
+#include <stdlib.h>
+
+#include "../image.h"
+#include "../gpu_buffer.h"
+
+using namespace std;
+using namespace Luax;
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ LUAX_REGISTRY(GPUBuffer)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "New", _New },
+ { "Fill", _Fill },
+ { "GetSize", _GetSize },
+ { "GetCount", _GetCount }
+ );
+ }
+
+ LUAX_POSTPROCESS(GPUBuffer)
+ {
+ LUAX_REGISTER_ENUM(state, "EBufferType",
+ { "VERTEX", BUFFER_TYPE_VERTEX },
+ { "INDEX", BUFFER_TYPE_INDEX }
+ );
+ LUAX_REGISTER_ENUM(state, "EBufferUsage",
+ { "STREAM", BUFFER_USAGE_STREAM },
+ { "DYNAMIC", BUFFER_USAGE_DYNAMIC },
+ { "STATIC", BUFFER_USAGE_STATIC }
+ );
+ LUAX_REGISTER_ENUM(state, "EBufferDataType",
+ { "INT", BUFFER_DATA_TYPE_INT },
+ { "FLOAT", BUFFER_DATA_TYPE_FLOAT },
+ { "UNSIGNED_BYTE", BUFFER_DATA_TYPE_UNSIGNED_BYTE }
+ );
+
+ }
+
+ // buffer = GPUBuffer.New(bufferType, bufferUsage, bufferDataType, size)
+ // buffer = GPUBuffer.New(image)
+ // buffer = GPUBuffer.New(mesh2d)
+ // buffer = GPUBuffer.New(canvas)
+ // buffer = GPUBuffer.New(shape)
+ LUAX_IMPL_METHOD(GPUBuffer, _New)
+ {
+ LUAX_STATE(L);
+
+ return 0;
+ }
+
+ // gpubuffer:Fill({data unit list}, offseti)
+ // data_unit_list ݵtable
+ // offseti : ʼǵĵطڵ(0ʼ
+ LUAX_IMPL_METHOD(GPUBuffer, _Fill)
+ {
+ LUAX_PREPARE(L, GPUBuffer);
+
+ // ʹbufferӦ޸bufferڵһεʱʼsizeСbufferȻ䡣
+ int offset = state.GetValue(3, 0);
+ int count = lua_objlen(L, 2);
+ int size = count * self->GetDataTypeSize();
+ byte* data = (byte*)malloc(size);
+ int unit = self->GetDataTypeSize();
+ int i = 1;
+ lua_rawgeti(L, 2, i);
+ while (!lua_isnil(L, -1))
+ {
+ switch (self->mDataType)
+ {
+ case GL_INT:
+ {
+ int n = state.CheckValue<int>(-1);
+ memcpy(data + (i - 1)*unit, &n, unit);
+ break;
+ }
+ case GL_FLOAT:
+ {
+ float n = state.CheckValue<float>(-1);
+ memcpy(data + (i - 1)*unit, &n, unit);
+ break;
+ }
+ case GL_UNSIGNED_BYTE:
+ {
+ unsigned char n = state.CheckValue<unsigned char>(-1);
+ memcpy(data + (i - 1)*unit, &n, unit);
+ break;
+ }
+ }
+ state.Pop(1); // value
+ lua_rawgeti(L, 2, ++i);
+ }
+ state.Pop(); // nil
+
+ self->Fill(data, size, offset * unit);
+
+ free(data);
+ return 0;
+ }
+
+ // gpubuffer:GetSize()
+ LUAX_IMPL_METHOD(GPUBuffer, _GetSize)
+ {
+ LUAX_PREPARE(L, GPUBuffer);
+ state.Push(self->mSize);
+ return 0;
+ }
+
+ LUAX_IMPL_METHOD(GPUBuffer, _GetCount)
+ {
+ LUAX_PREPARE(L, GPUBuffer);
+ state.Push(self->mSize / self->GetDataTypeSize());
+ return 0;
+ }
+
+ }
+}
diff --git a/source/modules/asura-core/graphics/binding/_image.cpp b/source/modules/asura-core/graphics/binding/_image.cpp
index 76ac635..99373e3 100644
--- a/source/modules/asura-core/graphics/binding/_image.cpp
+++ b/source/modules/asura-core/graphics/binding/_image.cpp
@@ -13,7 +13,6 @@ namespace AsuraEngine
LUAX_REGISTER_METHODS(state,
{ "New", _New },
- { "Update", _Update },
{ "GetWidth", _GetWidth },
{ "GetHeight", _GetHeight },
{ "GetSize", _GetSize },
@@ -34,15 +33,6 @@ namespace AsuraEngine
return 1;
}
- // successed = image:Update(imgData)
- LUAX_IMPL_METHOD(Image, _Update)
- {
- LUAX_PREPARE(L, Image);
- ImageData* imgData = state.CheckUserdata<ImageData>(2);
- state.Push(self->Load(imgData));
- return 1;
- }
-
// width = image:GetWidth()
LUAX_IMPL_METHOD(Image, _GetWidth)
{
diff --git a/source/modules/asura-core/graphics/binding/_shader.cpp b/source/modules/asura-core/graphics/binding/_shader.cpp
index af6e981..e0a6320 100644
--- a/source/modules/asura-core/graphics/binding/_shader.cpp
+++ b/source/modules/asura-core/graphics/binding/_shader.cpp
@@ -1,6 +1,7 @@
#include "../shader.h"
using namespace std;
+using namespace Luax;
namespace AsuraEngine
{
@@ -11,9 +12,8 @@ namespace AsuraEngine
{
LUAX_REGISTER_METHODS(state,
{ "New", _New },
- { "Use", _Use },
- { "Unuse", _Unuse },
{ "Load", _Load },
+ { "Update", _Update },
{ "HasUniform", _HasUniform },
{ "GetUniformLocation", _GetUniformLocation },
{ "SetBuiltInUniforms", _SetBuiltInUniforms },
@@ -22,7 +22,16 @@ namespace AsuraEngine
{ "SetUniformVector2", _SetUniformVector2 },
{ "SetUniformVector3", _SetUniformVector3 },
{ "SetUniformVector4", _SetUniformVector4 },
- { "SetUniformColor", _SetUniformColor }
+ { "SetUniformColor", _SetUniformColor },
+ { "SetAttribPosition", _SetAttribPosition },
+ { "SetAttribTangent", _SetAttribTangent },
+ { "SetAttribNormal", _SetAttribNormal },
+ { "SetAttribColor", _SetAttribColor },
+ { "SetAttribTexcoord0", _SetAttribTexcoord0 },
+ { "SetAttribTexcoord1", _SetAttribTexcoord1 },
+ { "SetAttribTexcoord2", _SetAttribTexcoord2 },
+ { "SetAttribTexcoord3", _SetAttribTexcoord3 },
+ { "SetBuiltInUniforms", _SetBuiltInUniforms }
);
}
@@ -39,24 +48,16 @@ namespace AsuraEngine
return 0;
}
- // shader:Use()
- LUAX_IMPL_METHOD(Shader, _Use)
+ // shader:Load()
+ LUAX_IMPL_METHOD(Shader, _Load)
{
LUAX_PREPARE(L, Shader);
- return 0;
-
- }
- // shader:Unuse()
- LUAX_IMPL_METHOD(Shader, _Unuse)
- {
- LUAX_PREPARE(L, Shader);
return 0;
-
}
- // shader:Load()
- LUAX_IMPL_METHOD(Shader, _Load)
+ // shader:Update()
+ LUAX_IMPL_METHOD(Shader, _Update)
{
LUAX_PREPARE(L, Shader);
@@ -99,6 +100,7 @@ namespace AsuraEngine
LUAX_IMPL_METHOD(Shader, _SetUniformTexture)
{
LUAX_PREPARE(L, Shader);
+
return 0;
}
@@ -106,6 +108,7 @@ namespace AsuraEngine
LUAX_IMPL_METHOD(Shader, _SetUniformVector2)
{
LUAX_PREPARE(L, Shader);
+
return 0;
}
@@ -113,6 +116,7 @@ namespace AsuraEngine
LUAX_IMPL_METHOD(Shader, _SetUniformVector3)
{
LUAX_PREPARE(L, Shader);
+
return 0;
}
@@ -120,6 +124,7 @@ namespace AsuraEngine
LUAX_IMPL_METHOD(Shader, _SetUniformVector4)
{
LUAX_PREPARE(L, Shader);
+
return 0;
}
@@ -127,6 +132,71 @@ namespace AsuraEngine
LUAX_IMPL_METHOD(Shader, _SetUniformColor)
{
LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribPosition()
+ LUAX_IMPL_METHOD(Shader, _SetAttribPosition)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribTangent()
+ LUAX_IMPL_METHOD(Shader, _SetAttribTangent)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribNormal()
+ LUAX_IMPL_METHOD(Shader, _SetAttribNormal)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribColor()
+ LUAX_IMPL_METHOD(Shader, _SetAttribColor)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribTexcoord0()
+ LUAX_IMPL_METHOD(Shader, _SetAttribTexcoord0)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribTexcoord1()
+ LUAX_IMPL_METHOD(Shader, _SetAttribTexcoord1)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribTexcoord2()
+ LUAX_IMPL_METHOD(Shader, _SetAttribTexcoord2)
+ {
+ LUAX_PREPARE(L, Shader);
+
+ return 0;
+ }
+
+ // shader:SetAttribTexcoord3()
+ LUAX_IMPL_METHOD(Shader, _SetAttribTexcoord3)
+ {
+ LUAX_PREPARE(L, Shader);
+
return 0;
}