diff options
Diffstat (limited to 'src/libjin')
-rw-r--r-- | src/libjin/Common/Array.hpp | 72 | ||||
-rw-r--r-- | src/libjin/Common/common.h | 6 | ||||
-rw-r--r-- | src/libjin/Filesystem/Buffer.h | 26 | ||||
-rw-r--r-- | src/libjin/Graphics/Canvas.h | 2 | ||||
-rw-r--r-- | src/libjin/Graphics/Color.h | 10 | ||||
-rw-r--r-- | src/libjin/Graphics/Shader.cpp | 10 | ||||
-rw-r--r-- | src/libjin/jin.h | 1 |
7 files changed, 116 insertions, 11 deletions
diff --git a/src/libjin/Common/Array.hpp b/src/libjin/Common/Array.hpp new file mode 100644 index 0000000..de22961 --- /dev/null +++ b/src/libjin/Common/Array.hpp @@ -0,0 +1,72 @@ +#ifndef __LIBJIN_COMMON_ARRAY_H +#define __LIBJIN_COMMON_ARRAY_H + +namespace jin +{ + + /* ԶͷŶڴĶ̬ */ + template<typename T> + class Array + { + public: + Array() : length(0), data(nullptr) {} + + Array(int l) + { + length = l; + data = new T[l]; + } + + ~Array() + { + delete[] data; + length = 0; + } + + T* operator &() + { + return data; + } + + T operator[](int index) + { + return data[index]; + } + + /* ڴ */ + void bind(T* d, int len) + { + if (data != nullptr) + delete data; + data = d; + length = len; + } + + void add(T v) + { + int len = length + 1; + T* d = new T[len]; + memcpy(d, data, size()); + d[length] = v; + bind(d, len); + } + + int size() + { + return sizeof(T) * length; + } + + int count() + { + return length; + } + + private: + T * data; + unsigned int length; + + }; + +} + +#endif
\ No newline at end of file diff --git a/src/libjin/Common/common.h b/src/libjin/Common/common.h new file mode 100644 index 0000000..9586c82 --- /dev/null +++ b/src/libjin/Common/common.h @@ -0,0 +1,6 @@ +#ifndef __LIBJIN_COMMON_H +#define __LIBJIN_COMMON_H + +#include "Array.hpp" + +#endif
\ No newline at end of file diff --git a/src/libjin/Filesystem/Buffer.h b/src/libjin/Filesystem/Buffer.h index 3cd92cd..5cb6468 100644 --- a/src/libjin/Filesystem/Buffer.h +++ b/src/libjin/Filesystem/Buffer.h @@ -8,27 +8,43 @@ namespace jin namespace filesystem { + /** + * ڶϷָռbuffer + */ class Buffer { public: Buffer() : data(0), size(0) {} Buffer(const Buffer& src) { - delete data; + delete[] data; size = src.size; data = new char[size]; memcpy(data, src.data, size); } - inline Buffer(void* d, int s) + Buffer(void* d, int s) { - data = new char(size); + data = new char[size]; memcpy(data, d, size); size = s; } - inline ~Buffer() + Buffer(size_t s) + { + data = new char[s]; + memset(data, 0, s); + size = s; + } + ~Buffer() { + delete[] data; size = 0; - delete[] data; + } + void operator = (const Buffer& buffer) + { + delete[] data; + size = buffer.size; + data = new char[size]; + memcpy(data, buffer.data, size); } public: diff --git a/src/libjin/Graphics/Canvas.h b/src/libjin/Graphics/Canvas.h index ec94d28..2522d32 100644 --- a/src/libjin/Graphics/Canvas.h +++ b/src/libjin/Graphics/Canvas.h @@ -31,4 +31,4 @@ namespace graphics } // jin #endif // LIBJIN_MODULES_RENDER -#endif // __LIBJIN_CANVAS_H +#endif // __LIBJIN_CANVAS_H
\ No newline at end of file diff --git a/src/libjin/Graphics/Color.h b/src/libjin/Graphics/Color.h index 4d78706..170ee0b 100644 --- a/src/libjin/Graphics/Color.h +++ b/src/libjin/Graphics/Color.h @@ -16,7 +16,7 @@ namespace graphics class Color { public: - /* Default Colors */ + /* Built-in Colors */ static const Color WHITE; static const Color BLACK; static const Color RED; @@ -45,6 +45,14 @@ namespace graphics a = c.a; } + void operator = (const Color& c) + { + r = c.r; + g = c.g; + b = c.b; + a = c.a; + } + bool operator == (const Color& c) { return r == c.r && g == c.g && b == c.b && a == c.a; diff --git a/src/libjin/Graphics/Shader.cpp b/src/libjin/Graphics/Shader.cpp index ae64c7e..7f849a6 100644 --- a/src/libjin/Graphics/Shader.cpp +++ b/src/libjin/Graphics/Shader.cpp @@ -3,11 +3,14 @@ #include "../utils/macros.h" #include "Shader.h" +#include "../Filesystem/Buffer.h" namespace jin { namespace graphics { + using namespace jin::filesystem; + #include "base.shader.h" /* @@ -55,11 +58,10 @@ namespace graphics : currentTextureUnit(DEFAULT_TEXTURE_UNIT) { int size = strlen(program) + SHADER_FORMAT_SIZE; - char* fs = (char*)alloca(size); - memset(fs, 0, size); - formatShader(fs, program); + Buffer b = Buffer(size); + formatShader((char*)b.data, program); GLuint shader = glCreateShader(GL_FRAGMENT_SHADER); - glShaderSource(shader, 1, (const GLchar**)&fs, NULL); + glShaderSource(shader, 1, (const GLchar**)&b.data, NULL); glCompileShader(shader); GLint success; glGetShaderiv(shader, GL_COMPILE_STATUS, &success); diff --git a/src/libjin/jin.h b/src/libjin/jin.h index 2565cfe..6651783 100644 --- a/src/libjin/jin.h +++ b/src/libjin/jin.h @@ -14,6 +14,7 @@ #include "Graphics/Graphics.h" #include "Time/Timer.h" #include "Thread/Thread.h" +#include "Common/common.h" #define LIBJIN_VERSION "Jin 0.1"; #define LIBJIN_AUTHOR "Chai"; |