aboutsummaryrefslogtreecommitdiff
path: root/test/06TextureFont/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'test/06TextureFont/main.cpp')
-rw-r--r--test/06TextureFont/main.cpp149
1 files changed, 149 insertions, 0 deletions
diff --git a/test/06TextureFont/main.cpp b/test/06TextureFont/main.cpp
index b28b04f..9551604 100644
--- a/test/06TextureFont/main.cpp
+++ b/test/06TextureFont/main.cpp
@@ -1,3 +1,152 @@
+#include <iostream>
+#include "jin.h"
+using namespace jin::core;
+using namespace jin::graphics;
+using namespace jin::input;
+using namespace jin::audio;
+using namespace jin::filesystem;
+Font* font = nullptr;
+Canvas* canvas;
+TTFData* data = nullptr;
+Shader* shader = nullptr;
+Shader* shader2 = nullptr;
+Page* page = nullptr;
+Texture* tex = nullptr;
+float dt;
+void onLoad()
+{
+ 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 vec4(col.rgb, texel(tex, v.uv).a);
+}
+
+#END_FRAGMENT_SHADER
+ )";
+ const char* canvas_shader = R"(
+#VERTEX_SHADER
+
+Vertex vert(Vertex v)
+{
+ return v;
+}
+
+#END_VERTEX_SHADER
+
+#FRAGMENT_SHADER
+
+Color frag(Color col, Texture tex, Vertex v)
+{
+ if(v.uv.x <= 0.002f || v.uv.x >= 0.998f || v.uv.y <= 0.005f || v.uv.y >= 0.995f)
+ return vec4(1, 1, 1, 1);
+ else
+ return texel(tex, v.uv);
+}
+
+#END_FRAGMENT_SHADER
+)";
+ shader = Shader::createShader(font_shader);
+ shader2 = Shader::createShader(canvas_shader);
+ Filesystem* fs = Filesystem::get();
+ fs->mount("../Debug");
+ Buffer buffer;
+ fs->read("font.ttf", &buffer);
+ data = TTFData::createTTFData((const unsigned char*)buffer.data, buffer.size);
+ font = TTF::createTTF(data, 15);
+ const char* str = u8R"(Դ爐󤸤Τ)";
+ int l = strlen(str);
+ Text text = Text(Encode::UTF8, str, strlen(str));
+ page = font->typeset(text, 15, 0);
+ delete data;
+ //canvas = Canvas::createCanvas(100, 100);
+ //page = font->typeset("ˤ!", 120, 20);
+ buffer.clear();
+ fs->read("img.png", &buffer);
+ Bitmap* bitmap = Bitmap::createBitmap(buffer.data, buffer.size);
+ tex = Texture::createTexture(bitmap);
+ canvas = Canvas::createCanvas(page->size.w, page->size.h);
+
+ Canvas::bind(canvas);
+ glClear(GL_COLOR_BUFFER_BIT);
+ glColor4f(1, 1, 1, 1);
+ if (font != nullptr)
+ {
+ //font->print(u8"Hello,\n world!", 10, 10);
+ //font->print(u8"ڧӧ֧ ާڧ!", 10, 10 + 15 * 1);
+ shader->use();
+ font->print(page, 0, 0);
+ shader->unuse();
+ //font->print(u8"!", 10, 10 + 15*3);
+ //font->render(page);
+ }
+ Canvas::unbind();
+}
+
+void onEvent(jin::input::Event* e)
+{
+ static Game* game = Game::get();
+ if (e->type == EventType::QUIT)
+ game->stop();
+}
+
+void onUpdate(int ms)
+{
+ dt += ms / (float)1000;
+}
+
+void onDraw()
+{
+ glClear(GL_COLOR_BUFFER_BIT);
+ glColor4f(1, 1, 1, 1);
+ //gl.pushColor(32, 32, 32, 255);
+ //rect(FILL, 0, 0, 500, 500);
+ //circle(RenderMode::LINE, 50, 50, 30);
+ //tex->draw(0, 0, 1, 1, 0);
+ //tex->draw(20, 50, 1, 1, 0);
+ //shader->sendFloat("dt", dt);
+ shader2->use();
+ canvas->draw(20 * sin(dt), 10 * cos(dt), 1, 1, 0);
+ shader2->unuse();
+}
+
+int main(int argc, char* argv[])
+{
+ Game* game = Game::get();
+ Game::Setting setting;
+ setting.loader = onLoad;
+ setting.eventHandler = onEvent;
+ setting.updater = onUpdate;
+ setting.drawer = onDraw;
+ game->init(&setting);
+
+ Window* wnd = Window::get();
+ Window::Setting wndSetting;
+ wndSetting.width = 600;
+ wndSetting.height = 512;
+ wndSetting.title = "Jin v0.1.1";
+ wndSetting.fps = 60;
+ wndSetting.vsync = false;
+ wndSetting.fullscreen = false;
+ wndSetting.resizable = false;
+ wnd->init(&wndSetting);
+
+ game->run();
+
+ game->quit();
+ wnd->quit();
+
+ return 0;
+} \ No newline at end of file