mirror of
https://github.com/Relintai/sfw.git
synced 2025-01-09 21:19:36 +01:00
Implemented Text2D.
This commit is contained in:
parent
27e35c6553
commit
12a6cab9e9
@ -78,6 +78,7 @@ ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/mesh_instance_2d.cp
|
|||||||
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/object_2d.cpp -o sfw/render_objects/object_2d.o
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/object_2d.cpp -o sfw/render_objects/object_2d.o
|
||||||
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/sprite.cpp -o sfw/render_objects/sprite.o
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/sprite.cpp -o sfw/render_objects/sprite.o
|
||||||
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/tile_map.cpp -o sfw/render_objects/tile_map.o
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/tile_map.cpp -o sfw/render_objects/tile_map.o
|
||||||
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c sfw/render_objects/text_2d.cpp -o sfw/render_objects/text_2d.o
|
||||||
|
|
||||||
ccache g++ -Wall -D_REENTRANT -g -Isfw -c game_scene.cpp -o game_scene.o
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c game_scene.cpp -o game_scene.o
|
||||||
ccache g++ -Wall -D_REENTRANT -g -Isfw -c main.cpp -o main.o
|
ccache g++ -Wall -D_REENTRANT -g -Isfw -c main.cpp -o main.o
|
||||||
@ -106,6 +107,7 @@ ccache g++ -Wall -lm -ldl -lpthread -lX11 -D_REENTRANT -g sfw/core/aabb.o sfw/c
|
|||||||
sfw/render_objects/object_2d.o \
|
sfw/render_objects/object_2d.o \
|
||||||
sfw/render_objects/sprite.o sfw/render_objects/tile_map.o \
|
sfw/render_objects/sprite.o sfw/render_objects/tile_map.o \
|
||||||
sfw/render_objects/camera_2d.o sfw/render_objects/mesh_instance_2d.o \
|
sfw/render_objects/camera_2d.o sfw/render_objects/mesh_instance_2d.o \
|
||||||
|
sfw/render_objects/text_2d.o \
|
||||||
game_scene.o main.o \
|
game_scene.o main.o \
|
||||||
-o game
|
-o game
|
||||||
|
|
||||||
|
@ -98,6 +98,8 @@ void GameScene::render() {
|
|||||||
_font_test_sprite->render();
|
_font_test_sprite->render();
|
||||||
_font_test_mi->render();
|
_font_test_mi->render();
|
||||||
|
|
||||||
|
_text_2d->render();
|
||||||
|
|
||||||
//TextRenderer::get_singleton()->font_init();
|
//TextRenderer::get_singleton()->font_init();
|
||||||
//TextRenderer::get_singleton()->font_print("test");
|
//TextRenderer::get_singleton()->font_print("test");
|
||||||
}
|
}
|
||||||
@ -121,7 +123,7 @@ GameScene::GameScene() {
|
|||||||
_font_test_sprite = memnew(Sprite);
|
_font_test_sprite = memnew(Sprite);
|
||||||
|
|
||||||
_font_test_mat = memnew(FontMaterial());
|
_font_test_mat = memnew(FontMaterial());
|
||||||
_font_test_mat->texture = _font->get_texture().ptr();
|
_font_test_mat->texture = _font->get_texture();
|
||||||
_font_test_sprite->mesh_instance->material = _font_test_mat;
|
_font_test_sprite->mesh_instance->material = _font_test_mat;
|
||||||
_font_test_sprite->width = _font->get_atlas_width();
|
_font_test_sprite->width = _font->get_atlas_width();
|
||||||
_font_test_sprite->height = _font->get_atlas_height();
|
_font_test_sprite->height = _font->get_atlas_height();
|
||||||
@ -255,6 +257,13 @@ GameScene::GameScene() {
|
|||||||
|
|
||||||
mesh->upload();
|
mesh->upload();
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
_text_2d = memnew(Text2D);
|
||||||
|
_text_2d->set_font(_font);
|
||||||
|
_text_2d->set_text("Test Text2D.\n Newline.");
|
||||||
|
_text_2d->set_text_color(Color(1, 1, 0));
|
||||||
|
_text_2d->update();
|
||||||
|
_text_2d->transform.set_origin(Vector2(1200, 250));
|
||||||
}
|
}
|
||||||
|
|
||||||
GameScene::~GameScene() {
|
GameScene::~GameScene() {
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "render_objects/mesh_instance_2d.h"
|
#include "render_objects/mesh_instance_2d.h"
|
||||||
#include "render_objects/mesh_instance_3d.h"
|
#include "render_objects/mesh_instance_3d.h"
|
||||||
#include "render_objects/sprite.h"
|
#include "render_objects/sprite.h"
|
||||||
|
#include "render_objects/text_2d.h"
|
||||||
#include "render_objects/tile_map.h"
|
#include "render_objects/tile_map.h"
|
||||||
|
|
||||||
class GameScene : public Scene {
|
class GameScene : public Scene {
|
||||||
@ -55,6 +56,8 @@ public:
|
|||||||
MeshInstance3D *mi2;
|
MeshInstance3D *mi2;
|
||||||
ColorMaterial *color_material;
|
ColorMaterial *color_material;
|
||||||
|
|
||||||
|
Text2D *_text_2d;
|
||||||
|
|
||||||
//ColoredMaterial *cmaterial;
|
//ColoredMaterial *cmaterial;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -255,18 +255,10 @@ void Font::font_face_from_mem(const void *ttf_data, uint32_t ttf_len, float font
|
|||||||
//String pngname = "font_debug" + itos(index) + " .png";
|
//String pngname = "font_debug" + itos(index) + " .png";
|
||||||
//stbi_write_png(pngname.utf8().get_data(), _width, _height, 1, bitmap, 0);
|
//stbi_write_png(pngname.utf8().get_data(), _width, _height, 1, bitmap, 0);
|
||||||
|
|
||||||
if (!_image.is_valid()) {
|
|
||||||
_image.instance();
|
|
||||||
}
|
|
||||||
|
|
||||||
bitmap_data.resize(_width * _height);
|
bitmap_data.resize(_width * _height);
|
||||||
|
|
||||||
_image->create(_width, _height, false, Image::FORMAT_L8, bitmap_data);
|
_image->create(_width, _height, false, Image::FORMAT_L8, bitmap_data);
|
||||||
|
|
||||||
if (!_texture.is_valid()) {
|
|
||||||
_texture.instance();
|
|
||||||
}
|
|
||||||
|
|
||||||
_texture->create_from_image(_image);
|
_texture->create_from_image(_image);
|
||||||
|
|
||||||
_texture_offsets.resize(_num_glyphs);
|
_texture_offsets.resize(_num_glyphs);
|
||||||
@ -492,6 +484,9 @@ Font::Font() {
|
|||||||
_descent = 0;
|
_descent = 0;
|
||||||
_linegap = 0;
|
_linegap = 0;
|
||||||
_linedist = 0;
|
_linedist = 0;
|
||||||
|
|
||||||
|
_image.instance();
|
||||||
|
_texture.instance();
|
||||||
}
|
}
|
||||||
|
|
||||||
Font::~Font() {
|
Font::~Font() {
|
||||||
|
@ -16,7 +16,7 @@ public:
|
|||||||
set_uniform(projection_matrix_location, RenderState::projection_matrix_2d);
|
set_uniform(projection_matrix_location, RenderState::projection_matrix_2d);
|
||||||
set_uniform(model_view_matrix_location, RenderState::model_view_matrix_2d);
|
set_uniform(model_view_matrix_location, RenderState::model_view_matrix_2d);
|
||||||
|
|
||||||
if (texture) {
|
if (texture.is_valid()) {
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, texture->get_gl_texture());
|
glBindTexture(GL_TEXTURE_2D, texture->get_gl_texture());
|
||||||
glUniform1i(texture_location, 0);
|
glUniform1i(texture_location, 0);
|
||||||
@ -88,7 +88,6 @@ public:
|
|||||||
model_view_matrix_location = 0;
|
model_view_matrix_location = 0;
|
||||||
|
|
||||||
texture_location = 0;
|
texture_location = 0;
|
||||||
texture = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
GLint projection_matrix_location;
|
GLint projection_matrix_location;
|
||||||
@ -96,7 +95,7 @@ public:
|
|||||||
|
|
||||||
GLint texture_location;
|
GLint texture_location;
|
||||||
|
|
||||||
Texture *texture;
|
Ref<Texture> texture;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // TEXT_MATERIAL_H
|
#endif // TEXT_MATERIAL_H
|
||||||
|
@ -1,37 +1,66 @@
|
|||||||
#include "render_objects/mesh_instance_2d.h"
|
#include "render_objects/text_2d.h"
|
||||||
|
|
||||||
|
#include "render_core/font.h"
|
||||||
|
#include "render_core/font_material.h"
|
||||||
|
#include "render_core/mesh.h"
|
||||||
#include "render_objects/camera_2d.h"
|
#include "render_objects/camera_2d.h"
|
||||||
|
|
||||||
void MeshInstance2D::render() {
|
Color Text2D::get_text_color() const {
|
||||||
if (!mesh) {
|
return _text_color;
|
||||||
|
}
|
||||||
|
void Text2D::set_text_color(const Color &p_color) {
|
||||||
|
_text_color = p_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
String Text2D::get_text() const {
|
||||||
|
return _text;
|
||||||
|
}
|
||||||
|
void Text2D::set_text(const String &p_text) {
|
||||||
|
_text = p_text;
|
||||||
|
}
|
||||||
|
|
||||||
|
Ref<Font> Text2D::get_font() const {
|
||||||
|
return _font;
|
||||||
|
}
|
||||||
|
void Text2D::set_font(const Ref<Font> &p_font) {
|
||||||
|
_font = p_font;
|
||||||
|
|
||||||
|
if (_font.is_valid()) {
|
||||||
|
_material->texture = _font->get_texture();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Vector2 Text2D::get_text_size() {
|
||||||
|
return _text_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Text2D::update() {
|
||||||
|
_mesh->clear();
|
||||||
|
|
||||||
|
if (!_font.is_valid()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_text_size = _font->generate_mesh(_text, _mesh, _text_color);
|
||||||
|
|
||||||
|
_mesh->upload();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Text2D::render() {
|
||||||
Transform2D mat_orig = Camera2D::current_camera->get_model_view_matrix();
|
Transform2D mat_orig = Camera2D::current_camera->get_model_view_matrix();
|
||||||
|
|
||||||
Camera2D::current_camera->set_model_view_matrix(mat_orig * transform);
|
Camera2D::current_camera->set_model_view_matrix(mat_orig * transform);
|
||||||
|
|
||||||
if (material) {
|
_material->bind();
|
||||||
material->bind();
|
_mesh->render();
|
||||||
}
|
|
||||||
|
|
||||||
mesh->render();
|
|
||||||
|
|
||||||
for (int i = 0; i < children.size(); ++i) {
|
|
||||||
MeshInstance2D *c = children[i];
|
|
||||||
|
|
||||||
if (c) {
|
|
||||||
c->render();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Camera2D::current_camera->set_model_view_matrix(mat_orig);
|
Camera2D::current_camera->set_model_view_matrix(mat_orig);
|
||||||
}
|
}
|
||||||
|
|
||||||
MeshInstance2D::MeshInstance2D() {
|
Text2D::Text2D() {
|
||||||
material = NULL;
|
_material.instance();
|
||||||
mesh = NULL;
|
_mesh.instance();
|
||||||
|
_mesh->vertex_dimesions = 2;
|
||||||
}
|
}
|
||||||
MeshInstance2D::~MeshInstance2D() {
|
Text2D::~Text2D() {
|
||||||
children.clear();
|
|
||||||
}
|
}
|
||||||
|
@ -1,26 +1,44 @@
|
|||||||
#ifndef MESH_INSTACE_2D_H
|
#ifndef TEXT_2D_H
|
||||||
#define MESH_INSTACE_2D_H
|
#define TEXT_2D_H
|
||||||
|
|
||||||
#include "core/vector.h"
|
#include "core/color.h"
|
||||||
|
#include "core/ustring.h"
|
||||||
|
#include "core/vector2.h"
|
||||||
|
|
||||||
#include "render_core/material.h"
|
#include "object/reference.h"
|
||||||
#include "render_core/mesh.h"
|
|
||||||
|
|
||||||
#include "core/transform.h"
|
#include "object_2d.h"
|
||||||
|
|
||||||
class MeshInstance2D {
|
class Font;
|
||||||
|
class FontMaterial;
|
||||||
|
class Mesh;
|
||||||
|
|
||||||
|
class Text2D : public Object2D {
|
||||||
public:
|
public:
|
||||||
|
Color get_text_color() const;
|
||||||
|
void set_text_color(const Color &p_color);
|
||||||
|
|
||||||
|
String get_text() const;
|
||||||
|
void set_text(const String &p_text);
|
||||||
|
|
||||||
|
Ref<Font> get_font() const;
|
||||||
|
void set_font(const Ref<Font> &p_font);
|
||||||
|
|
||||||
|
Vector2 get_text_size();
|
||||||
|
|
||||||
|
void update();
|
||||||
void render();
|
void render();
|
||||||
|
|
||||||
MeshInstance2D();
|
Text2D();
|
||||||
~MeshInstance2D();
|
~Text2D();
|
||||||
|
|
||||||
Material *material;
|
protected:
|
||||||
Mesh *mesh;
|
Ref<Font> _font;
|
||||||
|
Ref<FontMaterial> _material;
|
||||||
Transform2D transform;
|
Ref<Mesh> _mesh;
|
||||||
|
String _text;
|
||||||
Vector<MeshInstance2D *> children;
|
Color _text_color;
|
||||||
|
Vector2 _text_size;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // MESH_INSTACE_H
|
#endif // MESH_INSTACE_H
|
||||||
|
Loading…
Reference in New Issue
Block a user