summaryrefslogtreecommitdiff
path: root/source/modules/asura-core/graphics
diff options
context:
space:
mode:
Diffstat (limited to 'source/modules/asura-core/graphics')
-rw-r--r--source/modules/asura-core/graphics/binding/_canvas.cpp48
-rw-r--r--source/modules/asura-core/graphics/binding/_color.cpp130
-rw-r--r--source/modules/asura-core/graphics/binding/_color32.cpp66
-rw-r--r--source/modules/asura-core/graphics/binding/_gfx_device.cpp151
-rw-r--r--source/modules/asura-core/graphics/binding/_gpu_buffer.cpp118
-rw-r--r--source/modules/asura-core/graphics/binding/_image.cpp71
-rw-r--r--source/modules/asura-core/graphics/binding/_index_buffer.cpp31
-rw-r--r--source/modules/asura-core/graphics/binding/_mesh2d.cpp20
-rw-r--r--source/modules/asura-core/graphics/binding/_shader.cpp131
-rw-r--r--source/modules/asura-core/graphics/binding/_sprite_batch.cpp20
-rw-r--r--source/modules/asura-core/graphics/binding/_texture.cpp85
-rw-r--r--source/modules/asura-core/graphics/binding/_vertex_buffer.cpp38
-rw-r--r--source/modules/asura-core/graphics/image.cpp103
-rw-r--r--source/modules/asura-core/graphics/image.h63
-rw-r--r--source/modules/asura-core/graphics/mesh2d.cpp0
-rw-r--r--source/modules/asura-core/graphics/mesh2d.h52
-rw-r--r--source/modules/asura-core/graphics/shader.cpp26
-rw-r--r--source/modules/asura-core/graphics/shader.h27
-rw-r--r--source/modules/asura-core/graphics/texture.h38
19 files changed, 64 insertions, 1154 deletions
diff --git a/source/modules/asura-core/graphics/binding/_canvas.cpp b/source/modules/asura-core/graphics/binding/_canvas.cpp
deleted file mode 100644
index 44841f5..0000000
--- a/source/modules/asura-core/graphics/binding/_canvas.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "../Canvas.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Canvas)
- {
- LUAX_REGISTER_METHODS(state,
- { "SetSize", _SetSize },
- { "Bind", _Bind },
- { "Unbind", _Unbind }
- );
- }
-
- LUAX_POSTPROCESS(Canvas)
- {
-
- }
-
- // canvas:SetSize()
- LUAX_IMPL_METHOD(Canvas, _SetSize)
- {
- LUAX_PREPARE(L, Canvas);
- return 0;
-
- }
-
- // canvas:Bind()
- LUAX_IMPL_METHOD(Canvas, _Bind)
- {
- LUAX_PREPARE(L, Canvas);
-
- return 0;
- }
-
- // canvas:Unbind()
- LUAX_IMPL_METHOD(Canvas, _Unbind)
- {
- LUAX_PREPARE(L, Canvas);
- return 0;
-
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_color.cpp b/source/modules/asura-core/graphics/binding/_color.cpp
deleted file mode 100644
index 008d9c2..0000000
--- a/source/modules/asura-core/graphics/binding/_color.cpp
+++ /dev/null
@@ -1,130 +0,0 @@
-#include "../Color.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
-LUAX_REGISTRY(Color)
-{
- LUAX_REGISTER_METHODS(state,
- { "ToColor32", _ToColor32 },
- { "SetColor", _SetColor },
- { "GetColor", _GetColor },
- { "GetR", _GetR },
- { "GetG", _GetG },
- { "GetB", _GetB },
- { "GetA", _GetA },
- { "__eq", ___eq },
- { "__add", ___add },
- { "__sub", ___sub },
- { "__mul", ___mul },
- { "__div", ___div }
- );
-}
-
-LUAX_POSTPROCESS(Color)
-{
-
-}
-
-// color:ToColor32()
-LUAX_IMPL_METHOD(Color, _ToColor32)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:SetColor()
-LUAX_IMPL_METHOD(Color, _SetColor)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:GetColor()
-LUAX_IMPL_METHOD(Color, _GetColor)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:GetR()
-LUAX_IMPL_METHOD(Color, _GetR)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:GetG()
-LUAX_IMPL_METHOD(Color, _GetG)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:GetB()
-LUAX_IMPL_METHOD(Color, _GetB)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:GetA()
-LUAX_IMPL_METHOD(Color, _GetA)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:__eq()
-LUAX_IMPL_METHOD(Color, ___eq)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:__add()
-LUAX_IMPL_METHOD(Color, ___add)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:__sub()
-LUAX_IMPL_METHOD(Color, ___sub)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:__mul()
-LUAX_IMPL_METHOD(Color, ___mul)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-// color:__div()
-LUAX_IMPL_METHOD(Color, ___div)
-{
- LUAX_PREPARE(L, Color);
-
- return 0;
-}
-
-}
-} \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/binding/_color32.cpp b/source/modules/asura-core/graphics/binding/_color32.cpp
deleted file mode 100644
index 7613361..0000000
--- a/source/modules/asura-core/graphics/binding/_color32.cpp
+++ /dev/null
@@ -1,66 +0,0 @@
-#include "../Color32.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Color32)
- {
- LUAX_REGISTER_METHODS(state,
- { "ToColor", _ToColor },
- { "GetRed", _GetRed },
- { "GetGreen", _GetGreen },
- { "GetBlue", _GetBlue },
- { "GetAlpha", _GetAlpha }
- );
- }
-
- LUAX_POSTPROCESS(Color32)
- {
-
- }
-
- // color32:ToColor()
- LUAX_IMPL_METHOD(Color32, _ToColor)
- {
- LUAX_PREPARE(L, Color32);
- return 0;
-
- }
-
- // color32:GetRed()
- LUAX_IMPL_METHOD(Color32, _GetRed)
- {
- LUAX_PREPARE(L, Color32);
- return 0;
- }
-
- // color32:GetGreen()
- LUAX_IMPL_METHOD(Color32, _GetGreen)
- {
- LUAX_PREPARE(L, Color32);
-
- return 0;
- }
-
- // color32:GetBlue()
- LUAX_IMPL_METHOD(Color32, _GetBlue)
- {
- LUAX_PREPARE(L, Color32);
-
- return 0;
- }
-
- // color32:GetAlpha()
- LUAX_IMPL_METHOD(Color32, _GetAlpha)
- {
- LUAX_PREPARE(L, Color32);
-
- return 0;
- }
-
- }
-}
- \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/binding/_gfx_device.cpp b/source/modules/asura-core/graphics/binding/_gfx_device.cpp
deleted file mode 100644
index f6c2004..0000000
--- a/source/modules/asura-core/graphics/binding/_gfx_device.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-#include "../GfxDevice.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(GfxDevice)
- {
- LUAX_REGISTER_METHODS(state,
- { "SetMatrixMode", _SetMatrixMode },
- { "GetMatrixMode", _GetMatrixMode },
- { "PushMatrix", _PushMatrix },
- { "PopMatrix", _PopMatrix },
- { "LoadIdentity", _LoadIdentity },
- { "Rotate", _Rotate },
- { "Translate", _Translate },
- { "Scale", _Scale },
- { "Ortho", _Ortho },
- { "GetMatrixDepth", _GetMatrixDepth },
- { "GetMatrixIndex", _GetMatrixIndex },
- { "UseShader", _UseShader },
- { "UnuseShader", _UnuseShader }
- );
- }
-
- LUAX_POSTPROCESS(GfxDevice)
- {
- LUAX_REGISTER_ENUM(state, "EMatrixMode",
- { "PROJECTION", MATRIX_MODE_PROJECTION },
- { "0", 0 },
- { "MODEL", MATRIX_MODE_MODEL },
- { "1", 1 },
- { "VIEW", MATRIX_MODE_VIEW },
- { "2", 2 }
- );
- LUAX_REGISTER_ENUM(state, "EGLParams",
- { "MAX_TEXTURE_UNIT", GL_PARAM_MAX_TEXTURE_UNIT },
- { "1", 1 }
- );
-
- }
-
- // gfxdevice:SetMatrixMode()
- LUAX_IMPL_METHOD(GfxDevice, _SetMatrixMode)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:GetMatrixMode()
- LUAX_IMPL_METHOD(GfxDevice, _GetMatrixMode)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:PushMatrix()
- LUAX_IMPL_METHOD(GfxDevice, _PushMatrix)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:PopMatrix()
- LUAX_IMPL_METHOD(GfxDevice, _PopMatrix)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:LoadIdentity()
- LUAX_IMPL_METHOD(GfxDevice, _LoadIdentity)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:Rotate()
- LUAX_IMPL_METHOD(GfxDevice, _Rotate)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:Translate()
- LUAX_IMPL_METHOD(GfxDevice, _Translate)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:Scale()
- LUAX_IMPL_METHOD(GfxDevice, _Scale)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:Ortho()
- LUAX_IMPL_METHOD(GfxDevice, _Ortho)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:GetMatrixDepth()
- LUAX_IMPL_METHOD(GfxDevice, _GetMatrixDepth)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:GetMatrixIndex()
- LUAX_IMPL_METHOD(GfxDevice, _GetMatrixIndex)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:UseShader()
- LUAX_IMPL_METHOD(GfxDevice, _UseShader)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- // gfxdevice:UnuseShader()
- LUAX_IMPL_METHOD(GfxDevice, _UnuseShader)
- {
- LUAX_PREPARE(L, GfxDevice);
-
- return 0;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp b/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp
deleted file mode 100644
index 8c39a59..0000000
--- a/source/modules/asura-core/graphics/binding/_gpu_buffer.cpp
+++ /dev/null
@@ -1,118 +0,0 @@
-#include <stdlib.h>
-
-#include "../image.h"
-#include "../GPUBuffer.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(GPUBuffer)
- {
- LUAX_REGISTER_METHODS(state,
- { "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->m_DataType)
- {
- 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->m_Size);
- return 0;
- }
-
- LUAX_IMPL_METHOD(GPUBuffer, _GetCount)
- {
- LUAX_PREPARE(L, GPUBuffer);
- state.Push(self->m_Size / self->GetDataTypeSize());
- return 0;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_image.cpp b/source/modules/asura-core/graphics/binding/_image.cpp
deleted file mode 100644
index 0e4cb16..0000000
--- a/source/modules/asura-core/graphics/binding/_image.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-#include "../image.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Image)
- {
- LUAX_INHERIT(state, Texture);
-
- LUAX_REGISTER_METHODS(state,
- { "New", _New },
- { "GetWidth", _GetWidth },
- { "GetHeight", _GetHeight },
- { "GetSize", _GetSize },
- { "Render", _Render }
- );
- }
-
- LUAX_POSTPROCESS(Image)
- {
- }
-
- // image = Image.New()
- LUAX_IMPL_METHOD(Image, _New)
- {
- LUAX_STATE(L);
- Image* img = new Image();
- img->PushLuaxUserdata(state);
- return 1;
- }
-
- // width = image:GetWidth()
- LUAX_IMPL_METHOD(Image, _GetWidth)
- {
- LUAX_PREPARE(L, Image);
- state.Push(self->GetWidth());
- return 1;
- }
-
- // height = image:GetHeight()
- LUAX_IMPL_METHOD(Image, _GetHeight)
- {
- LUAX_PREPARE(L, Image);
- state.Push(self->GetHeight());
- return 1;
- }
-
- // width, height = image:GetSize()
- LUAX_IMPL_METHOD(Image, _GetSize)
- {
- LUAX_PREPARE(L, Image);
- int width = self->GetWidth();
- int height = self->GetHeight();
- state.Push(width);
- state.Push(height);
- return 2;
- }
-
- // image:Render()
- LUAX_IMPL_METHOD(Image, _Render)
- {
- LUAX_PREPARE(L, Image);
-
- return 0;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_index_buffer.cpp b/source/modules/asura-core/graphics/binding/_index_buffer.cpp
deleted file mode 100644
index 151dc98..0000000
--- a/source/modules/asura-core/graphics/binding/_index_buffer.cpp
+++ /dev/null
@@ -1,31 +0,0 @@
-#include "../IndexBuffer.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(IndexBuffer)
- {
- LUAX_REGISTER_METHODS(state,
- { "New", _New }
- );
- }
-
- LUAX_POSTPROCESS(IndexBuffer)
- {
-
- }
-
- // IndexBuffer.New()
- LUAX_IMPL_METHOD(IndexBuffer, _New)
- {
- LUAX_STATE(L);
-
- return 0;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_mesh2d.cpp b/source/modules/asura-core/graphics/binding/_mesh2d.cpp
deleted file mode 100644
index 4e3f426..0000000
--- a/source/modules/asura-core/graphics/binding/_mesh2d.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "../mesh2d.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Mesh2D)
- {
-
- }
-
- LUAX_POSTPROCESS(Mesh2D)
- {
-
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_shader.cpp b/source/modules/asura-core/graphics/binding/_shader.cpp
deleted file mode 100644
index 85fd388..0000000
--- a/source/modules/asura-core/graphics/binding/_shader.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "../shader.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Shader)
- {
- LUAX_REGISTER_METHODS(state,
- { "New", _New },
- { "Load", _Load },
- { "Update", _Update },
- { "HasUniform", _HasUniform },
- { "GetUniformLocation", _GetUniformLocation },
- { "SetBuiltInUniforms", _SetBuiltInUniforms },
- { "SetUniformFloat", _SetUniformFloat },
- { "SetUniformTexture", _SetUniformTexture },
- { "SetUniformVector2", _SetUniformVector2 },
- { "SetUniformVector3", _SetUniformVector3 },
- { "SetUniformVector4", _SetUniformVector4 },
- { "SetUniformColor", _SetUniformColor },
- { "SetBuiltInUniforms", _SetBuiltInUniforms }
- );
- }
-
- LUAX_POSTPROCESS(Shader)
- {
-
- }
-
- // Shader.New()
- LUAX_IMPL_METHOD(Shader, _New)
- {
- LUAX_STATE(L);
-
- return 0;
- }
-
- // shader:Load()
- LUAX_IMPL_METHOD(Shader, _Load)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:Update()
- LUAX_IMPL_METHOD(Shader, _Update)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:HasUniform()
- LUAX_IMPL_METHOD(Shader, _HasUniform)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:GetUniformLocation()
- LUAX_IMPL_METHOD(Shader, _GetUniformLocation)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetBuiltInUniforms()
- LUAX_IMPL_METHOD(Shader, _SetBuiltInUniforms)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformFloat()
- LUAX_IMPL_METHOD(Shader, _SetUniformFloat)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformTexture()
- LUAX_IMPL_METHOD(Shader, _SetUniformTexture)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformVector2()
- LUAX_IMPL_METHOD(Shader, _SetUniformVector2)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformVector3()
- LUAX_IMPL_METHOD(Shader, _SetUniformVector3)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformVector4()
- LUAX_IMPL_METHOD(Shader, _SetUniformVector4)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- // shader:SetUniformColor()
- LUAX_IMPL_METHOD(Shader, _SetUniformColor)
- {
- LUAX_PREPARE(L, Shader);
-
- return 0;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_sprite_batch.cpp b/source/modules/asura-core/graphics/binding/_sprite_batch.cpp
deleted file mode 100644
index 6b7d25c..0000000
--- a/source/modules/asura-core/graphics/binding/_sprite_batch.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-#include "../SpriteBatch.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(SpriteBatch)
- {
-
- }
-
- LUAX_POSTPROCESS(SpriteBatch)
- {
-
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/binding/_texture.cpp b/source/modules/asura-core/graphics/binding/_texture.cpp
deleted file mode 100644
index f5e5f17..0000000
--- a/source/modules/asura-core/graphics/binding/_texture.cpp
+++ /dev/null
@@ -1,85 +0,0 @@
-#include "../texture.h"
-
-using namespace std;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(Texture)
- {
- LUAX_REGISTER_METHODS(state,
- { "SetFilterMode", _SetFilterMode },
- { "SetWrapMode", _SetWrapMode },
- { "GetFilterMode", _GetFilterMode },
- { "GetWrapMode", _GetWrapMode },
- { "IsGenMipmap", _IsGenMipmap }
- );
- }
-
- LUAX_POSTPROCESS(Texture)
- {
- LUAX_REGISTER_ENUM(state, "EColorFormat",
- { "UNKNOWN", COLOR_FORMAT_UNKNOWN },
- { "RGBA8", COLOR_FORMAT_RGBA8 },
- { "RGBA32F", COLOR_FORMAT_RGBA32F }
- );
- LUAX_REGISTER_ENUM(state, "EFilterMode",
- { "NEAREST", FILTER_MODE_NEAREST },
- { "LINEAR", FILTER_MODE_LINEAR }
- );
- LUAX_REGISTER_ENUM(state, "EWrapMode",
- { "REPEAT", WRAP_MODE_REPEAT },
- { "MIRROR", WRAP_MODE_MIRROR },
- { "CLAMPTOEDGE", WRAP_MODE_CLAMPTOEDGE },
- { "CLAMPTOBORDER", WRAP_MODE_CLAMPTOBORDER }
- );
-
- }
-
- // texture:SetFilterMode(minFilter, magFilter)
- LUAX_IMPL_METHOD(Texture, _SetFilterMode)
- {
- LUAX_PREPARE(L, Texture);
- FilterMode min = (FilterMode)state.CheckValue<int>(2);
- FilterMode mag = (FilterMode)state.CheckValue<int>(3);
- self->SetFilterMode(min, mag);
- return 0;
- }
-
- // texture:SetWrapMode(wrap_mode)
- LUAX_IMPL_METHOD(Texture, _SetWrapMode)
- {
- LUAX_PREPARE(L, Texture);
- WrapMode wrap_mode = (WrapMode)state.CheckValue<int>(2);
- self->SetWrapMode(wrap_mode);
- return 0;
- }
-
- // min, mag = texture:GetFilterMode()
- LUAX_IMPL_METHOD(Texture, _GetFilterMode)
- {
- LUAX_PREPARE(L, Texture);
- state.Push((int)self->m_MinFilter);
- state.Push((int)self->m_MagFilter);
- return 2;
- }
-
- // wrapmode= texture:GetWrapMode()
- LUAX_IMPL_METHOD(Texture, _GetWrapMode)
- {
- LUAX_PREPARE(L, Texture);
- state.Push((int)self->m_WrapMode);
- return 1;
- }
-
- // texture:IsGenMipmap()
- LUAX_IMPL_METHOD(Texture, _IsGenMipmap)
- {
- LUAX_PREPARE(L, Texture);
- state.Push(self->IsGenMipmap());
- return 1;
- }
-
- }
-} \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/binding/_vertex_buffer.cpp b/source/modules/asura-core/graphics/binding/_vertex_buffer.cpp
deleted file mode 100644
index 8ed487b..0000000
--- a/source/modules/asura-core/graphics/binding/_vertex_buffer.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "../VertexBuffer.h"
-
-using namespace std;
-using namespace Luax;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-
- LUAX_REGISTRY(VertexBuffer)
- {
- LUAX_REGISTER_METHODS(state,
- { "New", _New }
- );
- }
-
- LUAX_POSTPROCESS(VertexBuffer)
- {
-
- }
-
- // vbo = VertexBuffer.New(usage, data_type, count)
- LUAX_IMPL_METHOD(VertexBuffer, _New)
- {
- LUAX_STATE(L);
-
- BufferUsage usage = (BufferUsage)state.CheckValue<uint>(1);
- BufferDataType datatype = (BufferDataType)state.CheckValue<uint>(2);
- uint count = state.CheckValue<uint>(3);
-
- VertexBuffer* vbo = new VertexBuffer(usage, datatype, count * GPUBuffer::GetDataTypeSize(datatype));
- vbo->PushLuaxUserdata(state);
-
- return 1;
- }
-
- }
-}
diff --git a/source/modules/asura-core/graphics/image.cpp b/source/modules/asura-core/graphics/image.cpp
deleted file mode 100644
index 36d2478..0000000
--- a/source/modules/asura-core/graphics/image.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-#include <asura-base/Exception.h>
-
-#include "../CoreConfig.h"
-
-#include "Shader.h"
-#include "Image.h"
-#include "GfxDevice.h"
-
-using namespace AEFileSystem;
-using namespace AEImage;
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-Image::Image()
- : m_Width(0)
- , m_Height(0)
-{
-}
-
-Image::~Image()
-{
-}
-
-bool Image::Load(ImageData* imgData)
-{
- if (!imgData) return false;
-
- if (m_TexID == 0)
- {
- glGenTextures(1, &m_TexID);
- if (m_TexID == 0)
- throw Exception("OpenGL glGenTextures failed.");
- }
-
- glBindTexture(GL_TEXTURE_2D, m_TexID);
- imgData->Lock();
- int width = imgData->width;
- int height = imgData->height;
- TextureFormat tf = ConvertColorFormat(imgData->format);
- glTexImage2D(
- GL_TEXTURE_2D
- , 0
- , tf.internalformat
- , width, height
- , 0
- , tf.externalformat
- , tf.type
- , imgData->pixels
- );
-
- m_Width = imgData->width;
- m_Height = imgData->height;
- imgData->Unlock();
- GLenum err = glGetError();
- if (err != GL_NO_ERROR)
- throw Exception("OpenGL glTexImage2D cause error, error code=%d", err);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- return true;
-}
-
-bool Image::Load(ImageData* imgData, const AEMath::Vector2i& pos)
-{
- if (!imgData) return false;
-
- glBindTexture(GL_TEXTURE_2D, m_TexID);
- imgData->Lock();
- int width = imgData->width;
- int height = imgData->height;
- TextureFormat tf = ConvertColorFormat(imgData->format);
- glTexSubImage2D(
- GL_TEXTURE_2D
- , 0
- , pos.x
- , pos.y
- , imgData->width
- , imgData->height
- , tf.externalformat
- , tf.type
- , imgData->pixels
- );
- imgData->Unlock();
- GLenum err = glGetError();
- if (err != GL_NO_ERROR)
- throw Exception("OpenGL glTexSubImage2D cause error, error code=%d", err);
- glBindTexture(GL_TEXTURE_2D, 0);
-
- return true;
-}
-
-uint32 Image::GetWidth()
-{
- return m_Width;
-}
-
-uint32 Image::GetHeight()
-{
- return m_Height;
-}
-
-namespace_end
-namespace_end \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/image.h b/source/modules/asura-core/graphics/image.h
deleted file mode 100644
index a76d06f..0000000
--- a/source/modules/asura-core/graphics/image.h
+++ /dev/null
@@ -1,63 +0,0 @@
-#ifndef _ASURA_ENGINE_IMAGE_H_
-#define _ASURA_ENGINE_IMAGE_H_
-
-// asura modules
-#include <asura-base/Math/Rect.hpp>
-#include <asura-base/Math/Vector2.hpp>
-#include <asura-base/Scripting/Scripting.h>
-#include <asura-base/FileSystem/Renewable.h>
-#include <asura-base/Utilities/Stringmap.hpp>
-#include <asura-base/Manager.hpp>
-
-// module
-#include "../Image/ImageData.h"
-
-// folder
-#include "Color.h"
-#include "Color32.h"
-#include "RenderState.h"
-#include "GPUBuffer.h"
-#include "Texture.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-class Image ASURA_FINAL : public AEScripting::Portable<Image, Texture>
-{
-public:
-
- Image();
- ~Image();
-
- bool Load(AEImage::ImageData* decodeData);
- bool Load(AEImage::ImageData* decodeData, const AEMath::Vector2i& pos);
-
- uint GetWidth();
- uint GetHeight();
-
- GPUBuffer* GenGPUBuffer();
-
-private:
-
- uint32 m_Width, m_Height;
-
-luaxport:
-
- LUAX_DECL_FACTORY(Image, Texture);
-
- LUAX_DECL_METHOD(_New);
- LUAX_DECL_METHOD(_Load);
- LUAX_DECL_METHOD(_GetWidth);
- LUAX_DECL_METHOD(_GetHeight);
- LUAX_DECL_METHOD(_GetSize);
- LUAX_DECL_METHOD(_GetPixel);
- LUAX_DECL_METHOD(_Render);
-
-};
-
-namespace_end
-namespace_end
-
-namespace AEGraphics = AsuraEngine::Graphics;
-
-#endif \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/mesh2d.cpp b/source/modules/asura-core/graphics/mesh2d.cpp
deleted file mode 100644
index e69de29..0000000
--- a/source/modules/asura-core/graphics/mesh2d.cpp
+++ /dev/null
diff --git a/source/modules/asura-core/graphics/mesh2d.h b/source/modules/asura-core/graphics/mesh2d.h
deleted file mode 100644
index 7a0f62e..0000000
--- a/source/modules/asura-core/graphics/mesh2d.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef _ASURA_ENGINE_MESH2D_H__
-#define _ASURA_ENGINE_MESH2D_H__
-
-// cpp
-#include <vector>
-
-// asura modules
-#include <asura-base/Scripting/Scripting.h>
-#include <asura-base/Math/Vector2.hpp>
-
-// module
-#include "../Mesh/Mesh2dData.h"
-
-// folder
-#include "Color.h"
-#include "VertexBuffer.h"
-#include "IndexBuffer.h"
-
-namespace_begin(AsuraEngine)
-namespace_begin(Graphics)
-
-///
-/// 2D meshһЩ㶯
-/// https://en.wikipedia.org/wiki/Polygon_mesh
-///
-class Mesh2D ASURA_FINAL
- : public Scripting::Portable<Mesh2D>
-{
-public:
-
- Mesh2D();
- ~Mesh2D();
-
- bool Load(AEMesh::Mesh2DData* data);
-
-private:
-
- VertexBuffer* m_VBO; ///< vertex buffer
- IndexBuffer* m_IBO; ///< index buffer
-
-luaxport:
-
- LUAX_DECL_FACTORY(Mesh2D);
-
- LUAX_DECL_METHOD(_SetVertex);
-
-};
-
-namespace_end
-namespace_end
-
-#endif \ No newline at end of file
diff --git a/source/modules/asura-core/graphics/shader.cpp b/source/modules/asura-core/graphics/shader.cpp
index 329b3f1..56d638d 100644
--- a/source/modules/asura-core/graphics/shader.cpp
+++ b/source/modules/asura-core/graphics/shader.cpp
@@ -24,12 +24,12 @@ Shader::~Shader()
void Shader::SetActive(Shader* shader)
{
- g_Device.SetActiveShader(shader);
+ g_GfxDevice.SetActiveShader(shader);
}
Shader* Shader::GetActive()
{
- return g_Device.GetActiveShader();
+ return g_GfxDevice.GetActiveShader();
}
bool Shader::Load(const string& vert, const string& frag)
@@ -157,56 +157,56 @@ GLuint Shader::GetGLProgram()
void Shader::SetUniformFloat(uint loc, float value)
{
- if(g_Device.GetActiveShader() == this)
+ if(g_GfxDevice.GetActiveShader() == this)
glUniform1f(loc, value);
}
bool Shader::SetUniformTexture(uint loc, const Texture& texture)
{
- if (g_Device.GetActiveShader() != this)
+ if (g_GfxDevice.GetActiveShader() != this)
return false;
- g_Device.WipeError();
+ g_GfxDevice.WipeError();
glActiveTexture(GL_TEXTURE0 + texUnit);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
GLint tex = texture.GetGLTexture();
glBindTexture(GL_TEXTURE_2D, tex);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
glUniform1i(loc, texUnit);
- if (g_Device.HasError())
+ if (g_GfxDevice.HasError())
return false;
++texUnit;
}
void Shader::SetUniformVector2(uint loc, const Math::Vector2f& vec2)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform2f(loc, vec2.x, vec2.y);
}
void Shader::SetUniformVector3(uint loc, const Math::Vector3f& vec3)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform3f(loc, vec3.x, vec3.y, vec3.z);
}
void Shader::SetUniformVector4(uint loc, const Math::Vector4f& vec4)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform4f(loc, vec4.x, vec4.y, vec4.z, vec4.w);
}
void Shader::SetUniformMatrix44(uint loc, const Math::Matrix44& mat)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniformMatrix4fv(loc, 1, GL_FALSE, mat.GetElements());
}
void Shader::SetUniformColor(uint loc, const Color& color)
{
- if (g_Device.GetActiveShader() == this)
+ if (g_GfxDevice.GetActiveShader() == this)
glUniform4f(loc, color.r, color.g, color.b, color.a);
}
diff --git a/source/modules/asura-core/graphics/shader.h b/source/modules/asura-core/graphics/shader.h
index 615b028..6d7ef90 100644
--- a/source/modules/asura-core/graphics/shader.h
+++ b/source/modules/asura-core/graphics/shader.h
@@ -3,6 +3,7 @@
#include <map>
#include <string>
+#include <vector>
#include <asura-base/Exception.h>
#include <asura-base/Scripting/Scripting.h>
@@ -23,10 +24,21 @@
namespace_begin(AsuraEngine)
namespace_begin(Graphics)
+enum ShaderChannel
+{
+ SHADER_CHANNEL_NONE = -1,
+ SHADER_CHANNEL_VERTEX = 0, // Vertex (vector3)
+ SHADER_CHANNEL_NORMAL, // Normal (vector3)
+ SHADER_CHANNEL_COLOR, // Vertex color
+ SHADER_CHANNEL_TEXCOORD0, // UV set 0 (vector2)
+ SHADER_CHANNEL_TEXCOORD1, // UV set 1 (vector2)
+ SHADER_CHANNEL_TANGENT, // Tangent (vector4)
+ SHADER_CHANNEL_COUNT, // Keep this last!
+};
+
///
-/// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩ uniformsuseɫ
-/// ķ༭ÿshaderͨshaderҵuniforms¶frameworkmaterial
-/// á
+/// һshaderһڲʼ乲ijShaderuniformsͶݣֻṩ uniformsuseɫķ
+/// ༭ÿshaderͨshaderҵuniforms¶frameworkmaterialá
///
class Shader ASURA_FINAL
: public Scripting::Portable<Shader>
@@ -64,10 +76,10 @@ public:
bool SetUniformTexture(uint loc, const Texture& texture);
float GetUniformFloat(uint loc);
- AEMath::Vector2f GetUniformVector2(uint loc);
- AEMath::Vector3f GetUniformVector3(uint loc);
- AEMath::Vector4f GetUniformVector4s(uint loc);
- AEMath::Matrix44 GetUniformMatrix44(uint loc);
+ Vector2f GetUniformVector2(uint loc);
+ Vector3f GetUniformVector3(uint loc);
+ Vector4f GetUniformVector4s(uint loc);
+ Matrix44 GetUniformMatrix44(uint loc);
GLuint GetGLProgram();
@@ -109,6 +121,7 @@ luaxport:
};
+// GPU program
typedef Shader GpuProgram;
namespace_end
diff --git a/source/modules/asura-core/graphics/texture.h b/source/modules/asura-core/graphics/texture.h
index 76b9a8f..572fad4 100644
--- a/source/modules/asura-core/graphics/texture.h
+++ b/source/modules/asura-core/graphics/texture.h
@@ -3,6 +3,7 @@
#include <asura-base/Math/Vector2.hpp>
#include <asura-base/Math/Rect.hpp>
+#include <asura-base/Type.h>
#include "../CoreConfig.h"
@@ -14,6 +15,17 @@ namespace_begin(Graphics)
class RenderTarget;
+/// ͼƬ
+class ImageData
+{
+public:
+ uint8* GetData();
+private:
+ int m_Format;
+ uint8* m_ImageData;
+ Vector2i m_ImageSize;
+};
+
/// UVʽ
enum WrapMode
{
@@ -34,8 +46,8 @@ enum FilterMode
enum ColorFormat
{
COLOR_FORMAT_UNKNOWN,
- COLOR_FORMAT_RGBA8, ///< RGBA8bits int
- COLOR_FORMAT_RGBA32F, ///< RGBA32bits float
+ COLOR_FORMAT_RGBA8,
+ COLOR_FORMAT_RGBA32F,
};
/// ʽGPUڲCPUⲿʽ
@@ -50,11 +62,14 @@ struct TextureFormat
/// 2D࣬2d meshrender targetбʹáTextureȾԭϽǣϷϲԵѿ
/// ϵΪ׼EditorҲϽΪԭ㣬Ϊ˷㡣
///
-ASURA_ABSTRACT class Texture : public AEScripting::Object
+class Texture : public AEScripting::Object
{
public:
- LUAX_DECL_ABSTRACT_FACTORY(Texture);
+ LUAX_DECL_FACTORY(Texture);
+
+ // Texture generator
+ static Texture* GenerateTexture();
Texture();
virtual ~Texture();
@@ -67,9 +82,12 @@ public:
void GetFilterMode();
void GetWrapMode();
- /// UVfilterΪ
bool IsGenMipmap();
+ int GetWidth();
+ int GetHeight();
+ Vector2i GetSize();
+
protected:
/// תcolor formatΪtexture format
@@ -79,7 +97,12 @@ protected:
FilterMode m_MinFilter;
FilterMode m_MagFilter;
WrapMode m_WrapMode;
+ int m_UsageMode;
bool m_IsGenMipmap;
+ Vector2f m_TexelSize;
+ Vector2f m_UVScale;
+
+luaxport:
LUAX_DECL_ENUM(ColorFormat, 1);
LUAX_DECL_ENUM(FilterMode, 1);
@@ -90,11 +113,12 @@ protected:
LUAX_DECL_METHOD(_GetFilterMode);
LUAX_DECL_METHOD(_GetWrapMode);
LUAX_DECL_METHOD(_IsGenMipmap);
+ LUAX_DECL_METHOD(_GetWidth);
+ LUAX_DECL_METHOD(_GetHeight);
+ LUAX_DECL_METHOD(_GetSize);
};
-typedef Texture Drawable;
-
namespace_end
namespace_end