draw overlay hover bar
This commit is contained in:
parent
3e178b4d97
commit
24ee6b011e
18
assets/fs/shaders/overlay_hover.f.glsl
Normal file
18
assets/fs/shaders/overlay_hover.f.glsl
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
|
||||||
|
varying vec3 pos_i;
|
||||||
|
|
||||||
|
const vec4 red = vec4(1, 0, 0, 1);
|
||||||
|
const vec4 yellow = vec4(1, 1, 0, 1);
|
||||||
|
const vec4 green = vec4(0, 1, 0, 1);
|
||||||
|
|
||||||
|
void main(void)
|
||||||
|
{
|
||||||
|
if (pos_i.x < 0)
|
||||||
|
{
|
||||||
|
gl_FragColor = mix(red, yellow, pos_i.x + 1);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gl_FragColor = mix(yellow, green, pos_i.x);
|
||||||
|
}
|
||||||
|
}
|
@ -42,6 +42,12 @@ static const struct
|
|||||||
{{-0.5, -0.5, 0.0}, {0.0, 0.0}},
|
{{-0.5, -0.5, 0.0}, {0.0, 0.0}},
|
||||||
{{0.5, -0.5, 0.0}, {1.0, 0.0}}
|
{{0.5, -0.5, 0.0}, {1.0, 0.0}}
|
||||||
};
|
};
|
||||||
|
static const float quad_attributes[][3] = {
|
||||||
|
{0.5, 0.5, 0.0},
|
||||||
|
{-0.5, 0.5, 0.0},
|
||||||
|
{-0.5, -0.5, 0.0},
|
||||||
|
{0.5, -0.5, 0.0}
|
||||||
|
};
|
||||||
|
|
||||||
static bool load_file(const char *fname, WFObj::Buffer & buff)
|
static bool load_file(const char *fname, WFObj::Buffer & buff)
|
||||||
{
|
{
|
||||||
@ -136,8 +142,10 @@ bool Client::initgl()
|
|||||||
(const char *) CFS.get_file("shaders/lava.v.glsl", NULL);
|
(const char *) CFS.get_file("shaders/lava.v.glsl", NULL);
|
||||||
const char *lava_f_source =
|
const char *lava_f_source =
|
||||||
(const char *) CFS.get_file("shaders/lava.f.glsl", NULL);
|
(const char *) CFS.get_file("shaders/lava.f.glsl", NULL);
|
||||||
|
const char *overlay_hover_f_source =
|
||||||
|
(const char *) CFS.get_file("shaders/overlay_hover.f.glsl", NULL);
|
||||||
if (obj_v_source == NULL || obj_f_source == NULL ||
|
if (obj_v_source == NULL || obj_f_source == NULL ||
|
||||||
overlay_f_source == NULL ||
|
overlay_f_source == NULL || overlay_hover_f_source == NULL ||
|
||||||
sky_v_source == NULL || sky_f_source == NULL ||
|
sky_v_source == NULL || sky_f_source == NULL ||
|
||||||
lava_v_source == NULL || lava_f_source == NULL)
|
lava_v_source == NULL || lava_f_source == NULL)
|
||||||
{
|
{
|
||||||
@ -158,6 +166,13 @@ bool Client::initgl()
|
|||||||
cerr << "Error creating overlay program" << endl;
|
cerr << "Error creating overlay program" << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!m_overlay_hover_program.create(obj_v_source, overlay_hover_f_source,
|
||||||
|
obj_attrib_bindings, LEN(obj_attrib_bindings),
|
||||||
|
sky_uniforms, LEN(sky_uniforms)))
|
||||||
|
{
|
||||||
|
cerr << "Error creating overlay hover program" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!m_sky_program.create(sky_v_source, sky_f_source,
|
if (!m_sky_program.create(sky_v_source, sky_f_source,
|
||||||
sky_attrib_bindings, LEN(sky_attrib_bindings),
|
sky_attrib_bindings, LEN(sky_attrib_bindings),
|
||||||
sky_uniforms, LEN(sky_uniforms)))
|
sky_uniforms, LEN(sky_uniforms)))
|
||||||
@ -197,7 +212,13 @@ bool Client::initgl()
|
|||||||
if (!m_tex_quad_attributes.create(GL_ARRAY_BUFFER, GL_STATIC_DRAW,
|
if (!m_tex_quad_attributes.create(GL_ARRAY_BUFFER, GL_STATIC_DRAW,
|
||||||
tex_quad_attributes, sizeof(tex_quad_attributes)))
|
tex_quad_attributes, sizeof(tex_quad_attributes)))
|
||||||
{
|
{
|
||||||
cerr << "Error creating tex quad attribute buffer" << endl;
|
cerr << "Error creating tex quad attributes buffer" << endl;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!m_quad_attributes.create(GL_ARRAY_BUFFER, GL_STATIC_DRAW,
|
||||||
|
quad_attributes, sizeof(quad_attributes)))
|
||||||
|
{
|
||||||
|
cerr << "Error creating quad attributes buffer" << endl;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
vector<GLfloat> sky_attributes((NUM_SKY_STEPS + 1) * 2 * (3 * 3));
|
vector<GLfloat> sky_attributes((NUM_SKY_STEPS + 1) * 2 * (3 * 3));
|
||||||
@ -386,6 +407,7 @@ void Client::draw_map()
|
|||||||
|
|
||||||
void Client::draw_overlay()
|
void Client::draw_overlay()
|
||||||
{
|
{
|
||||||
|
/* draw overlay map */
|
||||||
int overlay_size = (int)(m_width * 0.15);
|
int overlay_size = (int)(m_width * 0.15);
|
||||||
glViewport(m_width - overlay_size - 50, m_height - overlay_size - 50,
|
glViewport(m_width - overlay_size - 50, m_height - overlay_size - 50,
|
||||||
overlay_size, overlay_size);
|
overlay_size, overlay_size);
|
||||||
@ -441,9 +463,37 @@ void Client::draw_overlay()
|
|||||||
glPointSize(3);
|
glPointSize(3);
|
||||||
glDrawArrays(GL_POINTS, 0, 1);
|
glDrawArrays(GL_POINTS, 0, 1);
|
||||||
|
|
||||||
|
/* draw hover bar */
|
||||||
|
glViewport(m_width - 200, 100, 150, 25);
|
||||||
|
m_overlay_hover_program.use();
|
||||||
|
m_quad_attributes.bind();
|
||||||
|
glEnableVertexAttribArray(0);
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
|
||||||
|
GLMatrix::Identity.to_uniform(
|
||||||
|
m_overlay_hover_program.uniform("projection"));
|
||||||
|
modelview.load_identity();
|
||||||
|
modelview.translate(m_player->hover - 1, 0, 0);
|
||||||
|
modelview.scale(m_player->hover * 2, 2.0, 1.0);
|
||||||
|
modelview.to_uniform(m_overlay_hover_program.uniform("modelview"));
|
||||||
|
glDrawArrays(GL_TRIANGLE_FAN, 0, 4);
|
||||||
|
|
||||||
|
/* draw hover bar border */
|
||||||
|
glViewport(0, 0, m_width, m_height);
|
||||||
|
m_overlay_program.use();
|
||||||
|
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(GLfloat), NULL);
|
||||||
|
GLMatrix::Identity.to_uniform(m_overlay_program.uniform("projection"));
|
||||||
|
modelview.load_identity();
|
||||||
|
modelview.ortho(0, m_width, 0, m_height, -1, 1);
|
||||||
|
modelview.translate(m_width - 200 + 150 / 2, 100 + 25 / 2, 0);
|
||||||
|
modelview.scale(150.1, 25.1, 1);
|
||||||
|
modelview.to_uniform(m_overlay_program.uniform("modelview"));
|
||||||
|
glUniform4f(m_overlay_program.uniform("color"), 1, 1, 1, 1);
|
||||||
|
glDrawArrays(GL_LINE_LOOP, 0, 4);
|
||||||
|
glDisableVertexAttribArray(0);
|
||||||
|
|
||||||
|
/* reset GL to normal state */
|
||||||
glEnable(GL_DEPTH_TEST);
|
glEnable(GL_DEPTH_TEST);
|
||||||
glDisable(GL_BLEND);
|
glDisable(GL_BLEND);
|
||||||
glViewport(0, 0, m_width, m_height);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Client::draw_sky()
|
void Client::draw_sky()
|
||||||
|
@ -39,6 +39,7 @@ class Client
|
|||||||
int m_height;
|
int m_height;
|
||||||
GLProgram m_obj_program;
|
GLProgram m_obj_program;
|
||||||
GLProgram m_overlay_program;
|
GLProgram m_overlay_program;
|
||||||
|
GLProgram m_overlay_hover_program;
|
||||||
GLProgram m_sky_program;
|
GLProgram m_sky_program;
|
||||||
GLProgram m_lava_program;
|
GLProgram m_lava_program;
|
||||||
WFObj m_tank_obj;
|
WFObj m_tank_obj;
|
||||||
@ -49,6 +50,7 @@ class Client
|
|||||||
GLBuffer m_overlay_hex_indices;
|
GLBuffer m_overlay_hex_indices;
|
||||||
GLBuffer m_sky_attributes;
|
GLBuffer m_sky_attributes;
|
||||||
GLBuffer m_tex_quad_attributes;
|
GLBuffer m_tex_quad_attributes;
|
||||||
|
GLBuffer m_quad_attributes;
|
||||||
refptr<Network> m_net_client;
|
refptr<Network> m_net_client;
|
||||||
bool client_has_focus;
|
bool client_has_focus;
|
||||||
sf::Texture m_lava_texture;
|
sf::Texture m_lava_texture;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user