diff options
Diffstat (limited to 'test/06TextureFont')
-rw-r--r-- | test/06TextureFont/main.cpp | 149 |
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 |