aboutsummaryrefslogtreecommitdiff
path: root/test/05Font/main.cpp
blob: 3ce8183cf8fc1555a9be6f19f2c5acf5a5fc9185 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#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;
FontData* 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 = FontData::createFontData((const unsigned char*)buffer.data, buffer.size);
    font = Font::createFont(data, 15);
	page = font->typeset(u8R"(平安時代中期の物語。紫式部著。ただし,そのすべてが紫式部の筆に成るのでは
ないとする説もある。 54帖。寛弘 (1004~12) 頃成立か。物語は3部に分けてみ
ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多
啊哈噶科膜卡して広く迎えられている。貴族社会の苦悩を摘出したところに磁瓷得
ることができる。第1部は,容貌,才能などすべてにすぐれた主人公光源氏が,多
くの女性と関係をもちながら,運命に導かれて栄華をきわめる姿を描く。これに対
して第2部は苦悩の世界であって,光源氏は最愛の紫の上を失い,栄華は内側から崩
壊する。第3部 (宇治十帖) は光源氏没後の物語で,不義によって生れた薫大将を主
人公として,不安に満ちた暗い世界が展開される。さまざまな恋愛と運命的な人生の
うちに,貴族社会の苦悩を摘出したところに価値があり,現代では,世界的な文学と
して広く迎えられている。abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
漫画自1999年开始在日本集英社旗下的少年漫画杂志《周刊少年Jump》上连载。2002年
,由日本动画工作室Studio Pierrot根据漫画原作所改编制作的电视动画版《火影忍者
》开始在日本东京电视台播出。2004年,漫画进而改编成电影。2006年,漩涡鸣人入选
美国《新闻周刊》日文版于10月18日发行的特集中选出的“全世界最受尊敬的100位日本
人”。[2]
)", 17, 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->width, page->height);

    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;
}