diff options
author | chai <chaifix@163.com> | 2019-04-10 09:03:57 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2019-04-10 09:03:57 +0800 |
commit | b5b43bac50ad58949e70bcd1a34b1e6c4765fd51 (patch) | |
tree | 32e8655bf48ca059d818501c8d95fc92ae97b318 /source/modules/asura-core/graphics/binding | |
parent | 200f710983fd54b23437cb78d5a03c90b5a47523 (diff) |
*misc
Diffstat (limited to 'source/modules/asura-core/graphics/binding')
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; } |