Glyph rendering working (test code; needs refactoring).
This commit is contained in:
parent
4923eb1ab8
commit
858ce9f7b1
@ -3,10 +3,18 @@ module jes.gui;
|
|||||||
static import jtk;
|
static import jtk;
|
||||||
import derelict.opengl;
|
import derelict.opengl;
|
||||||
import std.stdio;
|
import std.stdio;
|
||||||
|
import jes.gui.font;
|
||||||
|
|
||||||
class Gui
|
class Gui
|
||||||
{
|
{
|
||||||
jtk.Window[] m_windows;
|
jtk.Window[] m_windows;
|
||||||
|
gltk.Program m_text_program;
|
||||||
|
GLint m_viewport_size;
|
||||||
|
GLint m_texture;
|
||||||
|
GLint m_color;
|
||||||
|
GLint m_position;
|
||||||
|
int width;
|
||||||
|
int height;
|
||||||
|
|
||||||
this()
|
this()
|
||||||
{
|
{
|
||||||
@ -30,6 +38,31 @@ class Gui
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void load()
|
||||||
|
{
|
||||||
|
static bool loaded = false;
|
||||||
|
if (!loaded)
|
||||||
|
{
|
||||||
|
auto v_shader = new gltk.Shader(GL_VERTEX_SHADER);
|
||||||
|
v_shader.set_source_from_file("share/jes/shaders/text.v.glsl");
|
||||||
|
auto f_shader = new gltk.Shader(GL_FRAGMENT_SHADER);
|
||||||
|
f_shader.set_source_from_file("share/jes/shaders/text.f.glsl");
|
||||||
|
m_text_program = new gltk.Program();
|
||||||
|
m_text_program.attach_shader(v_shader);
|
||||||
|
m_text_program.attach_shader(f_shader);
|
||||||
|
glBindAttribLocation(m_text_program.id, 0, "coords");
|
||||||
|
m_text_program.link();
|
||||||
|
m_viewport_size = m_text_program.get_uniform_location("viewport_size");
|
||||||
|
m_texture = m_text_program.get_uniform_location("texture");
|
||||||
|
m_color = m_text_program.get_uniform_location("color");
|
||||||
|
m_position = m_text_program.get_uniform_location("position");
|
||||||
|
glActiveTexture(GL_TEXTURE0);
|
||||||
|
glEnable(GL_BLEND);
|
||||||
|
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||||
|
loaded = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void event_loop()
|
private void event_loop()
|
||||||
{
|
{
|
||||||
bool running = true;
|
bool running = true;
|
||||||
@ -43,6 +76,9 @@ class Gui
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case jtk.Event.WINDOW_RESIZE:
|
case jtk.Event.WINDOW_RESIZE:
|
||||||
|
load();
|
||||||
|
width = event.window_resize.width;
|
||||||
|
height = event.window_resize.height;
|
||||||
glViewport(0, 0, event.window_resize.width, event.window_resize.height);
|
glViewport(0, 0, event.window_resize.width, event.window_resize.height);
|
||||||
redraw_window(event.window_resize.window);
|
redraw_window(event.window_resize.window);
|
||||||
break;
|
break;
|
||||||
@ -57,6 +93,14 @@ class Gui
|
|||||||
{
|
{
|
||||||
glClearColor(0.5, 0.0, 1.0, 0.0);
|
glClearColor(0.5, 0.0, 1.0, 0.0);
|
||||||
glClear(GL_COLOR_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT);
|
||||||
|
auto font = new Font("share/jes/fonts/freefont-ttf-20120503/FreeMono.ttf", 20);
|
||||||
|
auto glyph = font.get_glyph('h');
|
||||||
|
m_text_program.use();
|
||||||
|
glUniform2i(m_viewport_size, width, height);
|
||||||
|
glUniform1i(m_texture, 0);
|
||||||
|
glUniform4f(m_color, 1.0, 1.0, 1.0, 1.0);
|
||||||
|
glUniform2i(m_position, 10, 10);
|
||||||
|
glyph.render();
|
||||||
m_windows[0].swap_buffers();
|
m_windows[0].swap_buffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user