diff options
author | chai <chaifix@163.com> | 2018-11-18 23:45:58 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-11-18 23:45:58 +0800 |
commit | 4279e16ddb6273a9711ff331d21325dd5f63e769 (patch) | |
tree | 0d7ff12807fba478134f3bf9e01fd474c3a0b510 /src | |
parent | 8cb74178c2b8e5883a1181af687fa8cfc0c6e5da (diff) |
*修改目录为小写
Diffstat (limited to 'src')
56 files changed, 0 insertions, 5641 deletions
diff --git a/src/libjin/Graphics/animations/je_animation.cpp b/src/libjin/Graphics/animations/je_animation.cpp deleted file mode 100644 index 4fe673a..0000000 --- a/src/libjin/Graphics/animations/je_animation.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "je_animation.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Animations - { - - - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/animations/je_animation.h b/src/libjin/Graphics/animations/je_animation.h deleted file mode 100644 index 9926cf9..0000000 --- a/src/libjin/Graphics/animations/je_animation.h +++ /dev/null @@ -1,64 +0,0 @@ -#ifndef __JE_ANIMATION_H__ -#define __JE_ANIMATION_H__ - -#include <vector> -#include <string> - -#include "../je_sprite.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Animations - { - - /// - /// Animation clip with key. - /// - class Animation - { - public: - void update(float dt); - - void start(); - void pause(); - void stop(); - void rewind(); - void setSpeed(float speed); - - /// - /// Get current frame index. - /// - uint getCurrentFrameIndex(); - - /// - /// - /// - Sprite* getCurrentFrame(); - - /// - /// Set current frame index. - /// - /// @param frame Current frame to play. - /// - void setCurrentFrame(uint frame); - - private: - /// - /// Key frames. - /// - std::vector<Sprite*> mFrames; - - /// - /// Animation playing speed. - /// - float mSpeed; - - }; - - } // namespace Animations - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/animations/je_animator.cpp b/src/libjin/Graphics/animations/je_animator.cpp deleted file mode 100644 index 360bd5d..0000000 --- a/src/libjin/Graphics/animations/je_animator.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "je_animator.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Animations - { - - - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/animations/je_animator.h b/src/libjin/Graphics/animations/je_animator.h deleted file mode 100644 index 6510a7d..0000000 --- a/src/libjin/Graphics/animations/je_animator.h +++ /dev/null @@ -1,50 +0,0 @@ -#ifndef __JE_ANIMATOR_H__ -#define __JE_ANIMATOR_H__ - -#include <map> -#include <vector> -#include <string> - -#include "je_animation.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Animations - { - - /// - /// - /// - class Animator - { - public: - void addAnimation(const std::string& key, Animation* clip); - bool hasKey(const std::string& key); - - void play(); - void switchAnimation(const std::string& key); - - /// - /// Control clips. - /// - void stopAnimation(); - void pauseAnimation(); - void rewindAnimation(); - void startAnimation(); - - private: - /// - /// Map a key to clips. - /// - std::map<std::string, Animation*> mAnimations; - Animation* mCurrentAnimation; - - }; - - } // namespace Animations - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_decoder.cpp b/src/libjin/Graphics/fonts/je_decoder.cpp deleted file mode 100644 index 02112a0..0000000 --- a/src/libjin/Graphics/fonts/je_decoder.cpp +++ /dev/null @@ -1,96 +0,0 @@ -#include <stdlib.h> -#include <string.h> -#include "je_decoder.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - /* utf8 byte string to unicode codepoint */ - static const char *utf8toCodepoint(const char *p, unsigned *res) { - return nullptr; - - } - - ///////////////////////////////////////////////////////////////////////////// - // decoders - ///////////////////////////////////////////////////////////////////////////// - - const void* Utf8::decode(const void* data, Codepoint* res) const - { - const char* p = (char*)data; - unsigned x, mask, shift; - switch (*p & 0xf0) { - case 0xf0: mask = 0x07; shift = 18; break; - case 0xe0: mask = 0x0f; shift = 12; break; - case 0xc0: - case 0xd0: mask = 0x1f; shift = 6; break; - default: - *res = *p; - return p + 1; - } - x = (*p & mask) << shift; - do { - if (*(++p) == '\0') { - *res = x; - return p; - } - shift -= 6; - x |= (*p & 0x3f) << shift; - } while (shift); - *res = x; - return p + 1; - } - - const void* Utf8::next(const void* data) const - { - const char* p = (char*)data; - unsigned x, mask, shift; - switch (*p & 0xf0) { - case 0xf0: mask = 0x07; shift = 18; break; - case 0xe0: mask = 0x0f; shift = 12; break; - case 0xc0: - case 0xd0: mask = 0x1f; shift = 6; break; - default: - return p + 1; - } - x = (*p & mask) << shift; - do { - if (*(++p) == '\0') { - return p; - } - shift -= 6; - x |= (*p & 0x3f) << shift; - } while (shift); - return p + 1; - } - /* - const void* Utf16::decode(const void* data, Codepoint* res) const - { - return nullptr; - } - - const void* Utf16::next(const void* data) const - { - return nullptr; - } - */ - const void* Ascii::decode(const void* data, Codepoint* res) const - { - const char* p = (char*)data; - *res = *p; - return p + 1; - } - - const void* Ascii::next(const void* data) const - { - const char* p = (char*)data; - return p + 1; - } - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_decoder.h b/src/libjin/Graphics/fonts/je_decoder.h deleted file mode 100644 index 840cada..0000000 --- a/src/libjin/Graphics/fonts/je_decoder.h +++ /dev/null @@ -1,97 +0,0 @@ -#ifndef __JE_UTF8_H__ -#define __JE_UTF8_H__ - -#include <vector> - -#include "je_text.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - /// - /// Text decoder. - /// - class Decoder - { - public: - - /// - /// Decode a code unit. - /// - /// @param data Code units. - /// @param codepoint Value of code point. - /// @return Next code unit location. - /// - virtual const void* decode(const void* data, Codepoint* codepoint) const = 0; - - /// - /// Get next code unit location. - /// - /// @param data Code units. - /// @return Next code unit location. - /// - virtual const void* next(const void* data) const = 0; - - }; - - /// - /// Utf-8 decoder. - /// - class Utf8 : public Decoder - { - public: - - /// - /// Decode a code unit. - /// - /// @param data Code units. - /// @param codepoint Value of code point. - /// @return Next code unit location. - /// - const void* decode(const void* data, Codepoint* codepoint) const override; - - /// - /// Get next code unit location. - /// - /// @param data Code units. - /// @return Next code unit location. - /// - const void* next(const void* data) const override; - - }; - - /// - /// Ascii decoder. - /// - class Ascii : public Decoder - { - public: - - /// - /// Decode a code unit. - /// - /// @param data Code units. - /// @param codepoint Value of code point. - /// @return Next code unit location. - /// - const void* decode(const void* data, Codepoint* codepoint) const override; - - /// - /// Get next code unit location. - /// - /// @param data Code units. - /// @return Next code unit location. - /// - const void* next(const void* data) const override; - - }; - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_font.h b/src/libjin/Graphics/fonts/je_font.h deleted file mode 100644 index 9581b9f..0000000 --- a/src/libjin/Graphics/fonts/je_font.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __JE_FONT_H__ -#define __JE_FONT_H__ - -#include <vector> -#include "je_text.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - struct Page; - - // - // Font - // |- TTF - // |- TextureFont - // - - /// - /// Base Font class. - /// - class Font - { - public: - /// - /// Font constructor. - /// - Font(unsigned fontsize) - : mFontSize(fontsize) - { - } - - /// - /// Font destructor. - /// - virtual ~Font() {}; - - /// - /// Create page with given text. - /// - /// @param text Text to be typesetted. - /// @param lineheight Line height of text. - /// @param spacing Spacing between characters. 0 by default. - /// @return Page if created successfully, otherwise return null. - /// - virtual Page* typeset(const Text& text, int lineheight, int spacing = 0) = 0; - - /// - /// Create page with given unicode codepoints. - /// - /// @param content Unicode codepoints to be typesetted. - /// @param lineheight Line height of text. - /// @param spacing Spacing between characters. 0 by default. - /// @return Page if created successfully, otherwise return null. - /// - virtual Page* typeset(const Content& content, int lineheight, int spacing = 0) = 0; - - /// - /// Render page to given position. - /// - /// @param page Page to be rendered. - /// @param x X value of the position. - /// @param y Y value of the position. - /// - virtual void render(const Page* page, int x, int y) = 0; - - /// - /// Render unicode codepoints to given position. - /// - /// @param content Unicode codepoints to be typesetted. - /// @param x X value of the position. - /// @param y Y value of the position. - /// @param lineheight Line height of the content. - /// @param spacing Spacing between characters. - /// - virtual void render(const Content& content, int x, int y, int lineheight, int spacing = 0) = 0; - - /// - /// Render text to given position. - /// - /// @param text Text to be rendered. - /// @param x X value of the position. - /// @param y Y value of the position. - /// @param lineheight Line height of the text. - /// @param spacing Spacing between characters. - /// - virtual void render(const Text& text, int x, int y, int lineheight, int spacing = 0) = 0; - - /// - /// Get font size. - /// - /// @return Font size. - /// - inline unsigned getFontSize() { return mFontSize; }; - - protected: - - unsigned mFontSize; - - }; - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif // __JE_FONT_H__ diff --git a/src/libjin/Graphics/fonts/je_page.h b/src/libjin/Graphics/fonts/je_page.h deleted file mode 100644 index 707f53a..0000000 --- a/src/libjin/Graphics/fonts/je_page.h +++ /dev/null @@ -1,54 +0,0 @@ -#ifndef __JE_PAGE_H__ -#define __JE_PAGE_H__ - -#include "../../math/je_vector2.hpp" - -#include "je_font.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - class Font; - - /// - /// Glyphs data to be rendered. - /// - struct GlyphVertex - { - int x, y; ///< screen coordinates - float u, v; ///< normalized texture uv - }; - - /// - /// Glyphs info for reducing draw call. - /// - struct GlyphArrayDrawInfo - { - GLuint texture; ///< atlas - unsigned int start; ///< glyph vertex indecies - unsigned int count; ///< glyph vertex count - }; - - /// - /// Page to be rendered. - /// - /// A page is a pre-rendered text struct for reducing draw call. Each page - /// keeps a font pointer which should not be changed. - /// - struct Page - { - Font* font; - std::vector<GlyphArrayDrawInfo> glyphinfolist; - std::vector<GlyphVertex> glyphvertices; - Math::Vector2<int> size; - }; - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif // __JE_PAGE_H__ diff --git a/src/libjin/Graphics/fonts/je_text.cpp b/src/libjin/Graphics/fonts/je_text.cpp deleted file mode 100644 index 80aaa6a..0000000 --- a/src/libjin/Graphics/fonts/je_text.cpp +++ /dev/null @@ -1,157 +0,0 @@ -#include <cstring> - -#include "je_text.h" -#include "je_decoder.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - ///////////////////////////////////////////////////////////////////////////// - // iterator - ///////////////////////////////////////////////////////////////////////////// - - Text::Iterator::Iterator(const Iterator& itor) - : data(itor.data) - , p(itor.p) - , encode(itor.encode) - , length(itor.length) - { - switch (encode) - { - case Encode::UTF8: decoder = new Utf8(); break; - case Encode::ASCII: decoder = new Ascii(); break; - } - } - - Text::Iterator::Iterator(const Encode& _encode, const void* _data, unsigned int _length) - : data(_data) - , p(_data) - , encode(_encode) - , length(_length) - { - switch (encode) - { - case Encode::UTF8: decoder = new Utf8(); break; - case Encode::ASCII: decoder = new Ascii(); break; - } - } - - Text::Iterator::~Iterator() - { - delete decoder; - } - - Codepoint Text::Iterator::get() - { - Codepoint codepoint; - decoder->decode(p, &codepoint); - return codepoint; - } - - Codepoint Text::Iterator::operator*() - { - return get(); - } - /* - Text::Iterator Text::Iterator::begin() - { - Iterator itor(encode, data, length); - itor.toBegin(); - return itor; - } - - Text::Iterator Text::Iterator::end() - { - Iterator itor(encode, data, length); - itor.toEnd(); - return itor; - } - */ - void Text::Iterator::toBegin() - { - p = (const unsigned char*)data; - } - - void Text::Iterator::toEnd() - { - p = (const unsigned char*)data + length; - } - - Text::Iterator& Text::Iterator::operator ++() - { - p = decoder->next(p); - return *this; - } - - Text::Iterator Text::Iterator::operator ++(int) - { - p = decoder->next(p); - Iterator itor(encode, data, length); - itor.p = p; - return itor; - } - - bool Text::Iterator::operator !=(const Iterator& itor) - { - return !(data == itor.data - && p == itor.p - && length == itor.length - && encode == itor.encode); - } - - bool Text::Iterator::operator ==(const Iterator& itor) - { - return data == itor.data - && p == itor.p - && length == itor.length - && encode == itor.encode; - } - - ///////////////////////////////////////////////////////////////////////////// - // text - ///////////////////////////////////////////////////////////////////////////// - - Text::Text(Encode encode, const void* data) - { - unsigned length = strlen((const char*)data); - Iterator end = Iterator(encode, data, length); - end.toEnd(); - Iterator it = Iterator(encode, data, length); - for (; it != end; ++it) - { - content.push_back(*it); - } - } - - Text::Text(Encode encode, const void* data, unsigned length) - { - Iterator end = Iterator(encode, data, length); - end.toEnd(); - Iterator it = Iterator(encode, data, length); - for (; it != end; ++it) - { - content.push_back(*it); - } - } - - Text::~Text() - { - } - - const Content& Text::getContent() const - { - return content; - } - - const Content& Text::operator*() const - { - return content; - } - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_text.h b/src/libjin/Graphics/fonts/je_text.h deleted file mode 100644 index 6e6f8b0..0000000 --- a/src/libjin/Graphics/fonts/je_text.h +++ /dev/null @@ -1,172 +0,0 @@ -#ifndef __JE_TEXT_H__ -#define __JE_TEXT_H__ - -#include <vector> - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - typedef unsigned int Codepoint; - - typedef std::vector<Codepoint> Content; - - class Text; - - class Decoder; - - /// - /// Supported text encoding. - /// - enum Encode - { - UTF8, ///< utf-8 - ASCII, ///< ASCII - }; - - /// - /// Decoded text. Saved as unicode codepoints. - /// - class Text - { - public: - /// - /// - /// - Text(Encode encode, const void* data); - - /// - /// - /// - Text(Encode encode, const void* data, unsigned int length); - - /// - /// - /// - ~Text(); - - /// - /// - /// - const Content& getContent() const; - - /// - /// - /// - const Content& operator*() const; - - private: - /// - /// - /// - class Iterator - { - public: - - /// - /// - /// - Iterator(const Iterator& itor); - - /// - /// - /// - Iterator(const Encode& encode, const void* data, unsigned int length); - - /// - /// - /// - ~Iterator(); - - /// - /// - /// - Codepoint get(); - - //Iterator begin(); - //Iterator end(); - - /// - /// - /// - void toBegin(); - - /// - /// - /// - void toEnd(); - - /// - /// - /// - Codepoint operator *(); - - /// - /// - /// - Iterator& operator ++(); - - /// - /// - /// - Iterator operator ++(int); - - /// - /// - /// - bool operator !=(const Iterator& itor); - - /// - /// - /// - bool operator ==(const Iterator& itor); - - private: - - /// - /// - /// - void operator = (const Iterator&); - - /// - /// - /// - const Encode encode; - - /// - /// - /// - const Decoder* decoder; - - /// - /// - /// - const void* p; - - /// - /// - /// - const void* const data; - - /// - /// - /// - unsigned int length; - - }; - - /// - /// - /// - Content content; - - }; - - } - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_texture_font.cpp b/src/libjin/Graphics/fonts/je_texture_font.cpp deleted file mode 100644 index 3599c58..0000000 --- a/src/libjin/Graphics/fonts/je_texture_font.cpp +++ /dev/null @@ -1,322 +0,0 @@ -#include <vector> - -#include "../../math/je_vector2.hpp" - -#include "../shaders/je_shader.h" - -#include "je_texture_font.h" - -using namespace std; -using namespace JinEngine::Math; -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - TextureFont * TextureFont::createTextureFont(const Bitmap* bitmap, const Content& codepoints, int cellw, int cellh) - { - TextureFont* tf = new TextureFont(bitmap, codepoints, cellw, cellh); - return tf; - } - - TextureFont * TextureFont::createTextureFont(const Bitmap* bitmap, const Text& codepoints, int cellw, int cellh) - { - TextureFont* tf = new TextureFont(bitmap, *codepoints, cellw, cellh); - return tf; - } - - TextureFont* TextureFont::createTextureFont(const Bitmap* bitmap, const Content& codepoints, Color mask, int cellh) - { - TextureFont* tf = new TextureFont(bitmap, codepoints, mask, cellh); - return tf; - } - - TextureFont* TextureFont::createTextureFont(const Bitmap* bitmap, const Text& codepoints, Color mask, int cellh) - { - TextureFont* tf = new TextureFont(bitmap, *codepoints, mask, cellh); - return tf; - } - - TextureFont::~TextureFont() - { - } - - const TextureFont::TextureGlyph* TextureFont::findGlyph(Codepoint codepoint) const - { - auto it = glyphs.find(codepoint); - if (it != glyphs.end()) - { - return &it->second; - } - else - return nullptr; - } - - Page* TextureFont::typeset(const Content& text, int lineheight, int spacing) - { - Page* page = new Page(); - page->font = this; - vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; - vector<GlyphVertex>& glyphvertices = page->glyphvertices; - int texture = -1; - const TextureGlyph* glyph = nullptr; - GlyphVertex vertex; - Vector2<int> p(0, 0); - int i = 0; - -#define glyphvertices_push(_x, _y, _u, _v) \ - vertex.x = _x; vertex.y = _y;\ - vertex.u = _u; vertex.v = _v;\ - glyphvertices.push_back(vertex);\ - - for (Codepoint c : text) - { - // return - if (c == 0x0D) continue; - // newline - if (c == 0x0A) - { - p.y += lineheight; - p.x = 0; - continue; - } - if (c == 0x09) - { - // tab = 4*space - unsigned cw = getCharWidth(0x20); - p.x += cw * 4; - continue; - } - glyph = findGlyph(c); - if (glyph == nullptr) continue; - if (texture != getGLTexture()) - { - texture = getGLTexture(); - GlyphArrayDrawInfo info; - info.start = i; - info.count = 0; - info.texture = texture; - glyphinfolist.push_back(info); - } - glyphinfolist[glyphinfolist.size() - 1].count += 4; - // normalized - float w = getWidth(), h = getHeight(); - float nx = glyph->x / w, ny = glyph->y / h; - float nw = glyph->w / w, nh = glyph->h / h; - glyphvertices_push(p.x, p.y, nx, ny); - glyphvertices_push(p.x, p.y + glyph->h, nx, ny + nh); - glyphvertices_push(p.x + glyph->w, p.y + glyph->h, nx + nw, ny + nh); - glyphvertices_push(p.x + glyph->w, p.y, nx + nw, ny); - p.x += glyph->w + spacing; - i += 4; - } - getTextBox(text, &page->size.w, &page->size.h, lineheight, spacing); - return page; - } - - int TextureFont::getCharWidth(int c) - { - auto it = glyphs.find(c); - if (it != glyphs.end()) - { - return it->second.w; - } - return 0; - } - - int TextureFont::getCharHeight(int c) - { - auto it = glyphs.find(c); - if (it != glyphs.end()) - { - return it->second.h; - } - return 0; - } - - int TextureFont::getTextWidth(const Content& t, int spacing) - { - int res = 0; - int tmp = 0; - for (Codepoint c : t) - { - if (c == 0x0D) - continue; - if (c == 0x0A) - { - tmp = 0; - continue; - } - if (c == 0x09) - { - // tab = 4*space - unsigned cw = getCharWidth(0x20); - tmp += cw * 4; - if (tmp > res) res = tmp; - continue; - } - tmp += getCharWidth(c) + spacing; - if (tmp > res) res = tmp; - } - return res; - } - - int TextureFont::getTextHeight(const Content& t, int lineheight) - { - int res = 0; - bool newline = true; - for (Codepoint c : t) - { - if (c == 0x0A) - newline = true; - else if (c == 0x0D); - else if (newline) - { - newline = false; - res += lineheight; - } - } - return res; - } - - void TextureFont::getTextBox(const Content& text, int* w, int* h, int lineheight, int spacing) - { - *w = 0; - *h = 0; - int tmp = 0; - bool newline = true; - for (Codepoint c : text) - { - if (c == 0x0D) - continue; - if (c == 0x0A) - { - tmp = 0; - newline = true; - continue; - } - else if (newline) - { - newline = false; - *h += lineheight; - } - tmp += getCharWidth(c) + spacing; - if (tmp > *w) - *w = tmp; - } - } - - Page* TextureFont::typeset(const Text& text, int lineheight, int spacing) - { - return typeset(*text, lineheight, spacing); - } - - void TextureFont::render(const Page* page, int x, int y) - { - Shader* shader = Shader::getCurrentShader(); - const vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; - const vector<GlyphVertex>& glyphvertices = page->glyphvertices; - Matrix modelMatrix = gl.getModelViewMatrix(x, y, 1, 1, 0, 0, 0); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - for (int i = 0; i < glyphinfolist.size(); ++i) - { - const GlyphArrayDrawInfo& info = glyphinfolist[i]; - shader->setVertexPointer(2, GL_INT, sizeof(GlyphVertex), &glyphvertices[info.start].x); - shader->setUVPointer(2, GL_FLOAT, sizeof(GlyphVertex), &glyphvertices[info.start].u); - gl.bindTexture(info.texture); - gl.drawArrays(GL_QUADS, 0, info.count); - gl.bindTexture(0); - } - } - - void TextureFont::render(const Content& text, int x, int y, int lineheight, int spacing) - { - Page* page = typeset(text, lineheight, spacing); - render(page, x, y); - delete page; - } - - void TextureFont::render(const Text& text, int x, int y, int lineheight, int spacing) - { - Page* page = typeset(text, lineheight, spacing); - render(page, x, y); - delete page; - } - - TextureFont::TextureFont(const Bitmap* bitmap, const Content& codepoints, int cellw, int cellh) - : Graphic(bitmap) - , Font(cellh) - { - TextureGlyph glyph; - Vector2<int> count(bitmap->getWidth() / cellw, bitmap->getHeight() / cellh); - glyph.w = cellw; - glyph.h = cellh; - for (int y = 0; y < count.row; ++y) - { - glyph.y = y * cellh; - for (int x = 0; x < count.colum; ++x) - { - glyph.x = x * cellw; - if (x + y * count.colum >= codepoints.size()) - return; - glyphs.insert(std::pair<Codepoint, TextureGlyph>(codepoints[x + y * count.colum], glyph)); - } - } - } - - TextureFont::TextureFont(const Bitmap* bitmap, const Content& codepoints, Color mask, int cellh) - : Graphic(bitmap) - , Font(cellh) - { - TextureGlyph glyph; - glyph.h = cellh; - int w = bitmap->getWidth(); - int h = bitmap->getHeight(); - int i = 0; - for (int y = 0; y < h; y += cellh) - { - glyph.y = y; - bool newc = false; - for (int x = 0; x <= w; ++x) - { - if (x == w && newc) - { - glyph.w = x - glyph.x; - if (i >= codepoints.size()) - return; - glyphs.insert(std::pair<Codepoint, TextureGlyph>(codepoints[i], glyph)); - ++i; - newc = false; - break; - } - Color c = bitmap->getPixels()[x + y * w]; - if (!newc && c != mask) - { - glyph.x = x; - newc = true; - } - else if (newc && c == mask) - { - glyph.w = x - glyph.x; - if (i >= codepoints.size()) - return; - glyphs.insert(std::pair<Codepoint, TextureGlyph>(codepoints[i], glyph)); - if (codepoints[i] == 't') - { - int a = 10; - } - ++i; - newc = false; - } - } - } - } - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_texture_font.h b/src/libjin/Graphics/fonts/je_texture_font.h deleted file mode 100644 index 8a50699..0000000 --- a/src/libjin/Graphics/fonts/je_texture_font.h +++ /dev/null @@ -1,144 +0,0 @@ -#ifndef __JE_TEXTURE_FONT_H__ -#define __JE_TEXTURE_FONT_H__ - -#include <map> -#include <vector> - -#include "../../math/je_vector4.hpp" - -#include "../je_graphic.h" -#include "../je_bitmap.h" - -#include "je_page.h" -#include "je_font.h" -#include "je_text.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - /// - /// - /// - class TextureFont - : public Font - , public Graphic - { - public: - - /// - /// - /// - static TextureFont* createTextureFont(const Bitmap* bitmap, const Content& codepoints, int cellw, int cellh); - - /// - /// - /// - static TextureFont* createTextureFont(const Bitmap* bitmap, const Text& text, int cellw, int cellh); - - /// - /// - /// - static TextureFont* createTextureFont(const Bitmap* bitmap, const Content& codepoints, Color mask, int cellh); - - /// - /// - /// - static TextureFont* createTextureFont(const Bitmap* bitmap, const Text& text, Color mask, int cellh); - - /// - /// - /// - ~TextureFont(); - - /// - /// - /// - Page* typeset(const Text& text, int lineheight, int spacing = 0) override; - - /// - /// - /// - Page* typeset(const Content& text, int lineheight, int spacing = 0) override; - - /// - /// - /// - void render(const Page* page, int x, int y) override; - - /// - /// - /// - void render(const Content& text, int x, int y, int linehgiht, int spacing = 0) override; - - /// - /// - /// - void render(const Text& text, int x, int y, int lineheight, int spacing = 0)override; - - private: - - /// - /// - /// - struct TextureGlyph - { - float x, y, w, h; - }; - - /// - /// - /// - TextureFont(const Bitmap* bitmap, const Content& codepoints, int cellw, int cellh); - - /// - /// - /// - TextureFont(const Bitmap* bitmap, const Content& codepoints, Color mask, int cellh); - - /// - /// - /// - int getCharWidth(int c); - - /// - /// - /// - int getCharHeight(int c); - - /// - /// - /// - int getTextWidth(const Content& text, int spacing = 0); - - /// - /// - /// - int getTextHeight(const Content& text, int lineheight); - - /// - /// - /// - void getTextBox(const Content& text, int* w, int* h, int lineheight, int spacing = 0); - - /// - /// - /// - const TextureGlyph* findGlyph(Codepoint codepoint) const; - - - /// - /// - /// - std::map<Codepoint, TextureGlyph> glyphs; - - }; - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_ttf.cpp b/src/libjin/Graphics/fonts/je_ttf.cpp deleted file mode 100644 index 1f79558..0000000 --- a/src/libjin/Graphics/fonts/je_ttf.cpp +++ /dev/null @@ -1,468 +0,0 @@ -#include "../../core/je_configuration.h" -#if defined(jin_graphics) - -#include <stdio.h> - -#include "../../common/je_array.hpp" - -#include "../je_gl.h" -#include "../je_color.h" -#include "../shaders/je_shader.h" - -#include "je_ttf.h" -#include "je_page.h" - -#define STB_TRUETYPE_IMPLEMENTATION -#include "stb/stb_truetype.h" - -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - ////////////////////////////////////////////////////////////////////////////////////////////////////// - // TTFData - ////////////////////////////////////////////////////////////////////////////////////////////////////// - - TTFData* TTFData::createTTFData(const unsigned char* data, unsigned int size) - { - TTFData* ttf = nullptr; - try - { - ttf = new TTFData(data, size); - return ttf; - } - catch (...) - { - return nullptr; - } - } - - TTFData::TTFData(const unsigned char* d, unsigned int s) - { - raw.size = s; - raw.data = (unsigned char*)malloc(s); - memcpy(raw.data, d, s); - if (!stbtt_InitFont(&info, (const unsigned char*)raw.data, 0)) - { - delete raw.data; - throw 0; - } - /* push default fontsize */ - pushTTFsize(FONT_SIZE); - } - - TTFData::~TTFData() - { - free(raw.data); - } - - TTF* TTFData::createTTF(unsigned fontSize) - { - TTF* ttf; - try - { - ttf = new TTF(this, fontSize); - } - catch (...) - { - return nullptr; - } - return ttf; - } - - /* - * (0, 0) - * +--------------+ ascent - * | +--------+ | - * | | | | - * | | bitmap | | - * +--|--------|--+ baseline - * | +--------+ | - * +--|-----------+ decent - * | | - * leftSideBearing | - * advanceWidth - */ - void TTFData::getVMetrics(int* baseline, int* descent) - { - float scale = scales.back(); - int ascent; - stbtt_GetFontVMetrics(&info, &ascent, descent, 0); - *baseline = (int)(ascent*scale) + 1; // slight adjustment - *descent = *baseline - (int)(*descent*scale) + 1; - } - - void TTFData::getHMetrics(unsigned int codepoint, int* advanceWidth, int* leftSideBearing) - { - float scale = scales.back(); - int adw, lsb; - stbtt_GetCodepointHMetrics(&info, codepoint, &adw, &lsb); - *advanceWidth = (int)(adw*scale); - *leftSideBearing = (int)(lsb*scale); - } - - void TTFData::pushTTFsize(unsigned int fs) - { - float sc = stbtt_ScaleForPixelHeight(&info, fs); - scales.push_back(sc); - } - - void TTFData::popTTFsize() - { - /* always keep default ttf size on the bottom of stack */ - if (scales.size() > 1) - scales.pop_back(); - } - - Channel* TTFData::getCodepointBitmapAlpha(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const - { - float scale = scales.back(); - Channel* bitmap = stbtt_GetCodepointBitmap(&info, scale, scale, codepoint, width, height, xoff, yoff); - return bitmap; - } - - Color* TTFData::getCodepointBitmap(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const - { - float scale = scales.back(); - Channel* bitmap = stbtt_GetCodepointBitmap(&info, scale, scale, codepoint, width, height, xoff, yoff); - int w = *width, h = *height; - //int xo = *xoff, yo = *yoff; - Color* bitmap32 = new Color[w*h]; - for (int y = 0; y < h; ++y) - { - for (int x = 0; x < w; ++x) - { - bitmap32[x + y * w].set(0xff, 0xff, 0xff, bitmap[x + y * w]); - } - } - free(bitmap); - return bitmap32; - } - - ////////////////////////////////////////////////////////////////////////////////////////////////////// - // TTF - ////////////////////////////////////////////////////////////////////////////////////////////////////// - -#include "../shaders/built-in/je_font.shader.h" - - using namespace std; - using namespace JinEngine::Math; - - const int TTF::TEXTURE_WIDTHS[] = { 128, 256, 256, 512, 512, 1024, 1024 }; - const int TTF::TEXTURE_HEIGHTS[] = { 128, 128, 256, 256, 512, 512, 1024 }; - - /* little endian unicode */ - static const char* unicodeLittleEndian(const char* p, unsigned* res) - { - } - - ///*static*/ TTF* TTF::createTTF(TTFData* fontData, unsigned int fontSzie) - //{ - // TTF* ttf; - // try - // { - // ttf = new TTF(fontData, fontSzie); - // } - // catch (...) - // { - // return nullptr; - // } - // return ttf; - //} - - TTF::TTF(TTFData* f, unsigned int fontSize) - : Font(fontSize) - , cursor(0, 0) - , ttf(f) - { - ttf->pushTTFsize(fontSize); - ttf->getVMetrics(&baseline, &descent); - estimateSize(); - ttf->popTTFsize(); - /* create a default texture */ - createAtlas(); - } - - /* estimate the size of atlas texture */ - void TTF::estimateSize() - { - for (int level = 0; level <= TEXTURE_SIZE_LEVEL_MAX; ++level) - { - if (descent * (descent*0.8) * 96 <= TEXTURE_WIDTHS[level] * TEXTURE_HEIGHTS[level]) - { - textureWidth = TEXTURE_WIDTHS[level]; - textureHeight = TEXTURE_HEIGHTS[level]; - break; - } - } - } - - TTF::~TTF() - { - } - - GLuint TTF::createAtlas() - { - GLuint t; - gl.flushError(); - t = gl.genTexture(); - gl.bindTexture(t); - gl.setTexParameter(GL_TEXTURE_MAG_FILTER, GL_LINEAR); - gl.setTexParameter(GL_TEXTURE_MIN_FILTER, GL_LINEAR); - gl.setTexParameter(GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); - gl.setTexParameter(GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); - gl.texImage(GL_RGBA8, textureWidth, textureHeight, GL_RGBA, GL_UNSIGNED_BYTE); - if (glGetError() != GL_NO_ERROR) - { - glDeleteTextures(1, &t); - gl.bindTexture(0); - return 0; - } - atlases.push_back(t); - gl.bindTexture(0); - return t; - } - - void TTF::render(const Content& t, int x, int y, int lineheight, int spacing) - { - Page* page = typeset(t, lineheight, spacing); - render(page, x, y); - delete page; - } - - Page* TTF::typeset(const Content& text, int lineheight, int spacing) - { - Page* page = new Page(); - page->font = this; - vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; - vector<GlyphVertex>& glyphvertices = page->glyphvertices; - int texture = -1; - TTFGlyph* glyph = nullptr; - GlyphVertex vertex; - Vector2<int> p(0, 0); - int i = 0; - -#define glyphvertices_push(_x, _y, _u, _v) \ - vertex.x = _x; vertex.y = _y;\ - vertex.u = _u; vertex.v = _v;\ - glyphvertices.push_back(vertex); - -#define glyphlize(c)\ - do{\ - glyph = &findGlyph(c); \ - if (texture != glyph->atlas) \ - { \ - GlyphArrayDrawInfo info; \ - info.start = i; \ - info.count = 0; \ - info.texture = glyph->atlas; \ - texture = glyph->atlas; \ - glyphinfolist.push_back(info); \ - } \ - glyphinfolist[glyphinfolist.size() - 1].count += 4; \ - TTFGlyph::Bbox& bbox = glyph->bbox; \ - glyphvertices_push(p.x, p.y, bbox.x, bbox.y); \ - glyphvertices_push(p.x, p.y + glyph->height, bbox.x, bbox.y + bbox.h); \ - glyphvertices_push(p.x + glyph->width, p.y + glyph->height, bbox.x + bbox.w, bbox.y + bbox.h); \ - glyphvertices_push(p.x + glyph->width, p.y, bbox.x + bbox.w, bbox.y); \ - }while(0) - - for (Codepoint c : text) - { - if (c == 0x0D) - continue; - if (c == 0x0A) - { - /* new line */ - p.y += lineheight; - p.x = 0; - continue; - } - if (c == 0x09) - { - // tab = 4*space - unsigned cw = getCharWidth(0x20); - p.x += cw * 4; - continue; - } - glyphlize(c); - p.x += glyph->width + spacing; - i += 4; - } - getTextBox(text, &page->size.w, &page->size.h, lineheight, spacing); - return page; - } - - Page* TTF::typeset(const Text& text, int lineheight, int spacing) - { - return typeset(*text, lineheight, spacing); - } - - void TTF::render(const Page* page, int x, int y) - { - Shader* shader = Shader::getCurrentShader(); - const vector<GlyphArrayDrawInfo>& glyphinfolist = page->glyphinfolist; - const vector<GlyphVertex>& glyphvertices = page->glyphvertices; - Matrix modelMatrix = gl.getModelViewMatrix(x, y, 1, 1, 0, 0, 0); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - for (int i = 0; i < glyphinfolist.size(); ++i) - { - const GlyphArrayDrawInfo& info = glyphinfolist[i]; - shader->setVertexPointer(2, GL_INT, sizeof(GlyphVertex), &glyphvertices[info.start].x); - shader->setUVPointer(2, GL_FLOAT, sizeof(GlyphVertex), &glyphvertices[info.start].u); - gl.bindTexture(info.texture); - gl.drawArrays(GL_QUADS, 0, info.count); - gl.bindTexture(0); - } - } - - void TTF::render(const Text& text, int x, int y, int lineheight, int spacing /* = 0 */) - { - render(*text, x, y, lineheight, spacing); - } - - int TTF::getCharWidth(int c) - { - int adw, lsb; - ttf->pushTTFsize(mFontSize); - ttf->getHMetrics(c, &adw, &lsb); - ttf->popTTFsize(); - return adw; - } - - int TTF::getCharHeight(int c) - { - return descent; - } - - int TTF::getTextWidth(const Content& t, int spacing) - { - ttf->pushTTFsize(mFontSize); - int res = 0; - int tmp = 0; - for (Codepoint c : t) - { - if (c == 0x0D) - continue; - if (c == 0x0A) - { - tmp = 0; - continue; - } - tmp += getCharWidth(c) + spacing; - if (tmp > res) - res = tmp; - } - ttf->popTTFsize(); - return res; - } - - int TTF::getTextHeight(const Content& t, int lineheight) - { - ttf->pushTTFsize(mFontSize); - int res = 0; - bool newline = true; - for (Codepoint c : t) - { - if (c == 0x0A) - newline = true; - else if (c == 0x0D); - else if (newline) - { - newline = false; - res += lineheight; - } - } - ttf->popTTFsize(); - return res; - } - - void TTF::getTextBox(const Content& text, int* w, int* h, int lineheight, int spacing) - { - ttf->pushTTFsize(mFontSize); - *w = 0; - *h = 0; - int tmp = 0; - bool newline = true; - for (Codepoint c : text) - { - if (c == 0x0D) - continue; - if (c == 0x0A) - { - tmp = 0; - newline = true; - continue; - } - else if (newline) - { - newline = false; - *h += lineheight; - } - tmp += getCharWidth(c) + spacing; - if (tmp > *w) - *w = tmp; - } - ttf->popTTFsize(); - } - - TTF::TTFGlyph& TTF::bakeGlyph(unsigned int character) - { - int w, h, xoff, yoff; - ttf->pushTTFsize(mFontSize); - GLuint atlas = atlases.back(); - const Color* bitmap = ttf->getCodepointBitmap(character, &w, &h, &xoff, &yoff); - int adw, lsb; - { - /* bake glyph */ - ttf->getHMetrics(character, &adw, &lsb); - ttf->popTTFsize(); - if (cursor.x + adw > textureWidth) - { - cursor.x = 0; - cursor.y += descent; - if (cursor.y + descent * 2 > textureHeight) - { - /* create new atlas */ - atlas = createAtlas(); - cursor.y = 0; - } - } - gl.bindTexture(atlas); - gl.texSubImage(cursor.x + xoff, cursor.y + yoff + baseline, w, h, GL_RGBA, GL_UNSIGNED_BYTE, bitmap); - gl.bindTexture(); - delete[] bitmap; - } - TTFGlyph glyph; - glyph.atlas = atlas; - glyph.bbox.x = cursor.x / (float)textureWidth; - glyph.bbox.y = cursor.y / (float)textureHeight; - glyph.bbox.w = adw / (float)textureWidth; - glyph.bbox.h = descent / (float)textureHeight; - glyph.width = adw; - glyph.height = descent; - glyphs.insert(std::pair<unsigned int, TTFGlyph>(character, glyph)); - cursor.x += adw; - return glyphs[character]; - } - - TTF::TTFGlyph& TTF::findGlyph(unsigned int character) - { - map<unsigned int, TTFGlyph>::iterator it = glyphs.find(character); - if (it != glyphs.end()) - return it->second; - else - return bakeGlyph(character); - } - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/fonts/je_ttf.h b/src/libjin/Graphics/fonts/je_ttf.h deleted file mode 100644 index 28260f6..0000000 --- a/src/libjin/Graphics/fonts/je_ttf.h +++ /dev/null @@ -1,292 +0,0 @@ -#ifndef __JE_TTF_H__ -#define __JE_TTF_H__ -#include "../../core/je_configuration.h" -#if defined(jin_graphics) - -#include <vector> -#include <map> - -#include "stb/stb_truetype.h" - -#include "../../math/je_quad.h" - -#include "../je_color.h" -#include "../je_graphic.h" - -#include "je_page.h" -#include "je_font.h" -#include "je_text.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Fonts - { - - class TTF; - - // - // TTFData - // |- TTF(14px) - // |- TTF(15px) - // . - // . - // . - // - class TTFData - { - public: - - /// - /// - /// - static TTFData* createTTFData(const unsigned char* data, unsigned int size); - - /// - /// - /// - ~TTFData(); - - /// - /// - /// - TTF* createTTF(unsigned ttfsize); - - /// - /// - /// - void pushTTFsize(unsigned ttfsize); - - /// - /// - /// - void popTTFsize(); - - /// - /// - /// - Channel* getCodepointBitmapAlpha(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const; - - /// - /// - /// - Color* getCodepointBitmap(unsigned int codepoint, int* width, int* height, int* xoff, int* yoff) const; - - /// - /// - /// - void getVMetrics(int* baseline, int* descent); - - /// - /// - /// - void getHMetrics(unsigned int codepoint, int* advanceWidth, int* leftSideBearing); - - private: - - /// - /// - /// - static const unsigned int FONT_SIZE = 12; - - /// - /// - /// - TTFData(const unsigned char* data, unsigned int size); - - /// - /// - /// - stbtt_fontinfo info; - - /// - /// - /// - struct - { - unsigned char* data; - unsigned int size; - } raw; - - /// - /// - /// - std::vector<float> scales; - - }; - - class TTF : public Font - { - public: - //static TTF* createTTF(TTFData* ttfData, unsigned ttfSzie); - - /// - /// - /// - Page* typeset(const Text& text, int lineheight, int spacing = 0) override; - - /// - /// - /// - Page* typeset(const Content& text, int lineheight, int spacing = 0) override; - - /// - /// - /// - void render(const Text& text, int x, int y, int lineheight, int spacing = 0) override; - - /// - /// - /// - void render(const Content& text, int x, int y, int lineheight, int spacing = 0) override; - - /// - /// - /// - void render(const Page* page, int x, int y) override; - - /// - /// - /// - ~TTF(); - - private: - - friend class TTFData; - - /// - /// - /// - struct TTFGlyph - { - GLuint atlas; - // normalized coordinates - struct Bbox - { - float x, y; - float w, h; - } bbox; - // glyph size in pixel - unsigned int width, height; - }; - - /// - /// - /// - static const int TEXTURE_SIZE_LEVELS_COUNT = 7; - - /// - /// - /// - static const int TEXTURE_SIZE_LEVEL_MAX = TEXTURE_SIZE_LEVELS_COUNT - 1; - - /// - /// - /// - static const int TEXTURE_WIDTHS[TEXTURE_SIZE_LEVELS_COUNT]; - - /// - /// - /// - static const int TEXTURE_HEIGHTS[TEXTURE_SIZE_LEVELS_COUNT]; - - /// - /// - /// - TTF(TTFData* ttf, Codepoint ttfSize); - - /// - /// - /// - void estimateSize(); - - /// - /// - /// - GLuint createAtlas(); - - /// - /// - /// - TTFGlyph& bakeGlyph(Codepoint character); - - /// - /// - /// - TTFGlyph& findGlyph(Codepoint character); - - /// - /// - /// - int getCharWidth(int c); - - /// - /// - /// - int getCharHeight(int c); - - /// - /// - /// - int getTextWidth(const Content& text, int spacing = 0); - - /// - /// - /// - int getTextHeight(const Content& text, int lineheight); - - /// - /// - /// - void getTextBox(const Content& text, int* w, int* h, int lineheight, int spacing = 0); - - /// - /// - /// - int textureWidth; - - /// - /// - /// - int textureHeight; - - /// - /// - /// - std::vector<GLuint> atlases; - - /// - /// - /// - std::map<Codepoint, TTFGlyph> glyphs; - - /// - /// - /// - TTFData* ttf; - - /// - /// - /// - int baseline; - - /// - /// - /// - int descent; - - /// - /// - /// - Math::Vector2<float> cursor; - - }; - - } // namespace Fonts - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics) - -#endif // __JE_FONT_H__ diff --git a/src/libjin/Graphics/je_bitmap.cpp b/src/libjin/Graphics/je_bitmap.cpp deleted file mode 100644 index cdab46d..0000000 --- a/src/libjin/Graphics/je_bitmap.cpp +++ /dev/null @@ -1,188 +0,0 @@ -#define STB_IMAGE_IMPLEMENTATION -#include "stb/stb_image.h" - -#include "../common/je_exception.h" -#include "../filesystem/je_asset_database.h" -#include "../math/je_math.h" - -#include "je_bitmap.h" - -using namespace JinEngine::Filesystem; -using namespace JinEngine::Math; - -namespace JinEngine -{ - namespace Graphics - { - - Bitmap* Bitmap::createBitmap(const char* path) - { - AssetDatabase* ad = AssetDatabase::get(); - Buffer buffer; - ad->read(path, buffer); - return createBitmap(&buffer, buffer.size()); - } - - Bitmap* Bitmap::createBitmap(const void* pixel, unsigned width, unsigned height) - { - Bitmap* bitmap = new Bitmap(width, height); - memcpy(bitmap->pixels, pixel, width*height * sizeof(Color)); - return bitmap; - } - - /*static*/ Bitmap* Bitmap::createBitmap(const void* imgData, size_t size) - { - if (imgData == nullptr) - return nullptr; - int w, h; - void* data = stbi_load_from_memory((unsigned char *)imgData, size, &w, &h, NULL, STBI_rgb_alpha); - if (data == nullptr) - { - throw Exception("Could not create bitmap from image data."); - return nullptr; - } - Bitmap* bitmap = new Bitmap(); - bitmap->pixels = (Color*)data; - bitmap->width = w; - bitmap->height = h; - return bitmap; - } - - /*static*/ Bitmap* Bitmap::createBitmap(int w, int h, Color color) - { - Bitmap* bitmap = new Bitmap(w, h); - if (color != Color::BLACK) - bitmap->setPixels(color); - return bitmap; - } - - /*static*/ Bitmap* Bitmap::createBitmap(int width, int height, std::function<Color(int, int, int, int)> drawer) - { - Bitmap* bitmap = new Bitmap(width, height); - for (int y = 0; y < height; ++y) - { - for (int x = 0; x < width; ++x) - { - Color c = drawer(width, height, x, y); - bitmap->setPixel(c, x, y); - } - } - return bitmap; - } - - /*static */ Bitmap* Bitmap::clone(const Bitmap* bitmap) - { - Bitmap* b = new Bitmap(); - int w = bitmap->getWidth(); - int h = bitmap->getHeight(); - b->resetPixels(bitmap->getPixels(), w, h); - return b; - } - - Bitmap::Bitmap() - : width(0) - , height(0) - , pixels(nullptr) - { - } - - Bitmap::Bitmap(unsigned w, unsigned h) - { - width = w; - height = h; - pixels = new Color[w*h]; - if (pixels == nullptr) - throw Exception("No enough memory."); - } - - Bitmap::~Bitmap() - { - stbi_image_free(pixels); - } - - void Bitmap::bind(Color* p, int w, int h) - { - if (pixels != nullptr) - delete[] pixels; - pixels = p; - width = w; - height = h; - } - - void Bitmap::resetPixels(const Color* p, int w, int h) - { - if (pixels != nullptr) - delete[] pixels; - pixels = new Color[w*h]; - if (pixels == nullptr) - throw Exception("Not enough memory."); - size_t s = w * h * sizeof(Color); - memcpy(pixels, p, s); - width = w; - height = h; - } - - void Bitmap::setPixel(const Color& c, int x, int y) - { - if (pixels == nullptr) - throw Exception("Bitmap don't have pixel space."); - if (without<int>(x, 0, width - 1) || without<int>(y, 0, height - 1)) - return; - if (x + y * width >= width * height) - throw Exception("Pixel <%d, %d> of bitmap is out of range.", x, y); - pixels[x + y * width] = c; - } - - void Bitmap::resetPixels(const Color& c, int w, int h) - { - if (pixels != nullptr) - delete[] pixels; - pixels = new Color[w*h]; - if (pixels == nullptr) - throw Exception("Not enough memory."); - width = w; - height = h; - for (int x = 0; x < w; ++x) - { - for (int y = 0; y < h; ++y) - { - pixels[x + y * w] = c; - } - } - } - - void Bitmap::setPixels(Color* p, int count) - { - if (count > width * height) - throw Exception("Pixels are out of range."); - size_t s = width * height * sizeof(Color); - memcpy(pixels, p, s); - } - - void Bitmap::setPixels(Color c) - { - for (int x = 0; x < width; ++x) - { - for (int y = 0; y < height; ++y) - { - pixels[x + y * width] = c; - } - } - } - - Color Bitmap::getPixel(int x, int y) - { - if (pixels == nullptr) - return Color::BLACK; - if (without<int>(x, 0, width - 1) || without<int>(y, 0, height - 1)) - return Color::BLACK; - return pixels[x + y * width]; - } - - const Color* Bitmap::getPixels() const - { - return pixels; - } - - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/je_bitmap.h b/src/libjin/Graphics/je_bitmap.h deleted file mode 100644 index 5ab11ca..0000000 --- a/src/libjin/Graphics/je_bitmap.h +++ /dev/null @@ -1,195 +0,0 @@ -#ifndef __JE_BITMAP_H__ -#define __JE_BITMAP_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include <functional> - -#include "GLee/GLee.h" - -#include "../common/je_types.h" -#include "../math/je_vector2.hpp" - -#include "je_color.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// A RGBA32 bitmap. - /// - /// A bitmap keeps pixels and can't draw directly onto screen. To render bitmap, a texture is required. A - /// texture is a renderable hard ware side structure which could be handled with GPU. For instance, opengl - /// create texture and store it in GPU memory for rendering them onto hdc. - /// - class Bitmap - { - public: - /// - /// Create bitmap from given file. - /// - /// @param path Path of image file. - /// @return Bitmap if create successful, otherwise retrun false. - /// - static Bitmap* createBitmap(const char* path); - - /// - /// Create bitmap by pixels data. - /// - /// @param pixels Pixels data. - /// @param width Width of bitmap. - /// @param height Height of bitmap. - /// @return Return bitmap pointer if created, otherwise return null. - /// - static Bitmap* createBitmap(const void* pixels, unsigned width, unsigned height); - - /// - /// Create bitmap from compressed image data. - /// - /// @param imgData Compressed image data. - /// @param size Size of image data. - /// @return Return bitmap pointer if created, otherwise return null. - /// - static Bitmap* createBitmap(const void* imgData, size_t size); - - /// - /// Create bitmap with specific color and size. - /// - /// @param width Width of bitmap. - /// @param height Height of bitmap. - /// @param color Color of bitmap, black by default. - /// @return Return bitmap pointer if created, otherwise return null. - /// - static Bitmap* createBitmap(int width, int height, Color color = Color::BLACK); - - /// - /// Create bitmap and set bitmap pixels with given drawer. - /// - static Bitmap* createBitmap(int width, int height, std::function<Color(int, int, int, int)> drawer); - - /// - /// Create bitmap with another one. - /// - /// @param bitmap Bitmap be cloned. - /// @return Return bitmap pointer if created, otherwise return null. - /// - static Bitmap* clone(const Bitmap* bitmap); - - /// - /// Destructor of bitmap - /// - virtual ~Bitmap(); - - /// - /// Directly bind pixels with given pixels data - /// - /// @param pixels Pixels to be binded. - /// @param width Width of bitmap - /// @param height Height of bitmap - /// - void bind(Color* pixels, int width, int height); - - /// - /// Reset pixel data with given pixels data. - /// - /// @param pixels Pixels to be set. - /// @param width Width of bitmap - /// @param height Height of bitmap - /// - void resetPixels(const Color* pixels, int width, int height); - - /// - /// Reset pixel data with given color. - /// - /// @param color Color to be set. - /// @param width Width of bitmap - /// @param height Height of bitmap - /// - void resetPixels(const Color& color, int width, int height); - - /// - /// Set pixel with given color. - /// - /// @param color Color to be set. - /// @param x X value of pixel. - /// @param y Y value of pixel. - /// - void setPixel(const Color& color, int x, int y); - - /// - /// Set pixels with given color. - /// - /// @param color Color to be set. - /// - void setPixels(Color color); - - /// - /// Set pixels with given color data. - /// - /// @param colors New pixels' colors. - /// @param count Number of pixels. - /// - void setPixels(Color* colors, int count); - - /// - /// Get pixel in given position. - /// - /// @param x X value of position. - /// @param y Y value of position. - /// - Color getPixel(int x, int y); - - /// - /// Get pixels. - /// @return Colors of the bitmap. - /// - const Color* getPixels() const; - - /// - /// Get bitmap width. - /// - /// @return Width of bitmap. - /// - inline int getWidth() const { return width; } - - /// - /// Get bitmap height. - /// - /// @return Height of bitmap. - /// - inline int getHeight() const { return height; } - - /// - /// Get bitmap size. - /// - /// @return Size of bitmap. - /// - inline Math::Vector2<int> getSize() const { return Math::Vector2<int>(width, height); } - - protected: - /// - /// Constructor of bitmap. - /// - Bitmap(); - - /// - /// Constructor of bitmap. - /// - /// @param width Width of bitmap. - /// @param height Height of bitmap. - /// - Bitmap(unsigned w, unsigned h); - - Color * pixels; - unsigned width, height; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_canvas.cpp b/src/libjin/Graphics/je_canvas.cpp deleted file mode 100644 index 8f216e6..0000000 --- a/src/libjin/Graphics/je_canvas.cpp +++ /dev/null @@ -1,101 +0,0 @@ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "../utils/je_macros.h" -#include "je_canvas.h" -#include "je_window.h" - -namespace JinEngine -{ - namespace Graphics - { - - const Canvas* Canvas::current = nullptr; - const Canvas* const Canvas::DEFAULT_CANVAS = new Canvas(0); - - Canvas* Canvas::createCanvas(int w, int h) - { - return new Canvas(w, h); - } - - Canvas::Canvas(GLuint n) - : fbo(n) - { - } - - Canvas::Canvas(int w, int h) - : Graphic(w, h) - { - GLint current_fbo; - glGetIntegerv(GL_DRAW_FRAMEBUFFER_BINDING, ¤t_fbo); - - // Generate a new render buffer object - fbo = gl.genFrameBuffer(); - gl.bindFrameBuffer(fbo); - - GLuint texture = getGLTexture(); - gl.bindTexture(texture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - gl.texImage(GL_RGBA8, w, h, GL_RGBA, GL_UNSIGNED_BYTE, NULL); - gl.bindTexture(0); - glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, texture, 0); - - GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER); - - // Unbind framebuffer - gl.bindFrameBuffer(current_fbo); - } - - Canvas::~Canvas() - { - } - - bool Canvas::isBinded(const Canvas* cvs) - { - return current == cvs; - } - - /** - * bind to canvas - */ - void Canvas::bind(Canvas* canvas) - { - if (isBinded(canvas)) return; - current = canvas; - gl.bindFrameBuffer(canvas->fbo); - int w = canvas->getWidth(); - int h = canvas->getHeight(); - // Set view port to canvas. - glViewport(0, 0, w, h); - gl.setProjectionMatrix(0, w, 0, h, -1, 1); - } - - /** - * bind to default screen render buffer. - * do some coordinates transform work - * https://blog.csdn.net/liji_digital/article/details/79370841 - * https://blog.csdn.net/lyx2007825/article/details/8792475 - */ - void Canvas::unbind() - { - if (isBinded(DEFAULT_CANVAS)) return; - current = DEFAULT_CANVAS; - /* get window size as viewport */ - Window* wnd = Window::get(); - int w = wnd->getW(); - int h = wnd->getH(); - - glBindFramebuffer(GL_FRAMEBUFFER, DEFAULT_CANVAS->fbo); - - /* set viewport on screen */ - glViewport(0, 0, w, h); - - gl.setProjectionMatrix(0, w, h, 0, -1, 1); - - } - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/je_canvas.h b/src/libjin/Graphics/je_canvas.h deleted file mode 100644 index 3964517..0000000 --- a/src/libjin/Graphics/je_canvas.h +++ /dev/null @@ -1,69 +0,0 @@ -#ifndef __JE_CANVAS_H__ -#define __JE_CANVAS_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "je_graphic.h" - -namespace JinEngine -{ - namespace Graphics - { - /// - /// Renderable canvas. - /// - /// A canvas is a rendering target. - /// - class Canvas - : public Graphic - { - public: - /// - /// - /// - static Canvas* createCanvas(int w, int h); - - /// - /// - /// - static void bind(Canvas*); - - /// - /// - /// - static void unbind(); - - /// - /// - /// - static bool isBinded(const Canvas*); - - /// - /// - /// - ~Canvas(); - - protected: - static const Canvas* const DEFAULT_CANVAS; - static const Canvas* current; - - /// - /// - /// - Canvas(int w, int h); - - /// - /// - /// - Canvas(GLuint n); - - GLuint fbo; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics) - -#endif // __JE_CANVAS_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_color.cpp b/src/libjin/Graphics/je_color.cpp deleted file mode 100644 index c939a1d..0000000 --- a/src/libjin/Graphics/je_color.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "je_color.h" - -namespace JinEngine -{ - namespace Graphics - { - - const Color Color::WHITE = Color(255, 255, 255); - const Color Color::BLACK = Color(0, 0, 0); - const Color Color::RED = Color(255, 0, 0); - const Color Color::GREEN = Color(0, 255, 0); - const Color Color::BLUE = Color(0, 0, 255); - const Color Color::MAGENTA = Color(255, 0, 255); - const Color Color::YELLOW = Color(255, 255, 0); - - const uint32 Color::RMASK = 0x000000ff; - const uint32 Color::GMASK = 0x0000ff00; - const uint32 Color::BMASK = 0x00ff0000; - const uint32 Color::AMASK = 0xff000000; - - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/je_color.h b/src/libjin/Graphics/je_color.h deleted file mode 100644 index 06b8f61..0000000 --- a/src/libjin/Graphics/je_color.h +++ /dev/null @@ -1,119 +0,0 @@ -/** -* Some color operating here. -*/ -#ifndef __JE_COLOR_H__ -#define __JE_COLOR_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "../math/je_math.h" - -#include "../common/je_types.h" -#include "../utils/je_endian.h" - -namespace JinEngine -{ - namespace Graphics - { - - typedef uint8 Channel; - - class Color - { - public: - // Built-in colors - static const Color WHITE; - static const Color BLACK; - static const Color RED; - static const Color GREEN; - static const Color BLUE; - static const Color MAGENTA; - static const Color YELLOW; - - static const uint32 RMASK; - static const uint32 GMASK; - static const uint32 BMASK; - static const uint32 AMASK; - - /// - /// Get lerp color with given factor. - /// - /// @param start Start color. - /// @param end End color. - /// @param t Factor of interplation. - /// @return Color after interplation. - /// - static Color lerp(Color start, Color end, float t) - { - t = Math::clamp<float>(t, 0, 1); - Color c; - c.r = Math::lerp(start.r, end.r, t); - c.g = Math::lerp(start.g, end.g, t); - c.b = Math::lerp(start.b, end.b, t); - c.a = Math::lerp(start.a, end.a, t); - return c; - } - - /// - /// - /// - Color() { r = g = b = a = 0; }; - - /// - /// - /// - Color(unsigned char _r - , unsigned char _g - , unsigned char _b - , unsigned char _a = 255) - { - r = _r; - g = _g; - b = _b; - a = _a; - } - - Color(const Color& c) - { - r = c.r; - g = c.g; - b = c.b; - a = c.a; - } - - void set(unsigned char _r, unsigned char _g, unsigned char _b, unsigned char _a) - { - r = _r; - g = _g; - b = _b; - a = _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; - } - - bool operator != (const Color& c) - { - return !(r == c.r && g == c.g && b == c.b && a == c.a); - } - - Channel r, g, b, a; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // jin_graphics - -#endif // __JE_COLOR_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_gl.cpp b/src/libjin/Graphics/je_gl.cpp deleted file mode 100644 index c58f0ac..0000000 --- a/src/libjin/Graphics/je_gl.cpp +++ /dev/null @@ -1,116 +0,0 @@ -#define OGL2D_IMPLEMENT -#include "je_gl.h" -#include "je_color.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ - namespace Graphics - { - - OpenGL gl; - - OpenGL::OpenGL() - : ogl2d::OpenGL() - { - mModelViewMatrices.push_back(Matrix()); - mModelViewMatrix.setIdentity(); - for (Matrix& m : mModelViewMatrices) - mModelViewMatrix *= m; - } - - void OpenGL::setColor(Channel r, Channel g, Channel b, Channel a) - { - setColor(Color(r, g, b, a)); - } - - void OpenGL::setColor(Color c) - { - mCurrentColor = c; - glColor4f(c.r / 255.f, c.g / 255.f, c.b / 255.f, c.a / 255.f); - } - - Color OpenGL::getColor() - { - return mCurrentColor; - } - - void OpenGL::clearMatrix() - { - mModelViewMatrices.clear(); - mModelViewMatrices.push_back(Matrix()); - mModelViewMatrix.setIdentity(); - } - - void OpenGL::push() - { - mModelViewMatrices.push_back(Matrix()); - } - - void OpenGL::pop() - { - if (mModelViewMatrices.size() == 1) - return; - mModelViewMatrices.pop_back(); - mModelViewMatrix.setIdentity(); - for (Matrix& m : mModelViewMatrices) - mModelViewMatrix *= m; - } - - void OpenGL::translate(float x, float y) - { - if (mModelViewMatrices.size() == 1) - return; - Matrix& m = mModelViewMatrices.back(); - m.translate(x, y); - mModelViewMatrix.translate(x, y); - } - - void OpenGL::scale(float sx, float sy) - { - if (mModelViewMatrices.size() == 1) - return; - Matrix& m = mModelViewMatrices.back(); - m.scale(sx, sy); - mModelViewMatrix.scale(sx, sy); - } - - void OpenGL::rotate(float r) - { - if (mModelViewMatrices.size() == 1) - return; - Matrix& m = mModelViewMatrices.back(); - m.rotate(r); - mModelViewMatrix.rotate(r); - } - - Matrix OpenGL::getModelViewMatrix(float x, float y, float sx, float sy, float r, float ox, float oy) - { - Matrix m; - m.setTransformation(x, y, r, sx, sy, ox, oy); - return mModelViewMatrix*m; - } - - Math::Matrix OpenGL::getModelViewMatrix(const Math::Transform& tansform) - { - return mModelViewMatrix * tansform.getMatrix(); - } - - Matrix OpenGL::getModelViewMatrix() - { - return mModelViewMatrix; - } - - const Matrix& OpenGL::getProjectionMatrix() - { - return mProjectionMatrix; - } - - void OpenGL::setProjectionMatrix(float l, float r, float b, float t, float n, float f) - { - mProjectionMatrix.setOrtho(l, r, b, t, n, f); - } - - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/je_gl.h b/src/libjin/Graphics/je_gl.h deleted file mode 100644 index 134cfee..0000000 --- a/src/libjin/Graphics/je_gl.h +++ /dev/null @@ -1,140 +0,0 @@ -#ifndef __JE_OPENGL_H__ -#define __JE_OPENGL_H__ - -#include <vector> - -#include "../math/je_matrix.h" -#include "../math/je_transform.h" - -#include "GLee/GLee.h" -#include "ogl/OpenGL.h" - -#include "je_color.h" - -namespace JinEngine -{ - namespace Graphics - { - - /*class Canvas; - class Shader; - class Font; -*/ - class OpenGL - : public ogl2d::OpenGL - { - public: - /// - /// - /// - OpenGL(); - - void setColor(Channel r, Channel g, Channel b, Channel a); - - void setColor(Color c); - - Color getColor(); - - void clearMatrix(); - - void push(); - - void translate(float x, float y); - - void scale(float sx, float sy); - - void rotate(float r); - - void pop(); - - /// - /// - /// - Math::Matrix getModelViewMatrix(const Math::Transform& tansform); - - /// - /// Get model view matrix. - /// - Math::Matrix getModelViewMatrix(float x, float y, float sx, float sy, float r, float ox, float oy); - - /// - /// Get model view matrix. - /// - Math::Matrix getModelViewMatrix(); - - /// - /// Set orthogonal matrix. - /// - void setProjectionMatrix(float l, float r, float b, float t, float n, float f); - - /// - /// Get orthogonal matrix. - /// - const Math::Matrix& getProjectionMatrix(); - - /// - /// - /// - void useShader(); - - /// - /// - /// - void useFont(); - - /// - /// - /// - void useCanvas(); - - /// - /// - /// - void unUseShader(); - - private: - - /// - /// - /// - std::vector<Math::Matrix> mModelViewMatrices; - - /// - /// - /// - Math::Matrix mModelViewMatrix; - - /// - /// - /// - Math::Matrix mProjectionMatrix; - - /// - /// - /// - Color mCurrentColor; -/* - /// - /// - /// - Canvas* mCurrentCanvas; - - /// - /// - /// - Shader* mCurrentShader; - - /// - /// - /// - Font* mCurrentFont; -*/ - }; - - // Singleton. - extern OpenGL gl; - - } // namespace Graphics -} // namespace JinEngine - -#endif // __JE_OPENGL_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_graphic.cpp b/src/libjin/Graphics/je_graphic.cpp deleted file mode 100644 index 552eac6..0000000 --- a/src/libjin/Graphics/je_graphic.cpp +++ /dev/null @@ -1,135 +0,0 @@ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include <stdlib.h> - -#include "../math/je_matrix.h" -#include "../math/je_vector2.hpp" - -#include "shaders/je_shader.h" -#include "je_graphic.h" - -using namespace JinEngine::Math; -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - - Graphic::Graphic(int w, int h) - : mTexture(0) - , mSize(w, h) - { - mTexture = gl.genTexture(); - } - - Graphic::Graphic(const Bitmap* bitmap) - : mTexture(0) - { - mSize.w = bitmap->getWidth(); - mSize.h = bitmap->getHeight(); - - const Color* pixels = bitmap->getPixels(); - - mTexture = gl.genTexture(); - gl.bindTexture(mTexture); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); - glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); - gl.texImage(GL_RGBA8, mSize.w, mSize.h, GL_RGBA, GL_UNSIGNED_BYTE, pixels); - gl.bindTexture(0); - } - - Graphic::~Graphic() - { - glDeleteTextures(1, &mTexture); - } - - void Graphic::render(int x, int y, float sx, float sy, float r, float ox, float oy) const - { - Math::Matrix modelMatrix = gl.getModelViewMatrix(x, y, sx, sy, r, ox, oy); - int w = getWidth(), h = getHeight(); - static float vertexCoords[8]; - static float textureCoords[8]; - // Set vertex coordinates. - vertexCoords[0] = 0; vertexCoords[1] = 0; - vertexCoords[2] = 0; vertexCoords[3] = h; - vertexCoords[4] = w; vertexCoords[5] = h; - vertexCoords[6] = w; vertexCoords[7] = 0; - // Set texture coordinates. - textureCoords[0] = 0; textureCoords[1] = 0; - textureCoords[2] = 0; textureCoords[3] = 1; - textureCoords[4] = 1; textureCoords[5] = 1; - textureCoords[6] = 1; textureCoords[7] = 0; - // Set shader. - Shader* shader = Shader::getCurrentShader(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - shader->setVertexPointer(2, GL_FLOAT, 0, vertexCoords); - shader->setUVPointer(2, GL_FLOAT, 0, textureCoords); - - gl.bindTexture(getGLTexture()); - gl.drawArrays(GL_QUADS, 0, 4); - gl.bindTexture(0); - } - - void Graphic::render(const Math::Quad& slice, int x, int y, float sx, float sy, float r, float ax, float ay) const - { - static float vertexCoords[8]; - static float textureCoords[8]; - - // Set vertex coordinates. - vertexCoords[0] = 0; vertexCoords[1] = 0; - vertexCoords[2] = 0; vertexCoords[3] = slice.h; - vertexCoords[4] = slice.w; vertexCoords[5] = slice.h; - vertexCoords[6] = slice.w; vertexCoords[7] = 0; - // Set texture coordinates. - float slx = slice.x / mSize.w; - float sly = slice.y / mSize.h; - float slw = slice.w / mSize.w; - float slh = slice.h / mSize.h; - textureCoords[0] = slx; textureCoords[1] = sly; - textureCoords[2] = slx; textureCoords[3] = sly + slh; - textureCoords[4] = slx + slw; textureCoords[5] = sly + slh; - textureCoords[6] = slx + slw; textureCoords[7] = sly; - - Math::Matrix modelMatrix = gl.getModelViewMatrix(x, y, sx, sy, r, ax, ay); - - Shader* shader = Shader::getCurrentShader(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - shader->setVertexPointer(2, GL_FLOAT, 0, vertexCoords); - shader->setUVPointer(2, GL_FLOAT, 0, textureCoords); - - gl.bindTexture(getGLTexture()); - gl.drawArrays(GL_QUADS, 0, 4); - gl.bindTexture(0); - } - - void Graphic::render(const Math::Transform& transform) const - { - Vector2<float> position = transform.getPosition(); - Vector2<float> origin = transform.getOrigin(); - Vector2<float> scale = transform.getScale(); - float angle = transform.getRotation(); - render(position.x, position.y, scale.x, scale.y, angle, origin.x, origin.y); - } - - void Graphic::render(const Math::Quad& slice, const Math::Transform& transform) const - { - Vector2<float> position = transform.getPosition(); - Vector2<float> origin = transform.getOrigin(); - Vector2<float> scale = transform.getScale(); - float angle = transform.getRotation(); - render(slice, position.x, position.y, scale.x, scale.y, angle, origin.x, origin.y); - } - - //void Graphic::setFilter(GLint min, GLint max) - //{ - // glTexParameteri(GL_) - //} - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/je_graphic.h b/src/libjin/Graphics/je_graphic.h deleted file mode 100644 index 51c8e3d..0000000 --- a/src/libjin/Graphics/je_graphic.h +++ /dev/null @@ -1,94 +0,0 @@ -#ifndef __JE_GRAPHIC_H__ -#define __JE_GRAPHIC_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "../math/je_quad.h" -#include "../math/je_vector2.hpp" -#include "../math/je_transform.h" - -#include "je_gl.h" -#include "je_bitmap.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// Class inherites Graphic doesn't keep any state such as origin, scale and other properties. - /// - class Graphic - { - public: - /// - /// - /// - Graphic(int w = 0, int h = 0); - - /// - /// - /// - Graphic(const Bitmap* bitmap); - - /// - /// - /// - virtual ~Graphic(); - - /// - /// - /// - inline int getWidth() const { return mSize.w; } - - /// - /// - /// - inline int getHeight() const { return mSize.h; } - - /// - /// Get opengl texture token. - /// - /// @return OpenGL texture token. - /// - inline GLuint getGLTexture() const { return mTexture; } - - /// - /// - /// - void setFilter(GLint min, GLint max); - - /// - /// Render graphic single with given coordinates. - /// - void render(int x, int y, float sx = 1, float sy = 1, float r = 0, float ox = 0, float oy = 0) const; - - /// - /// Render part of graphic single with given coordinates. - /// - void render(const Math::Quad& slice, int x, int y, float sx = 1, float sy = 1, float r = 0, float ox = 0, float oy = 0) const; - - /// - /// Render with transform. - /// - void render(const Math::Transform& transform) const; - - /// - /// - /// - void render(const Math::Quad& slice, const Math::Transform& transform) const; - - protected: - Math::Vector2<uint> mSize; - - private: - GLuint mTexture; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics) - -#endif // __JE_GRAPHIC_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_graphics.h b/src/libjin/Graphics/je_graphics.h deleted file mode 100644 index 979d8f4..0000000 --- a/src/libjin/Graphics/je_graphics.h +++ /dev/null @@ -1,37 +0,0 @@ -#ifndef __JE_GRAPHICS_H__ -#define __JE_GRAPHICS_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "je_canvas.h" -#include "je_color.h" -#include "je_shapes.h" -#include "je_texture.h" -#include "je_window.h" -#include "je_bitmap.h" -#include "je_image.h" -#include "je_sprite.h" -#include "je_sprite_sheet.h" - -#include "shaders/je_shader.h" - -#include "fonts/je_ttf.h" -#include "fonts/je_text.h" -#include "fonts/je_texture_font.h" - -#include "particles/je_particle_system.h" - -//struct Stats -//{ -// int drawCalls; -// int drawCallsBatched; -// int canvasSwitches; -// int shaderSwitches; -// int canvases; -// int images; -// int fonts; -// int64 textureMemory; -//}; - -#endif // defined(jin_graphics) -#endif // __JE_GRAPHICS_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_image.cpp b/src/libjin/Graphics/je_image.cpp deleted file mode 100644 index 6baf16d..0000000 --- a/src/libjin/Graphics/je_image.cpp +++ /dev/null @@ -1,47 +0,0 @@ -#include "../filesystem/je_asset_database.h" - -#include "stb/stb_image.h" - -#include "je_image.h" - -namespace JinEngine -{ - namespace Graphics - { - - using namespace Filesystem; - - /*static*/ Image* Image::createImage(const void* imgData, size_t size) - { - if (imgData == nullptr) - return nullptr; - int w, h; - void* data = stbi_load_from_memory((uint8*)imgData, size, &w, &h, NULL, STBI_rgb_alpha); - if (data == nullptr) - return nullptr; - Image* image = new Image(); - image->pixels = (Color*)data; - image->width = w; - image->height = h; - return image; - } - - Image* Image::createImage(const char* path) - { - AssetDatabase* fs = AssetDatabase::get(); - Buffer buffer; - fs->read(path, buffer); - return createImage(&buffer, buffer.size()); - } - - Image::Image() - : Bitmap() - { - } - - Image::~Image() - { - } - - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/je_image.h b/src/libjin/Graphics/je_image.h deleted file mode 100644 index 971ac18..0000000 --- a/src/libjin/Graphics/je_image.h +++ /dev/null @@ -1,61 +0,0 @@ -#ifndef __JE_IMAGE_H__ -#define __JE_IMAGE_H__ - -#include "je_bitmap.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// A readonly bitmap. - /// - /// Just like bitmap but only from image file. The pixels data is readonly. - /// - class Image - : public Bitmap - { - public: - /// - /// Create image from image file. - /// - /// @param path Image path. - /// @return Image if created successfully, otherwise return null. - /// - static Image* createImage(const char* path); - - /// - /// Create image from image data. - /// - /// @param imgData Image data to create image. - /// @param size Size of image data. - /// @return Image if created successfully, otherwise return null. - /// - static Image* createImage(const void* imgData, size_t size); - - /// - /// Image destructor. - /// - ~Image(); - - private: - /// - /// Image constructor. - /// - Image(); - - // Disable setters inherited from Bitmap. - void bind(Color* pixels, int w, int h); - void resetPixels(const Color* pixels, int w, int h); - void resetPixels(const Color& pixels, int w, int h); - void setPixel(const Color& pixel, int x, int y); - void setPixels(Color pixels); - void setPixels(Color* pixels); - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_mesh.cpp b/src/libjin/Graphics/je_mesh.cpp deleted file mode 100644 index dd2d61c..0000000 --- a/src/libjin/Graphics/je_mesh.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "je_mesh.h" - -namespace JinEngine -{ - namespace Graphics - { - - - - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/je_mesh.h b/src/libjin/Graphics/je_mesh.h deleted file mode 100644 index e0a38f8..0000000 --- a/src/libjin/Graphics/je_mesh.h +++ /dev/null @@ -1,28 +0,0 @@ -#ifndef __JE_MESH_H__ -#define __JE_MESH_H__ - -#include "je_graphic.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// A 2D mesh. - /// - class Mesh - { - public: - void setGraphic(); - - - private: - const Graphic* mGraphic; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_shapes.cpp b/src/libjin/Graphics/je_shapes.cpp deleted file mode 100644 index 0b239e7..0000000 --- a/src/libjin/Graphics/je_shapes.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include <string> - -#include "../math/je_matrix.h" -#include "../math/je_constant.h" - -#include "shaders/je_shader.h" -#include "je_shapes.h" - -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - - using namespace Math; - - void point(int x, int y) - { - float verts[] = { x + 0.5f , y + 0.5f }; - - Shader* shader = Shader::getCurrentShader(); - shader->setVertexPointer(2, GL_FLOAT, 0, verts); - Matrix modelMatrix = gl.getModelViewMatrix(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - - glDrawArrays(GL_POINTS, 0, 1); - } - - void points(int n, GLshort* p) - { - Shader* shader = Shader::getCurrentShader(); - shader->setVertexPointer(2, GL_SHORT, 0, p); - Matrix modelMatrix = gl.getModelViewMatrix(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - - glDrawArrays(GL_POINTS, 0, n); - } - - void line(int x1, int y1, int x2, int y2) - { - float verts[] = { - x1 + 0.5f, y1 + 0.5f, - x2 + 0.5f, y2 + 0.5f - }; - - Shader* shader = Shader::getCurrentShader(); - shader->setVertexPointer(2, GL_FLOAT, 0, verts); - Matrix modelMatrix = gl.getModelViewMatrix(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - - glDrawArrays(GL_LINES, 0, 2); - } - - void circle(RenderMode mode, int x, int y, int r) - { - r = r < 0 ? 0 : r; - - int points = 40; - float two_pi = static_cast<float>(PI * 2); - if (points <= 0) points = 1; - float angle_shift = (two_pi / points); - float phi = .0f; - - float *coords = new float[2 * (points + 1)]; - for (int i = 0; i < points; ++i, phi += angle_shift) - { - coords[2 * i] = x + r * cos(phi); - coords[2 * i + 1] = y + r * sin(phi); - } - - coords[2 * points] = coords[0]; - coords[2 * points + 1] = coords[1]; - - polygon(mode, coords, points); - - delete[] coords; - } - - void rect(RenderMode mode, int x, int y, int w, int h) - { - float coords[] = { x + 0.5f, y + 0.5f, x + w + 0.5f, y + 0.5f, x + w + 0.5f, y + h + 0.5f, x + 0.5f, y + h + 0.5f }; - polygon(mode, coords, 4); - } - - void triangle(RenderMode mode, int x1, int y1, int x2, int y2, int x3, int y3) - { - float coords[] = { x1 + 0.5f, y1 + 0.5f, x2 + 0.5f, y2 + 0.5f, x3 + 0.5f, y3 + 0.5f }; - polygon(mode, coords, 3); - } - - void polygon_line(float* p, int count) - { - Shader* shader = Shader::getCurrentShader(); - Matrix modelMatrix = gl.getModelViewMatrix(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - shader->setVertexPointer(2, GL_FLOAT, 0, p); - - glDrawArrays(GL_LINE_LOOP, 0, count); - } - - void polygon(RenderMode mode, float* p, int count) - { - if (mode == LINE) - { - polygon_line(p, count); - } - else if (mode == FILL) - { - Shader* shader = Shader::getCurrentShader(); - Matrix modelMatrix = gl.getModelViewMatrix(); - shader->sendMatrix4(SHADER_MODELVIEW_MATRIX, &modelMatrix); - shader->sendMatrix4(SHADER_PROJECTION_MATRIX, &gl.getProjectionMatrix()); - shader->setVertexPointer(2, GL_FLOAT, 0, p); - - glDrawArrays(GL_POLYGON, 0, count); - } - } - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/je_shapes.h b/src/libjin/Graphics/je_shapes.h deleted file mode 100644 index d62592b..0000000 --- a/src/libjin/Graphics/je_shapes.h +++ /dev/null @@ -1,34 +0,0 @@ -#ifndef __JE_GEOMETRY_H__ -#define __JE_GEOMETRY_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "je_color.h" -#include "je_canvas.h" -#include "je_texture.h" - -namespace JinEngine -{ - namespace Graphics - { - - enum RenderMode { - NONE = 0, - FILL , - LINE - }; - - extern void line(int x1, int y1, int x2, int y2); - extern void rect(RenderMode mode, int x, int y, int w, int h); - extern void triangle(RenderMode mode, int x1, int y1, int x2, int y2, int x3, int y3); - extern void circle(RenderMode mode, int x, int y, int r); - extern void point(int x, int y); - extern void points(int n, GLshort* p, GLubyte* c); - extern void polygon(RenderMode mode, float* p, int count); - - } // namespace Graphics -} // namespace JinEngine - -#endif // jin_graphics - -#endif // __JE_GEOMETRY_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite.cpp b/src/libjin/Graphics/je_sprite.cpp deleted file mode 100644 index b92a2c2..0000000 --- a/src/libjin/Graphics/je_sprite.cpp +++ /dev/null @@ -1,133 +0,0 @@ -#include "shaders/je_shader.h" - -#include "je_sprite.h" - -using namespace JinEngine::Math; -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - - Sprite::Sprite() - : mGraphic(nullptr) - , mColor(255, 255, 255, 255) - , mIsOriginEnum(false) - { - } - - Sprite::~Sprite() - { - } - - void Sprite::setQuad(int x, int y, int w, int h) - { - mQuad.x = x; - mQuad.y = y; - mQuad.w = w; - mQuad.h = h; - if (mIsOriginEnum) - setOrigin(mOriginEnum); - } - - void Sprite::setRotation(float r) - { - mTransform.setRotation(r); - } - - void Sprite::setOrigin(Origin origin) - { - mIsOriginEnum = true; - mOriginEnum = origin; - int l = 0, r = 0, t = 0, b = 0; - Vector2<int> size = getSize(); - r = size.w; - b = size.h; - switch (origin) - { - case TopLeft: - mTransform.setOrigin(1, t); - break; - case TopCenter: - mTransform.setOrigin(r / 2.f, t); - break; - case TopRight: - mTransform.setOrigin(r, t); - break; - case MiddleLeft: - mTransform.setOrigin(1, b / 2.f); - break; - case MiddleCenter: - mTransform.setOrigin(r / 2.f, b / 2.f); - break; - case MiddleRight: - mTransform.setOrigin(r, b / 2.f); - break; - case BottomLeft: - mTransform.setOrigin(l, b); - break; - case BottomCenter: - mTransform.setOrigin(r / 2.f, b); - break; - case BottomRight: - mTransform.setOrigin(r, b); - break; - } - } - - void Sprite::setOrigin(int x, int y) - { - mTransform.setOrigin(x, y); - mIsOriginEnum = false; - } - - void Sprite::setPosition(float x, float y) - { - mTransform.setPosition(x, y); - } - - void Sprite::setScale(float x, float y) - { - mTransform.setScale(x, y); - } - - void Sprite::setColor(Color color) - { - mColor = color; - } - - void Sprite::setGraphic(const Graphic* graphic) - { - mGraphic = graphic; - int w = mGraphic->getWidth(); - int h = mGraphic->getHeight(); - setQuad(0, 0, w, h); - } - - void Sprite::move(float x, float y) - { - mTransform.move(x, y); - } - - void Sprite::rotate(float r) - { - mTransform.rotate(r); - } - - void Sprite::scale(float sx, float sy) - { - mTransform.scale(sx, sy); - } - - void Sprite::render() - { - Color c = gl.getColor(); - gl.setColor(mColor); - if (mGraphic != nullptr) - mGraphic->render(mQuad, mTransform); - gl.setColor(c); - } - - } // namespace Graphics -} // namespace JinEngine
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite.h b/src/libjin/Graphics/je_sprite.h deleted file mode 100644 index faf16df..0000000 --- a/src/libjin/Graphics/je_sprite.h +++ /dev/null @@ -1,81 +0,0 @@ -#ifndef __JE_SPRITE_H__ -#define __JE_SPRITE_H__ - -#include "../common/je_types.h" -#include "../math/je_vector2.hpp" - -#include "shaders/je_shader.h" -#include "je_color.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// A sprite is unit of rendering. Animation is based on sprite, but not texture or other graphic stuff. - /// - class Sprite - { - public: - Sprite(); - virtual ~Sprite(); - - enum Origin - { - TopLeft, - TopCenter, - TopRight, - MiddleLeft, - MiddleCenter, - MiddleRight, - BottomLeft, - BottomCenter, - BottomRight - }; - - void setQuad(int x, int y, int w, int h); - void setRotation(float r); - void setOrigin(Origin origin); - void setOrigin(int x, int y); - void setPosition(float x, float y); - void setScale(float sx, float sy); - void setColor(Color color); - void setGraphic(const Graphic* graphic); - - void move(float x, float y); - void rotate(float r); - void scale(float sx, float sy); - - float getRotation() { return mTransform.getRotation(); } - Math::Vector2<int> getSize() { return Math::Vector2<int>(mQuad.w, mQuad.h); } - const Math::Quad& getQuad() { return mQuad; } - const Math::Vector2<float>& getPosition() { return mTransform.getPosition(); } - const Math::Vector2<float>& getOrigin() { return mTransform.getOrigin(); } - const Math::Vector2<float>& getScale() { return mTransform.getScale(); } - const Color& getColor() { return mColor; } - const Graphic* getGraphic() { return mGraphic; } - - void render(); - - private: - /// - /// Origin must be 0~1 float value. - /// - Math::Transform mTransform; - - Color mColor; - - Math::Quad mQuad; - - bool mIsOriginEnum; - Origin mOriginEnum; - - const Graphic* mGraphic; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite_batch.cpp b/src/libjin/Graphics/je_sprite_batch.cpp deleted file mode 100644 index f339715..0000000 --- a/src/libjin/Graphics/je_sprite_batch.cpp +++ /dev/null @@ -1,11 +0,0 @@ -#include "je_sprite_batch.h" - -namespace JinEngine -{ - namespace Graphics - { - - - - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite_batch.h b/src/libjin/Graphics/je_sprite_batch.h deleted file mode 100644 index 64f9805..0000000 --- a/src/libjin/Graphics/je_sprite_batch.h +++ /dev/null @@ -1,20 +0,0 @@ -#ifndef __JE_GRAPHICS_SPRITE_BATCH_H__ -#define __JE_GRAPHICS_SPRITE_BATCH_H__ - -namespace JinEngine -{ - namespace Graphics - { - - class SpriteBatch - { - public: - - private: - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite_sheet.cpp b/src/libjin/Graphics/je_sprite_sheet.cpp deleted file mode 100644 index 3a08751..0000000 --- a/src/libjin/Graphics/je_sprite_sheet.cpp +++ /dev/null @@ -1,22 +0,0 @@ -#include "je_sprite_sheet.h" - -namespace JinEngine -{ - namespace Graphics - { - - SpriteSheet::SpriteSheet(const Graphic* graphic) - : mGraphic(graphic) - { - } - - Sprite* SpriteSheet::createSprite(const Math::Quad& quad) - { - Sprite* spr = new Sprite(); - spr->setGraphic(mGraphic); - spr->setQuad(quad.x, quad.y, quad.w, quad.h); - return spr; - } - - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/je_sprite_sheet.h b/src/libjin/Graphics/je_sprite_sheet.h deleted file mode 100644 index 8c56c51..0000000 --- a/src/libjin/Graphics/je_sprite_sheet.h +++ /dev/null @@ -1,33 +0,0 @@ -#ifndef __JE_SPRITE_SHEET_H__ -#define __JE_SPRITE_SHEET_H__ - -#include <vector> - -#include "../math/je_quad.h" - -#include "je_sprite.h" - -namespace JinEngine -{ - namespace Graphics - { - - class SpriteSheet - { - public: - /// - /// Create a new sprite in sheet. - /// - Sprite* createSprite(const Math::Quad& quad); - - SpriteSheet(const Graphic* graphic); - - private: - const Graphic* const mGraphic; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/je_texture.cpp b/src/libjin/Graphics/je_texture.cpp deleted file mode 100644 index 8aa3f9a..0000000 --- a/src/libjin/Graphics/je_texture.cpp +++ /dev/null @@ -1,44 +0,0 @@ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include <fstream> - -#include "../utils/je_utils.h" -#include "../math/je_math.h" - -#include "je_texture.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ - namespace Graphics - { - - Texture* Texture::createTexture(const char* path) - { - Bitmap* bitmap = Bitmap::createBitmap(path); - Texture* texture = createTexture(bitmap); - delete bitmap; - return texture; - } - - /*static*/ Texture* Texture::createTexture(Bitmap* bitmap) - { - Texture* tex = new Texture(bitmap); - return tex; - } - - Texture::Texture(const Bitmap* bitmap) - : Graphic(bitmap) - { - } - - Texture::~Texture() - { - } - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/je_texture.h b/src/libjin/Graphics/je_texture.h deleted file mode 100644 index 566ba84..0000000 --- a/src/libjin/Graphics/je_texture.h +++ /dev/null @@ -1,57 +0,0 @@ -#ifndef __JE_TEXTURE_H__ -#define __JE_TEXTURE_H__ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "GLee/GLee.h" - -#include "je_color.h" -#include "je_graphic.h" -#include "je_bitmap.h" - -namespace JinEngine -{ - namespace Graphics - { - - /// - /// - /// - class Texture - : public Graphic - { - public: - /// - /// - /// - static Texture* createTexture(const char* path); - - /// - /// - /// - static Texture* createTexture(Bitmap* bitmap); - - /// - /// - /// - static Texture* createTexture(); - - /// - /// - /// - ~Texture(); - - private: - /// - /// - /// - Texture(const Bitmap* bitmap); - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // jin_graphics - -#endif // __JE_TEXTURE_H__
\ No newline at end of file diff --git a/src/libjin/Graphics/je_window.cpp b/src/libjin/Graphics/je_window.cpp deleted file mode 100644 index c14d290..0000000 --- a/src/libjin/Graphics/je_window.cpp +++ /dev/null @@ -1,130 +0,0 @@ -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include <iostream> - -#include "../common/je_exception.h" -#include "../utils/je_utils.h" -#include "../audio/sdl/je_sdl_audio.h" -#include "../utils/je_log.h" - -#include "shaders/je_shader.h" -#include "je_window.h" -#include "je_gl.h" -#include "je_canvas.h" - -using namespace JinEngine::Graphics::Shaders; - -namespace JinEngine -{ - namespace Graphics - { - - bool Window::initSystem(const SettingBase* s) - { - jin_log_info("Initialize window system."); - - if (SDL_Init(SDL_INIT_VIDEO) < 0) - return false; - - const Setting* setting = (Setting*)s; - mSize.w = setting->width; - mSize.h = setting->height; - mFps = setting->fps; - bool vsync = setting->vsync; - const char* title = setting->title; - const char* icon = setting->icon; - - if (mWnd) - { - SDL_DestroyWindow(mWnd); - SDL_FlushEvent(SDL_WINDOWEVENT); - } - - SDL_GLContext ctx = NULL; - - if (ctx) - { - SDL_GL_DeleteContext(ctx); - } - - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1); - SDL_GL_SetAttribute(SDL_GL_RED_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_GREEN_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_BLUE_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_ALPHA_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_STENCIL_SIZE, 8); - SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1); - - int wx = SDL_WINDOWPOS_UNDEFINED, - wy = SDL_WINDOWPOS_UNDEFINED; - - int flag = SDL_WINDOW_HIDDEN | SDL_WINDOW_OPENGL; - if (setting->fullscreen) flag |= SDL_WINDOW_FULLSCREEN; - if (setting->resizable) flag |= SDL_WINDOW_RESIZABLE; - - mWnd = SDL_CreateWindow(title, wx, wy, mSize.w, mSize.h, flag); - if (mWnd == NULL) - return false; - - // Set window icon - try - { - Bitmap* bitmap = Bitmap::createBitmap(icon); - SDL_Surface *surface; - Color* pixels = const_cast<Color*>(bitmap->getPixels()); - uint w = bitmap->getWidth(), h = bitmap->getHeight(); - surface = SDL_CreateRGBSurfaceFrom( - pixels, w, h, 32, w * 4, Color::RMASK, Color::GMASK, Color::BMASK, Color::AMASK); - SDL_SetWindowIcon(mWnd, surface); - SDL_FreeSurface(surface); - } catch (...) {} - - ctx = SDL_GL_CreateContext(mWnd); - if (ctx == NULL) - return false; - SDL_GL_SetSwapInterval(vsync ? 1 : 0); - SDL_GL_MakeCurrent(mWnd, ctx); - // Default configuration - gl.setClearColor(0, 0, 0, 0xff); - glClear(GL_COLOR_BUFFER_BIT); - gl.pushColor(0xff, 0xff, 0xff, 0xff); - gl.enable(GL_BLEND); - gl.enable(GL_TEXTURE_2D); - gl.setBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); - // Bind to default canvas - Canvas::unbind(); - Shader::unuse(); - // Avoid white blinnk. - swapBuffers(); - - return true; - } - - void Window::quitSystem() - { - jin_log_info("Quit window system."); - // disable opengl - gl.disable(GL_BLEND); - gl.disable(GL_TEXTURE_2D); - // close window - SDL_DestroyWindow(mWnd); - SDL_Quit(); - } - - void Window::swapBuffers() - { - if (mWnd) - SDL_GL_SwapWindow(mWnd); - } - - void Window::setTitle(const char* title) - { - SDL_SetWindowTitle(mWnd, title); - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // defined(jin_graphics)
\ No newline at end of file diff --git a/src/libjin/Graphics/je_window.h b/src/libjin/Graphics/je_window.h deleted file mode 100644 index 831f3e6..0000000 --- a/src/libjin/Graphics/je_window.h +++ /dev/null @@ -1,109 +0,0 @@ -#ifndef __JE_RENDER_WINDOW -#define __JE_RENDER_WINDOW -#include "../core/je_configuration.h" -#if defined(jin_graphics) - -#include "SDL2/SDL.h" - -#include "../utils/je_utils.h" -#include "../math/je_vector2.hpp" -#include "../common/je_subsystem.hpp" - -namespace JinEngine -{ - namespace Graphics - { - /// - /// - /// - class Window - : public Subsystem<Window> - { - public: - /// - /// - /// - struct Setting : SettingBase - { - public: - const char* title; ///< window title - const char* icon; ///< window icon - bool fullscreen; ///< full screen - int width, height; ///< window size - bool vsync; ///< vsync - int fps; ///< frame per second - bool resizable; ///< resizable - }; - - /// - /// - /// - void setTitle(const char* title); - - /// - /// - /// - inline int getW(){ return mSize.w; } - - /// - /// - /// - inline int getH(){ return mSize.h; } - - /// - /// - /// - inline int getFPS(){ return mFps; } - - /// - /// - /// - void swapBuffers(); - - /// - /// - /// - inline void hide() { SDL_HideWindow(mWnd); }; - - /// - /// - /// - void show() { SDL_ShowWindow(mWnd); }; - - private: - - // declare a singleton - singleton(Window); - - /// - /// - /// - Window() {}; - - /// - /// - /// - virtual ~Window() {}; - - /// - /// - /// - bool initSystem(const SettingBase* setting) override; - - /// - /// - /// - void quitSystem() override; - - SDL_Window* mWnd; - JinEngine::Math::Vector2<unsigned int> mSize; - int mFps; - - }; - - } // namespace Graphics -} // namespace JinEngine - -#endif // jin_graphics - -#endif // __JE_RENDER_WINDOW
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle.cpp b/src/libjin/Graphics/particles/je_particle.cpp deleted file mode 100644 index 53f4570..0000000 --- a/src/libjin/Graphics/particles/je_particle.cpp +++ /dev/null @@ -1,72 +0,0 @@ -#include "../../math/je_math.h" - -#include "je_particle.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - Particle::Particle(const Graphic* grc) - : graphic(grc) - { - reset(); - } - - void Particle::reset() - { - transform.set(0, 0, 1, 1, 0, 0, 0); - lifeTime = 1.0f; - life = 0.0f; - speed.set(0, 0); - linearAcceleration.set(0, 0); - radialAcceleration = 0.0f; - angularSpeed = 0; - scaleBegin = 1; - scaleEnd = 1; - color = Color::WHITE; - colorStart = Color::WHITE; - colorEnd = Color::WHITE; - alive = true; - } - - void Particle::update(float dt) - { - float t = life / lifeTime; - // Lerp color - color.r = lerp<int>(colorStart.r, colorEnd.r, t); - color.g = lerp<int>(colorStart.g, colorEnd.g, t); - color.b = lerp<int>(colorStart.b, colorEnd.b, t); - color.a = lerp<int>(colorStart.a, colorEnd.a, t); - // Lerp scale. - Vector2<float> scale = transform.getScale(); - scale.x = lerp<float>(scaleBegin, scaleEnd, t); - scale.y = scale.x; - transform.setScale(scale.x, scale.y); - // Calculate position. - speed += linearAcceleration * dt; - transform.move(speed * dt); - // Calculate rotation. - angularSpeed += radialAcceleration * dt; - transform.rotate(angularSpeed * dt); - // Update life time. - life += dt; - alive = life < lifeTime; - } - - void Particle::render() - { - Color c = gl.getColor(); - gl.setColor(color); - if (graphic != nullptr) - graphic->render(transform); - gl.getColor(); - } - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle.h b/src/libjin/Graphics/particles/je_particle.h deleted file mode 100644 index 6da05ac..0000000 --- a/src/libjin/Graphics/particles/je_particle.h +++ /dev/null @@ -1,166 +0,0 @@ -#ifndef __JE_PARTICLE_H__ -#define __JE_PARTICLE_H__ - -#include "../../math/je_transform.h" -#include "../../math/je_vector2.hpp" -#include "../je_color.h" -#include "../je_graphic.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - class ParticleEmitter; - - /// - /// - /// - struct LifeTimeDef - { - bool enableRandom = false; - Struct(life, - struct - { - float floor, ceil; - } random; - float life = 1.0f; - ); - }; - - struct ScaleOverTimeDef - { - bool enable = false; - float start = 1; - float end = 1; - }; - - struct ColorOverTimeDef - { - bool enable = false; - Color colorStart = Color::WHITE; - Color colorEnd = Color::WHITE; - }; - - struct linearAccelarationDef - { - Math::Vector2<float> linearAccelaration; - }; - - struct RadialAccelarationDef - { - float radialAccelaration = 0.f; - }; - - struct AngularSpeedDef - { - bool enableRandom = false; - Struct(angularSpeed, - struct - { - float floor = 0; - float ceil = 0; - } random; - float angularSpeed = 0; - ); - }; - - /// - /// - /// - struct ParticleDef - { - private: - friend class ParticleEmitter; - - public: - // Basic definitions. - LifeTimeDef lifeTimeDef; ///< - linearAccelarationDef linearAccelarationDef; ///< - RadialAccelarationDef radialAccelarationDef; ///< - AngularSpeedDef angularSpeedDef; ///< - // Optional definitions. - ScaleOverTimeDef sizeOverTimeDef; ///< - ColorOverTimeDef colorOverTimeDef; ///< - }; - - /// - /// A single particle contains various properties of particle, such as position, accelaration, color - /// and other attributes changed over time. - /// - struct Particle - { - /// - /// Default constructor. - /// - Particle(const Graphic* graphic); - - /// - /// Reset to default. - /// - void reset(); - - /// - /// - /// - void update(float dt); - - /// - /// - /// - void render(); - - ////////////////////////////////////////////////////////////////////////////////////////////////// - - /// - /// Whole life time. - /// - float lifeTime = 1.0f; - - /// - /// Current life time. - /// - float life = 0.0f; - - const Graphic* graphic; - - /// - /// Color over lifetime. - /// - Color color = Color::WHITE; - Color colorStart = Color::WHITE; - Color colorEnd = Color::WHITE; - - /// - /// Position scale rotation origin. - /// - Math::Transform transform; - - /// - /// Speeds. - /// - Math::Vector2<float> speed; - Math::Vector2<float> linearAcceleration; - float angularSpeed; - float radialAcceleration = 0; - - /// - /// Size over lifetime. - /// - float scaleBegin = 1; - float scaleEnd = 1; - - /// - /// Is particle still alive? Alive is equivalent to NOT available in particle pool. - /// - bool alive = true; - - }; - - } // namespace Particles - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_emitter.cpp b/src/libjin/Graphics/particles/je_particle_emitter.cpp deleted file mode 100644 index d8fb78d..0000000 --- a/src/libjin/Graphics/particles/je_particle_emitter.cpp +++ /dev/null @@ -1,105 +0,0 @@ -#include <time.h> - -#include "../../math/je_random.h" - -#include "je_particle_emitter.h" -#include "je_particle_system.h" - -using namespace JinEngine::Math; - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - static const uint8 ACCURACY_4 = 4; - static const uint8 ACCURACY_5 = 5; - static const uint8 ACCURACY_6 = 6; - - // Particle emitter - static RandomGenerator rng(0xEA44944); - - ParticleEmitter::ParticleEmitter(ParticleSystem& ps) - : mPS(ps) - , mDef(ps.mDef.emitterDef) - , mPDef(ps.mDef.particleDef) - , mTime(0) - { - } - - void ParticleEmitter::update(float dt) - { - mTime += dt; - for (;mTime >= mInterval; mTime -= mInterval) - { - emit(); - // Random rate. - if (mDef.emitRateDef.enableRandom) - mInterval = rng.randf(mDef.emitRateDef.rate.random.floor, mDef.emitRateDef.rate.random.ceil, ACCURACY_5); - else - mInterval = mDef.emitRateDef.rate.rate; - } - } - - void ParticleEmitter::emit() - { - Particle* p = mPS.claim(); - if (p == nullptr) - return; - p->reset(); - // Init position. - if (mDef.positionDef.enableRandom) - { - float x = rng.randf(mDef.positionDef.position.random.floor.x, mDef.positionDef.position.random.ceil.x, ACCURACY_4); - float y = rng.randf(mDef.positionDef.position.random.floor.y, mDef.positionDef.position.random.ceil.y, ACCURACY_4); - p->transform.setPosition(x, y); - } - else - { - p->transform.setPosition(mDef.positionDef.position.position); - } - // Init speed. - float r = 0; - if (mDef.directionDef.enableRandom) - r = rng.randf(mDef.directionDef.direction.random.floor, mDef.directionDef.direction.random.ceil, ACCURACY_4); - else - r = mDef.directionDef.direction.direction; - float f = 0; - if (mDef.forceDef.enableRandom) - f = rng.randf(mDef.forceDef.force.random.floor, mDef.forceDef.force.random.ceil, ACCURACY_4); - else - f = mDef.forceDef.force.force; - p->speed.set(f*cos(r), f*sin(r)); - // Init life time - if (mPDef.lifeTimeDef.enableRandom) - p->lifeTime = rng.randf(mPDef.lifeTimeDef.life.random.floor, mPDef.lifeTimeDef.life.random.floor, ACCURACY_4); - else - p->lifeTime = mPDef.lifeTimeDef.life.life; - // Init linear accelaration - p->linearAcceleration = mPDef.linearAccelarationDef.linearAccelaration; - // Init angular accelaration - p->radialAcceleration = mPDef.radialAccelarationDef.radialAccelaration; - // Init Angular speed. - if (mPDef.angularSpeedDef.enableRandom) - p->angularSpeed = rng.randf(mPDef.angularSpeedDef.angularSpeed.random.floor, mPDef.angularSpeedDef.angularSpeed.random.ceil, ACCURACY_4); - else - p->angularSpeed = mPDef.angularSpeedDef.angularSpeed.angularSpeed; - // Scale over time - if (mPDef.sizeOverTimeDef.enable) - { - p->scaleBegin = mPDef.sizeOverTimeDef.start; - p->scaleEnd = mPDef.sizeOverTimeDef.end; - } - // Color over time - if (mPDef.colorOverTimeDef.enable) - { - p->colorStart = mPDef.colorOverTimeDef.colorStart; - p->colorEnd = mPDef.colorOverTimeDef.colorEnd; - } - } - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_emitter.h b/src/libjin/Graphics/particles/je_particle_emitter.h deleted file mode 100644 index 44bd1fb..0000000 --- a/src/libjin/Graphics/particles/je_particle_emitter.h +++ /dev/null @@ -1,136 +0,0 @@ -#ifndef __JE_PARTICLE_EMITTER_H__ -#define __JE_PARTICLE_EMITTER_H__ - -#include "../../common/je_temporary.h" -#include "../../math/je_vector2.hpp" - -#include "je_particle.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - struct PositionDef - { - bool enableRandom = false; - Struct(position, - struct - { - Math::Vector2<float> floor; - Math::Vector2<float> ceil; - } random; - Math::Vector2<float> position; - ); - }; - - struct DirectionDef - { - bool enableRandom = false; - Struct(direction, - struct - { - float floor = 0; - float ceil = 0; - } random; - float direction = 0; - ); - }; - - /// - /// How many particles emitted per second. - /// - struct EmitRateDef - { - bool enableRandom = false; - Struct(rate, - struct - { - float floor = 1; - float ceil = 1; - } random; - float rate = 1; - ); - }; - - /// - /// Initial speed of particle. - /// - struct ForceDef - { - bool enableRandom = false; - Struct(force, - struct - { - float floor = 1; - float ceil = 1; - } random; - float force = 1; - ); - }; - - /// - /// Definition of particle emitter. - /// - struct ParticleEmitterDef - { - EmitRateDef emitRateDef; ///< Emit rate. - - PositionDef positionDef; ///< Emit position(relativily to the particle system center). - DirectionDef directionDef; ///< Emit direction. - ForceDef forceDef; ///< Emit force. - }; - - class ParticleSystem; - - /// - /// Emit a single particle. - /// - class ParticleEmitter - { - public: - /// - /// - /// - ParticleEmitter(ParticleSystem& ps); - - /// - /// - /// - void update(float dt); - - private: - /// - /// - /// - ParticleSystem& mPS; - - const ParticleEmitterDef& mDef; - - const ParticleDef& mPDef; - - /// - /// Emit particle according to emitter definition and particle definition, particle system should - /// assign particle value to the particle in particle pool, but not use this return particle. - /// - void emit(); - - /// - /// - /// - float mTime; - - /// - /// - /// - float mInterval; - - }; - - } // namespace Particles - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_pool.h b/src/libjin/Graphics/particles/je_particle_pool.h deleted file mode 100644 index 46cd73a..0000000 --- a/src/libjin/Graphics/particles/je_particle_pool.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef __JE_PARTICLE_BATCH_H__ -#define __JE_PARTICLE_BATCH_H__ - -#include "../../common/je_pool.hpp" - -#include "je_particle.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - /// - /// Particle pool for reducing memory fragmentation. - /// - typedef Pool<Particle> ParticlePool; - - } // namespace Particles - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_system.cpp b/src/libjin/Graphics/particles/je_particle_system.cpp deleted file mode 100644 index a81a3c9..0000000 --- a/src/libjin/Graphics/particles/je_particle_system.cpp +++ /dev/null @@ -1,67 +0,0 @@ -#include "je_particle_system.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - ParticleSystem::ParticleSystem(const ParticleSystemDef& def) - : mDef(def) - , mEmitter(*this) - , mParticlePool(def.maxParticleCount, sizeof(Particle)) - { - } - - ParticleSystem::~ParticleSystem() - { - } - - void ParticleSystem::update(float dt) - { - mEmitter.update(dt); - for (int i = 0; i < mAliveParticles.size(); ++i) - { - Particle* p = mAliveParticles[i]; - if (p->alive == false) - { - recycle(i, p); - --i; - } - else - { - p->update(dt); - } - } - } - - void ParticleSystem::render(float x, float y, float sx /* = 1 */, float sy /* = 1 */, float r /* = 0 */, float ax /* = 0 */, float ay /* = 0 */) - { - for (Particle* p : mAliveParticles) - p->render(); - } - - void ParticleSystem::setGraphic(const Graphic* graphic) - { - mGraphic = graphic; - } - - Particle* ParticleSystem::claim() - { - Particle* p = new (mParticlePool.GetNextWithoutInitializing()) Particle(mGraphic); - mAliveParticles.push_back(p); - return p; - } - - void ParticleSystem::recycle(int i, Particle* p) - { - if (i >= mAliveParticles.size()) - return; - mAliveParticles.erase(mAliveParticles.begin() + i); - mParticlePool.Delete(p); - } - - } - } -}
\ No newline at end of file diff --git a/src/libjin/Graphics/particles/je_particle_system.h b/src/libjin/Graphics/particles/je_particle_system.h deleted file mode 100644 index 8ee79ec..0000000 --- a/src/libjin/Graphics/particles/je_particle_system.h +++ /dev/null @@ -1,115 +0,0 @@ -#ifndef __JE_PARTICLE_EMMITTER_H__ -#define __JE_PARTICLE_EMMITTER_H__ - -#include <vector> - -#include "../../common/je_temporary.h" -#include "../../game/je_gameobject.h" - -#include "../je_sprite.h" - -#include "je_particle_emitter.h" -#include "je_particle_pool.h" -#include "je_particle.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Particles - { - - /// - /// Definition of particle system. - /// - struct ParticleSystemDef - { - ParticleSystemDef() {} - uint maxParticleCount = 1; ///< Max count of particles in pool. 1 by default. - ParticleEmitterDef emitterDef; ///< Particle emitter definition. - ParticleDef particleDef; ///< Particle definition. - }; - - /// - /// Particle emitter, handle all particles it emitts. - /// - class ParticleSystem/* : public Game::GameObject*/ - { - public: - /// - /// Particle system constructor - /// - /// @param def Definition of particle system. - /// - ParticleSystem(const ParticleSystemDef& def); - - /// - /// Particle system destructor. - /// - ~ParticleSystem(); - - /// - /// Update particle system and all alive particles. - /// - void update(float dt); - - /// - /// Render particle system. - /// - void render(float x, float y, float sx = 1, float sy = 1, float r = 0, float ax = 0, float ay = 0); - - /// - /// Set sprite to render. - /// - /// @param sprite Sprite to render. - /// - void setGraphic(const Graphic* graphic); - - private: - - friend class ParticleEmitter; - - ParticleSystem(); - - /// - /// - /// - Particle* claim(); - - /// - /// - /// - void recycle(int i, Particle* p); - - /// - /// Particle system definition. - /// - ParticleSystemDef mDef; - - /// - /// Sprite to be drawn. - /// - const Graphic* mGraphic; - - /// - /// Particle emitter. - /// - ParticleEmitter mEmitter; - - /// - /// Particle pool. - /// - ParticlePool mParticlePool; - - /// - /// Alive particles, that means these particles could join to the life cycle loop. - /// - std::vector<Particle*> mAliveParticles; - - }; - - } // namespace Particles - } // namespace Graphics -} // namespace JinEngine - -#endif
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/built-in/je_default.shader.h b/src/libjin/Graphics/shaders/built-in/je_default.shader.h deleted file mode 100644 index 3f57c44..0000000 --- a/src/libjin/Graphics/shaders/built-in/je_default.shader.h +++ /dev/null @@ -1,21 +0,0 @@ -// Ĭshader -static const char* default_shader = R"( - -#VERTEX_SHADER - -Vertex vert(Vertex v) -{ - return v; -} - -#END_VERTEX_SHADER - -#FRAGMENT_SHADER - -Color frag(Color col, Texture tex, Vertex v) -{ - return col * texel(tex, v.uv); -} - -#END_FRAGMENT_SHADER -)";
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/built-in/je_font.shader.h b/src/libjin/Graphics/shaders/built-in/je_font.shader.h deleted file mode 100644 index e04c225..0000000 --- a/src/libjin/Graphics/shaders/built-in/je_font.shader.h +++ /dev/null @@ -1,21 +0,0 @@ -// shader -static const char* font_shader = R"( - -#VERTEX_SHADER - -Vertex vert(Vertex v) -{ - return v; -} - -#END_VERTEX_SHADER - -#FRAGMENT_SHADER - -Color frag(Color col, Texture tex, Vertex v) -{ - return Color(col.rgb, texel(tex, v.uv).a); -} - -#END_FRAGMENT_SHADER -)";
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/built-in/je_texture.shader.h b/src/libjin/Graphics/shaders/built-in/je_texture.shader.h deleted file mode 100644 index d1fc86f..0000000 --- a/src/libjin/Graphics/shaders/built-in/je_texture.shader.h +++ /dev/null @@ -1,21 +0,0 @@ -// ͼshader -static const char* texture_shader = R"( - -#VERTEX_SHADER - -Vertex vert(Vertex v) -{ - return v; -} - -#END_VERTEX_SHADER - -#FRAGMENT_SHADER - -Color frag(Color col, Texture tex, Vertex v) -{ - return col * texel(tex, v.uv); -} - -#END_FRAGMENT_SHADER -)";
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/je_base.shader.h b/src/libjin/Graphics/shaders/je_base.shader.h deleted file mode 100644 index 34996bc..0000000 --- a/src/libjin/Graphics/shaders/je_base.shader.h +++ /dev/null @@ -1,89 +0,0 @@ -#ifndef __JE_BASE_SHADER_H__ -#define __JE_BASE_SHADER_H__ - -static const char* base_shared = R"( -#define Number float -#define Texture sampler2D -#define Canvas sampler2D -#define Color vec4 -#define Vec2 vec2 -#define Vec3 vec3 -#define Vec4 vec4 - -#define texel texture2D - -struct Vertex -{ - vec2 xy; - vec2 uv; -}; - -)"; - -static const int BASE_SHARED_SIZE = strlen(base_shared); - -static const char* base_vertex = R"( -#version 130 core - -%s -// Projection matrix -uniform mat4 jin_ProjectionMatrix; -// Model view matrix -uniform mat4 jin_ModelViewMatrix; - -in vec2 jin_VertexCoords; -in vec2 jin_TextureCoords; - -out vec4 jin_Color; -out vec2 jin_XY; -out vec2 jin_UV; - -%s - -void main() -{ - vec4 v = jin_ModelViewMatrix * vec4(jin_VertexCoords, 0, 1.0); - Vertex _v = vert(Vertex(v.xy, jin_TextureCoords)); - gl_Position = jin_ProjectionMatrix * vec4(_v.xy, 0, 1.0f); - jin_Color = gl_Color; - jin_XY = _v.xy; - jin_UV = _v.uv; -} -)"; - -static const int BASE_VERTEX_SHADER_SIZE = strlen(base_vertex) + BASE_SHARED_SIZE; - -#define formatVertexShader(buf, program) sprintf(buf,base_vertex, base_shared, program) - -static const char* base_fragment = R"( -#version 130 core - -%s - -uniform Texture jin_MainTexture; - -in vec4 jin_Color; -in vec2 jin_XY; -in vec2 jin_UV; - -out vec4 jin_OutColor; - -%s - -void main() -{ - jin_OutColor = frag(jin_Color, jin_MainTexture, Vertex(jin_XY, jin_UV)); -} -)"; - -static const int BASE_FRAGMENT_SHADER_SIZE = strlen(base_fragment) + BASE_SHARED_SIZE; - -#define formatFragmentShader(buf, program) sprintf(buf, base_fragment, base_shared, program) - -static const char* SHADER_PROJECTION_MATRIX = "jin_ProjectionMatrix"; -static const char* SHADER_MODELVIEW_MATRIX = "jin_ModelViewMatrix"; -static const char* SHADER_MAIN_TEXTURE = "jin_MainTexture"; -static const char* SHADER_VERTEX_COORDS = "jin_VertexCoords"; -static const char* SHADER_TEXTURE_COORDS = "jin_TextureCoords"; - -#endif // __JE_BASE_SHADER_H__ diff --git a/src/libjin/Graphics/shaders/je_jsl_compiler.cpp b/src/libjin/Graphics/shaders/je_jsl_compiler.cpp deleted file mode 100644 index feb88d4..0000000 --- a/src/libjin/Graphics/shaders/je_jsl_compiler.cpp +++ /dev/null @@ -1,57 +0,0 @@ -#include "../../core/je_configuration.h" -#if defined(jin_graphics) && (jin_graphics & jin_graphics_shader) - -#include "../../Filesystem/je_buffer.h" - -#include "je_jsl_compiler.h" - -using namespace std; -using namespace JinEngine::Filesystem; - -namespace JinEngine -{ - namespace Graphics - { - namespace Shaders - { - - #include "je_base.shader.h" - - bool JSLCompiler::compile(const string& jsl, string* vertex_shader, string* fragment_shader) - { - // parse shader source, need some optimizations - int loc_VERTEX_SHADER = jsl.find("#VERTEX_SHADER"); - int loc_END_VERTEX_SHADER = jsl.find("#END_VERTEX_SHADER"); - int loc_FRAGMENT_SHADER = jsl.find("#FRAGMENT_SHADER"); - int loc_END_FRAGMENT_SHADER = jsl.find("#END_FRAGMENT_SHADER"); - if (loc_VERTEX_SHADER == string::npos - || loc_END_VERTEX_SHADER == string::npos - || loc_FRAGMENT_SHADER == string::npos - || loc_END_FRAGMENT_SHADER == string::npos - ) - return false; - // Load vertex and fragment shader source into buffers. - { - // Compile JSL vertex program. - int start = loc_VERTEX_SHADER + strlen("#VERTEX_SHADER"); - *vertex_shader = jsl.substr(start, loc_END_VERTEX_SHADER - start); - Buffer vbuffer = Buffer(vertex_shader->length() + BASE_VERTEX_SHADER_SIZE); - formatVertexShader((char*)&vbuffer, vertex_shader->c_str()); - vertex_shader->assign((char*)&vbuffer); - } - { - // Compile JSL fragment program. - int start = loc_FRAGMENT_SHADER + strlen("#FRAGMENT_SHADER"); - *fragment_shader = jsl.substr(start, loc_END_FRAGMENT_SHADER - start); - Buffer fbuffer = Buffer(fragment_shader->length() + BASE_FRAGMENT_SHADER_SIZE); - formatFragmentShader((char*)&fbuffer, fragment_shader->c_str()); - fragment_shader->assign((char*)&fbuffer); - } - return true; - } - - } // namespace Shaders - } // namespace Graphics -} // namespace JinEngine - -#endif // (jin_graphics) && (jin_graphics & jin_graphics_shader)
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/je_jsl_compiler.h b/src/libjin/Graphics/shaders/je_jsl_compiler.h deleted file mode 100644 index df1e827..0000000 --- a/src/libjin/Graphics/shaders/je_jsl_compiler.h +++ /dev/null @@ -1,45 +0,0 @@ -#ifndef __JE_JSL_COMPILER_H__ -#define __JE_JSL_COMPILER_H__ - -#include "../../core/je_configuration.h" -#if defined(jin_graphics) && (jin_graphics & jin_graphics_shader) - -#include <string> - -#include "../../common/je_singleton.hpp" - -namespace JinEngine -{ - namespace Graphics - { - namespace Shaders - { - - /// - /// Compile JSL into GLSL. - /// - class JSLCompiler : public Singleton<JSLCompiler> - { - public: - /// - /// Compile JSL shader source into GLSL. - /// - /// @param jsl JSL shader source. - /// @param glsl_vertex Output of vertex glsl shader source. - /// @param glsl_fragment Output of fragment glsl shader source. - /// @return True if compile successful, otherwise return false. - /// - bool compile(const std::string& jsl, std::string* glsl_vertex, std::string* glsl_fragment); - - private: - singleton(JSLCompiler); - - }; - - } // namespace Shaders - } // namespace Graphics -} // namespace JinEngine - -#endif // (jin_graphics) && (jin_graphics & jin_graphics_shader) - -#endif // __JE_JSL_COMPILER_H__ diff --git a/src/libjin/Graphics/shaders/je_shader.cpp b/src/libjin/Graphics/shaders/je_shader.cpp deleted file mode 100644 index c1abbf0..0000000 --- a/src/libjin/Graphics/shaders/je_shader.cpp +++ /dev/null @@ -1,281 +0,0 @@ -#include "../../core/je_configuration.h" -#if defined(jin_graphics) && (jin_graphics & jin_graphics_shader) - -#include <iostream> - -#include "../../filesystem/je_buffer.h" -#include "../../utils/je_macros.h" - -#include "je_jsl_compiler.h" -#include "je_shader.h" - -using namespace std; -using namespace JinEngine::Filesystem; - -namespace JinEngine -{ - namespace Graphics - { - namespace Shaders - { - - // - // default_texture - // base_shader - // SHADER_FORMAT_SIZE - // formatShader - // -#include "built-in/je_default.shader.h" - -// -// https://stackoverflow.com/questions/27941496/use-sampler-without-passing-through-value -// The default value of a sampler variable is 0. From the GLSL 3.30 spec, -// section "4.3.5 Uniforms": -// -// The link time initial value is either the value of the variable's -// initializer, if present, or 0 if no initializer is present.Sampler -// types cannot have initializers. -// -// Since a value of 0 means that it's sampling from texture unit 0, it will -// work without ever setting the value as long as you bind your textures to -// unit 0. This is well defined behavior. -// -// Since texture unit 0 is also the default until you call glActiveTexture() -// with a value other than GL_TEXTURE0, it's very common to always use unit -// 0 as long as shaders do not need more than one texture.Which means that -// often times, setting the sampler uniforms is redundant for simple -// applications. -// -// I would still prefer to always set the values.If nothing else, it makes -// it clear to anybody reading your code that you really mean to sample from -// texture unit 0, and did not just forget to set the value. -// - const int DEFAULT_TEXTURE_UNIT = 0; - - /*static*/ Shader* Shader::CurrentShader = nullptr; - - Shader* Shader::createShader(const string& program) - { - Shader* shader = nullptr; - try - { - shader = new Shader(program); - } - catch (...) - { - return nullptr; - } - return shader; - } - - Shader::Shader(const string& program) - : mCurrentTextureUnit(DEFAULT_TEXTURE_UNIT) - { - if (!compile(program)) - throw 0; - } - - Shader::~Shader() - { - if (CurrentShader == this) - unuse(); - // delete shader program - glDeleteShader(mPID); - } - - bool Shader::compile(const string& program) - { - string vertex_shader, fragment_shader; - // Compile JSL shader source into GLSL shader source. - JSLCompiler* compiler = JSLCompiler::get(); - if (!compiler->compile(program, &vertex_shader, &fragment_shader)) - { - return false; - } -#define glsl(SHADER_MODE, SHADER, SRC) \ -do{ \ -const GLchar* src = SRC.c_str(); \ -glShaderSource(SHADER, 1, &src, NULL); \ -glCompileShader(SHADER); \ -GLint success; \ -glGetShaderiv(SHADER, GL_COMPILE_STATUS, &success); \ -if (success == GL_FALSE) \ - return false; \ -}while(0) - // Compile vertex shader. - GLuint vid = glCreateShader(GL_VERTEX_SHADER); - glsl(GL_VERTEX_SHADER, vid, vertex_shader); - // Compile fragment shader. - GLuint fid = glCreateShader(GL_FRAGMENT_SHADER); - glsl(GL_FRAGMENT_SHADER, fid, fragment_shader); -#undef glsl - // Create OpenGL shader program. - mPID = glCreateProgram(); - glAttachShader(mPID, vid); - glAttachShader(mPID, fid); - glLinkProgram(mPID); - GLint success; - glGetProgramiv(mPID, GL_LINK_STATUS, &success); - if (success == GL_FALSE) - return false; - } - - static inline GLint getMaxTextureUnits() - { - GLint maxTextureUnits = 0; - glGetIntegerv(GL_MAX_TEXTURE_IMAGE_UNITS, &maxTextureUnits); - return maxTextureUnits; - } - - void Shader::use() - { - glUseProgram(mPID); - CurrentShader = this; - sendInt(SHADER_MAIN_TEXTURE, DEFAULT_TEXTURE_UNIT); - } - - /*static*/ void Shader::unuse() - { - glUseProgram(0); - CurrentShader = nullptr; - } - - GLint Shader::claimTextureUnit(const std::string& name) - { - std::map<std::string, GLint>::iterator unit = mTextureUnits.find(name); - if (unit != mTextureUnits.end()) - return unit->second; - static GLint MAX_TEXTURE_UNITS = getMaxTextureUnits(); - if (++mCurrentTextureUnit >= MAX_TEXTURE_UNITS) - return 0; - mTextureUnits[name] = mCurrentTextureUnit; - return mCurrentTextureUnit; - } - -#define checkJSL() \ - if (CurrentShader != this) \ - return - - void Shader::sendInt(const char* name, int value) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, name); - glUniform1i(loc, value); - } - - void Shader::sendFloat(const char* variable, float number) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, variable); - glUniform1f(loc, number); - } - - // - // https://www.douban.com/note/627332677/ - // struct TextureUnit - // { - // GLuint targetTexture1D; - // GLuint targetTexture2D; - // GLuint targetTexture3D; - // GLuint targetTextureCube; - // ... - // }; - // - // TextureUnit mTextureUnits[GL_MAX_TEXTURE_IMAGE_UNITS] - // GLuint mCurrentTextureUnit = 0; - // - void Shader::sendTexture(const char* variable, const Texture* tex) - { - checkJSL(); - GLint location = glGetUniformLocation(mPID, variable); - if (location == -1) - return; - GLint unit = claimTextureUnit(variable); - if (unit == 0) - { - // TODO: 쳣 - return; - } - gl.activeTexUnit(unit); - glUniform1i(location, unit); - gl.bindTexture(tex->getGLTexture()); - gl.activeTexUnit(0); - } - - void Shader::sendCanvas(const char* variable, const Canvas* canvas) - { - checkJSL(); - GLint location = glGetUniformLocation(mPID, variable); - if (location == -1) - return; - GLint unit = claimTextureUnit(variable); - if (unit == 0) - { - // TODO: 쳣 - return; - } - glUniform1i(location, unit); - glActiveTexture(GL_TEXTURE0 + unit); - gl.bindTexture(canvas->getGLTexture()); - - glActiveTexture(GL_TEXTURE0); - } - - void Shader::sendVec2(const char* name, float x, float y) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, name); - glUniform2f(loc, x, y); - } - - void Shader::sendVec3(const char* name, float x, float y, float z) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, name); - glUniform3f(loc, x, y, z); - } - - void Shader::sendVec4(const char* name, float x, float y, float z, float w) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, name); - glUniform4f(loc, x, y, z, w); - } - - void Shader::sendColor(const char* name, const Color* col) - { - checkJSL(); - int loc = glGetUniformLocation(mPID, name); - glUniform4f(loc, - col->r / 255.f, - col->g / 255.f, - col->b / 255.f, - col->a / 255.f - ); - } - - void Shader::sendMatrix4(const char* name, const Math::Matrix* mat4) - { - int loc = glGetUniformLocation(mPID, name); - glUniformMatrix4fv(loc, 1, GL_FALSE, mat4->getElements()); - } - - void Shader::setVertexPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers) - { - GLint loc = glGetAttribLocation(mPID, SHADER_VERTEX_COORDS); - glEnableVertexAttribArray(0); - glVertexAttribPointer(loc, n, type, GL_FALSE, stride, pointers); - } - - void Shader::setUVPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers) - { - GLint loc = glGetAttribLocation(mPID, SHADER_TEXTURE_COORDS); - glEnableVertexAttribArray(1); - glVertexAttribPointer(loc, n, type, GL_FALSE, stride, pointers); - } - - } // namespace Shaders - } // namespace Graphics -} // namespace JinEngine - -#endif // (jin_graphics) && (jin_graphics & jin_graphics_shader)
\ No newline at end of file diff --git a/src/libjin/Graphics/shaders/je_shader.h b/src/libjin/Graphics/shaders/je_shader.h deleted file mode 100644 index 2009e79..0000000 --- a/src/libjin/Graphics/shaders/je_shader.h +++ /dev/null @@ -1,201 +0,0 @@ -#ifndef __JE_SHADER_H__ -#define __JE_SHADER_H__ - -#include "../../core/je_configuration.h" -#if defined(jin_graphics) && (jin_graphics & jin_graphics_shader) - -#include <string> -#include <map> - -#include "GLee/GLee.h" - -#include "../je_color.h" -#include "../je_texture.h" -#include "../je_canvas.h" - -#include "je_base.shader.h" - -namespace JinEngine -{ - namespace Graphics - { - namespace Shaders - { - - /// - /// Built in shader program. - /// - /// Built in shader program written with custom shading language called JSL (jin shading language). A - /// JSL program is compiled into glsl, so most glsl built in functions and structs are available in - /// JSL. - /// - class Shader - { - public: - /// - /// Create shader program from source code. - /// - /// @param source The shader source code. - /// - static Shader* createShader(const std::string& source); - - /// - /// Get current shader. - /// - /// @return Current used shader program. - /// - static inline Shader* getCurrentShader() { return CurrentShader; } - - /// - /// Unuse current shader. - /// - static void unuse(); - - /// - /// Destructor of shader. - /// - virtual ~Shader(); - - /// - /// Use specific shader. - /// - void use(); - - /// - /// Send float value to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param number Value of uniform variable to be sent. - /// - void sendFloat(const char* name, float number); - - /// - /// Send texture to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param texture Texture to be sent. - /// - void sendTexture(const char* name, const Texture* texture); - - /// - /// Send integer value to shader - /// - /// @param name Name of the uniform variable to be assigned. - /// @param value Value to be sent. - /// - void sendInt(const char* name, int value); - - /// - /// Send 2D vector to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param x X value of the vector to be sent. - /// @param y Y value of the vector to be sent. - /// - void sendVec2(const char* name, float x, float y); - - /// - /// Send 3D vector to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param x X value of the vector to be sent. - /// @param y Y value of the vector to be sent. - /// @param z Z value of the vector to be sent. - /// - void sendVec3(const char* name, float x, float y, float z); - - /// - /// Send 4D vector to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param x X value of the vector to be sent. - /// @param y Y value of the vector to be sent. - /// @param z Z value of the vector to be sent. - /// @param w W value of the vector to be sent. - /// - void sendVec4(const char* name, float x, float y, float z, float w); - - /// - /// Send canvas to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param canvas Canvas to be sent. - /// - void sendCanvas(const char* name, const Canvas* canvas); - - /// - /// Send color to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param color Color to be sent. - /// - void sendColor(const char* name, const Color* color); - - /// - /// Send 4 by 4 matrix to shader. - /// - /// @param name Name of the uniform variable to be assigned. - /// @param mat4 Matrix to be sent. - /// - void sendMatrix4(const char* name, const Math::Matrix* mat4); - - /// - /// Set vertices value. - /// - /// @param n Number of vertices. - /// @param type Data type of each component in the array. - /// @param stride Byte offset between consecutive generic vertex attributes. - /// @param pointers Pointer to the first component of the first generic vertex attribute in the array. - /// - void setVertexPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); - - /// - /// Set texture UV coordinates. - /// - /// @param n Number of vertices. - /// @param type Data type of each component in the array. - /// @param stride Byte offset between consecutive generic vertex attributes. - /// @param pointers Pointer to the first component of the first generic vertex attribute in the array. - /// - void setUVPointer(int n, GLenum type, GLsizei stride, const GLvoid * pointers); - - protected: - /// - /// Reference of current used shader. - /// - static Shader* CurrentShader; - - /// - /// Get texture unit of the uniform texture. If not, assign one. - /// - /// @param name Name of the texture uniform variable. - /// @return Texture unit which texture variable be assigned. - /// - GLint claimTextureUnit(const std::string& name); - - /// - /// Shader constructor. - /// - Shader(const std::string& program); - - /// - /// Compile JSL program into GLSL source. - /// - /// @param program JSL source code. - /// @return Return true if compile successed, otherwise return false. - /// - bool compile(const std::string& program); - - GLuint mPID; - GLint mCurrentTextureUnit; - std::map<std::string, GLint> mTextureUnits; - - }; - - } // namespace Shaders - } // namespace Graphics -} // namespace JinEngine - -#endif // (jin_graphics) && (jin_graphics & jin_graphics_shader) - -#endif // __JE_SHADER_H__
\ No newline at end of file |