summaryrefslogtreecommitdiff
path: root/source/libs/asura-lib-core
diff options
context:
space:
mode:
Diffstat (limited to 'source/libs/asura-lib-core')
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_image.cpp57
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp21
-rw-r--r--source/libs/asura-lib-core/graphics/binding/_window.cpp103
-rw-r--r--source/libs/asura-lib-core/graphics/image.h15
-rw-r--r--source/libs/asura-lib-core/graphics/window.h19
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glew.cpp0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glew.h0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glut.cpp0
-rw-r--r--source/libs/asura-lib-core/graphics/window_impl_glut.h0
-rw-r--r--source/libs/asura-lib-core/threading/coroutine.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/coroutine.h31
-rw-r--r--source/libs/asura-lib-core/threading/thread.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread.h53
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_posix.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_posix.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_sdl.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_sdl.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_std.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_std.h0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_win32.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_impl_win32.h25
-rw-r--r--source/libs/asura-lib-core/threading/thread_task.cpp0
-rw-r--r--source/libs/asura-lib-core/threading/thread_task.h25
23 files changed, 332 insertions, 17 deletions
diff --git a/source/libs/asura-lib-core/graphics/binding/_image.cpp b/source/libs/asura-lib-core/graphics/binding/_image.cpp
index 7c1034c..b455ad5 100644
--- a/source/libs/asura-lib-core/graphics/binding/_image.cpp
+++ b/source/libs/asura-lib-core/graphics/binding/_image.cpp
@@ -10,10 +10,13 @@ namespace AsuraEngine
LUAX_REGISTRY(Image)
{
LUAX_REGISTER_METHODS(state,
+ { "New", _New },
{ "Load", _Load },
{ "GetWidth", _GetWidth },
{ "GetHeight", _GetHeight },
- { "GetSize", _GetSize }
+ { "GetSize", _GetSize },
+ { "GetPixel", _GetPixel },
+ { "Render", _Render }
);
}
@@ -22,33 +25,75 @@ namespace AsuraEngine
}
- // image:Load()
+ // image = Image.New()
+ LUAX_IMPL_METHOD(Image, _New)
+ {
+ LUAX_STATE(L);
+
+ Image* image = new Image();
+ image->PushLuaxUserdata(state);
+ return 0;
+ }
+
+ // successed = image:Load(image_data)
LUAX_IMPL_METHOD(Image, _Load)
{
LUAX_PREPARE(L, Image);
+ ImageData* imgdata = state.CheckUserdata<ImageData>(2);
+ bool loaded = self->Load(imgdata);
+ state.Push(loaded);
+ return 1;
}
- // image:GetWidth()
+ // width = image:GetWidth()
LUAX_IMPL_METHOD(Image, _GetWidth)
{
LUAX_PREPARE(L, Image);
+ state.Push(self->GetWidth());
+ return 1;
}
- // image:GetHeight()
+ // height = image:GetHeight()
LUAX_IMPL_METHOD(Image, _GetHeight)
{
LUAX_PREPARE(L, Image);
+ state.Push(self->GetHeight());
+ return 1;
}
- // image:GetSize()
+ // w, h = image:GetSize()
LUAX_IMPL_METHOD(Image, _GetSize)
{
LUAX_PREPARE(L, Image);
+ Math::Vector2u size = self->GetSize();
+ state.Push(size.x);
+ state.Push(size.y);
+ return 2;
+ }
+
+ // color32 = image:GetPixel(x, y)
+ LUAX_IMPL_METHOD(Image, _GetPixel)
+ {
+ LUAX_PREPARE(L, Image);
+
+ uint x = state.CheckParam<uint>(2);
+ uint y = state.CheckParam<uint>(3);
+ Color32* c32 = new Color32(self->GetPixel(x, y));
+ c32->PushLuaxUserdata(state);
+ return 1;
+ }
+
+ // image:Render()
+ LUAX_IMPL_METHOD(Image, _Render)
+ {
+ LUAX_PREPARE(L, Image);
+
+ return 0;
}
}
-}
+} \ No newline at end of file
diff --git a/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp b/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp
new file mode 100644
index 0000000..76b544b
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/binding/_image_decode_task.cpp
@@ -0,0 +1,21 @@
+#include "../image_decode_task.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ LUAX_REGISTRY(ImageDecodeTask)
+ {
+
+ }
+
+ LUAX_POSTPROCESS(ImageDecodeTask)
+ {
+
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-core/graphics/binding/_window.cpp b/source/libs/asura-lib-core/graphics/binding/_window.cpp
new file mode 100644
index 0000000..fc74d6c
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/binding/_window.cpp
@@ -0,0 +1,103 @@
+#include "../window.h"
+
+using namespace std;
+
+namespace AsuraEngine
+{
+ namespace Graphics
+ {
+
+ LUAX_REGISTRY(Window)
+ {
+ LUAX_REGISTER_METHODS(state,
+ { "Show", _Show },
+ { "Hide", _Hide },
+ { "SetResolution", _SetResolution },
+ { "SetFullScreen", _SetFullScreen },
+ { "SetTitle", _SetTitle },
+ { "SetWindowStyle", _SetWindowStyle },
+ { "Clear", _Clear },
+ { "Draw", _Draw },
+ { "SwapRenderBuffer", _SwapRenderBuffer }
+ );
+ }
+
+ LUAX_POSTPROCESS(Window)
+ {
+
+ }
+
+ // window:Show()
+ LUAX_IMPL_METHOD(Window, _Show)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Hide()
+ LUAX_IMPL_METHOD(Window, _Hide)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetResolution()
+ LUAX_IMPL_METHOD(Window, _SetResolution)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetFullScreen()
+ LUAX_IMPL_METHOD(Window, _SetFullScreen)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetTitle()
+ LUAX_IMPL_METHOD(Window, _SetTitle)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SetWindowStyle()
+ LUAX_IMPL_METHOD(Window, _SetWindowStyle)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Clear()
+ LUAX_IMPL_METHOD(Window, _Clear)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:Draw()
+ LUAX_IMPL_METHOD(Window, _Draw)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ // window:SwapRenderBuffer()
+ LUAX_IMPL_METHOD(Window, _SwapRenderBuffer)
+ {
+ LUAX_PREPARE(L, Window);
+
+ return 0;
+ }
+
+ }
+}
diff --git a/source/libs/asura-lib-core/graphics/image.h b/source/libs/asura-lib-core/graphics/image.h
index 0e4ea0a..4c1c7b5 100644
--- a/source/libs/asura-lib-core/graphics/image.h
+++ b/source/libs/asura-lib-core/graphics/image.h
@@ -10,6 +10,7 @@
#include "texture.h"
#include "color.h"
+#include "color32.h"
#include "image_data.h"
#include "render_state.h"
@@ -31,6 +32,8 @@ namespace AsuraEngine
{
public:
+ LUAX_DECL_FACTORY(SimImage);
+
Image();
~Image();
@@ -56,21 +59,21 @@ namespace AsuraEngine
private:
- ImageData* mImageData;
+ ImageData* mImageData;
+ Luax::LuaxMemberRef mImageDataRef;
Math::Vector2u mSize;
- public:
-
- LUAX_DECL_FACTORY(SimImage);
-
+ 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);
};
-
+
}
}
diff --git a/source/libs/asura-lib-core/graphics/window.h b/source/libs/asura-lib-core/graphics/window.h
index 0bfd6a1..1b219a2 100644
--- a/source/libs/asura-lib-core/graphics/window.h
+++ b/source/libs/asura-lib-core/graphics/window.h
@@ -12,15 +12,16 @@ namespace AsuraEngine
namespace Graphics
{
+ class WindowImpl;
+
enum WindowStyle
{
WINDOW_STYLE_FULLSCREEN = 1 << 1,
};
- class WindowImpl;
-
///
- /// ڣֶ֧രڡڱ༭Ҫ֧֣runnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua
+ /// ϷĵڣrunnerֻҪһڡͬĿͻʵִ˽ӿڲֶעᵽlua༭ᵼ࣬޽ӵ༭
+ /// ⴰϡ
///
class Window
: public RenderTarget
@@ -63,6 +64,16 @@ namespace AsuraEngine
WindowImpl* mImpl;
+ LUAX_DECL_METHOD(_Show);
+ LUAX_DECL_METHOD(_Hide);
+ LUAX_DECL_METHOD(_SetResolution);
+ LUAX_DECL_METHOD(_SetFullScreen);
+ LUAX_DECL_METHOD(_SetTitle);
+ LUAX_DECL_METHOD(_SetWindowStyle);
+ LUAX_DECL_METHOD(_Clear);
+ LUAX_DECL_METHOD(_Draw);
+ LUAX_DECL_METHOD(_SwapRenderBuffer);
+
};
using RenderWindow = Window;
@@ -71,8 +82,6 @@ namespace AsuraEngine
{
public:
-
-
};
}
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glew.cpp b/source/libs/asura-lib-core/graphics/window_impl_glew.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glew.cpp
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glew.h b/source/libs/asura-lib-core/graphics/window_impl_glew.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glew.h
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glut.cpp b/source/libs/asura-lib-core/graphics/window_impl_glut.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glut.cpp
diff --git a/source/libs/asura-lib-core/graphics/window_impl_glut.h b/source/libs/asura-lib-core/graphics/window_impl_glut.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/graphics/window_impl_glut.h
diff --git a/source/libs/asura-lib-core/threading/coroutine.cpp b/source/libs/asura-lib-core/threading/coroutine.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/coroutine.cpp
diff --git a/source/libs/asura-lib-core/threading/coroutine.h b/source/libs/asura-lib-core/threading/coroutine.h
new file mode 100644
index 0000000..1ac6b21
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/coroutine.h
@@ -0,0 +1,31 @@
+#ifndef __ASURA_COROUTINE_H__
+#define __ASURA_COROUTINE_H__
+
+#include <asura-lib-utils/scripting/portable.hpp>
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// luaЭ̣һЩ߼
+ ///
+ class Coroutine ASURA_FINAL
+ : public AEScripting::Portable<Coroutine>
+ {
+ public:
+
+ LUAX_DECL_FACTORY(Coroutine);
+
+ private:
+
+ LUAX_DECL_METHOD(_New);
+ LUAX_DECL_METHOD(_Run);
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread.cpp b/source/libs/asura-lib-core/threading/thread.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread.cpp
diff --git a/source/libs/asura-lib-core/threading/thread.h b/source/libs/asura-lib-core/threading/thread.h
new file mode 100644
index 0000000..f4d3b48
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread.h
@@ -0,0 +1,53 @@
+#ifndef __ASURA_THREAD_H__
+#define __ASURA_THREAD_H__
+
+#include <queue>
+#include <asura-lib-utils/scripting/portable.hpp>
+
+#include "thread_task.h"
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// ̵߳ľʵ֣û͸ģһ׼ֲԣ
+ /// 1: win32
+ /// 2: posix
+ /// 3: SDL
+ /// 4: std::thread
+ ///
+ ASURA_ABSTRACT class ThreadImpl
+ {
+ public:
+
+ };
+
+ ///
+ /// ߳壬ÿ߳άһtask queue
+ ///
+ class Thread ASURA_FINAL
+ : public AEScripting::Portable<Thread>
+ {
+ public:
+
+ LUAX_DECL_FACTORY(Thread);
+
+ bool Enqueue(ThreadTask* task);
+
+ private:
+
+ ///
+ /// С
+ ///
+ std::queue<ThreadTask*> mTaskQueue;
+
+ ThreadImpl* mImpl;
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread_impl_posix.cpp b/source/libs/asura-lib-core/threading/thread_impl_posix.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_posix.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_posix.h b/source/libs/asura-lib-core/threading/thread_impl_posix.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_posix.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp b/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_sdl.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_sdl.h b/source/libs/asura-lib-core/threading/thread_impl_sdl.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_sdl.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_std.cpp b/source/libs/asura-lib-core/threading/thread_impl_std.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_std.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_std.h b/source/libs/asura-lib-core/threading/thread_impl_std.h
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_std.h
diff --git a/source/libs/asura-lib-core/threading/thread_impl_win32.cpp b/source/libs/asura-lib-core/threading/thread_impl_win32.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_win32.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_impl_win32.h b/source/libs/asura-lib-core/threading/thread_impl_win32.h
new file mode 100644
index 0000000..5d854cc
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_impl_win32.h
@@ -0,0 +1,25 @@
+#ifndef __ASURA_THREAD_WIN32_H__
+#define __ASURA_THREAD_WIN32_H__
+
+#include "../core_config.h"
+
+#include "thread.h"
+
+#if ASURA_THREAD_WIN32
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ class ThreadImplWin32 : public ThreadImpl
+ {
+
+ };
+
+ }
+}
+
+#endif // #if ASURA_THREAD_WIN32
+
+#endif \ No newline at end of file
diff --git a/source/libs/asura-lib-core/threading/thread_task.cpp b/source/libs/asura-lib-core/threading/thread_task.cpp
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_task.cpp
diff --git a/source/libs/asura-lib-core/threading/thread_task.h b/source/libs/asura-lib-core/threading/thread_task.h
new file mode 100644
index 0000000..19eb113
--- /dev/null
+++ b/source/libs/asura-lib-core/threading/thread_task.h
@@ -0,0 +1,25 @@
+#ifndef __ASURA_THRAD_TASK_H__
+#define __ASURA_THRAD_TASK_H__
+
+#include <asura-lib-utils/type.h>
+
+namespace AsuraEngine
+{
+ namespace Threading
+ {
+
+ ///
+ /// ϣһ̴߳񣬼̳TaskдExecute
+ ///
+ ASURA_ABSTRACT class ThreadTask
+ {
+ public:
+
+ virtual bool Execute() = 0;
+
+ };
+
+ }
+}
+
+#endif \ No newline at end of file