geometry shaders, map poi icons

This commit is contained in:
milek7
2019-03-17 20:30:25 +01:00
parent 3091e13433
commit 4383b0c7e0
16 changed files with 193 additions and 46 deletions

View File

@@ -63,6 +63,7 @@ void gl::glsl_common_setup()
{
mat4 projection;
mat4 lightview;
vec3 scene_extra;
float time;
};

View File

@@ -228,6 +228,8 @@ gl::shader::shader(const std::string &filename)
type = GL_VERTEX_SHADER;
else if (strcend(filename, ".frag"))
type = GL_FRAGMENT_SHADER;
else if (strcend(filename, ".geom"))
type = GL_GEOMETRY_SHADER;
else
throw shader_exception("unknown shader " + filename);

View File

@@ -37,8 +37,8 @@ namespace gl
{
glm::mat4 projection;
glm::mat4 lightview;
glm::vec3 scene_extra;
float time;
UBS_PAD(12);
};
static_assert(sizeof(scene_ubs) == 144, "bad size of ubs");

View File

@@ -1,6 +1,6 @@
/*
OpenGL, OpenGL ES loader generated by glad 0.1.28 on Mon Oct 15 19:49:56 2018.
OpenGL, OpenGL ES loader generated by glad 0.1.29 on -.
Language/Generator: C/C++
Specification: gl
@@ -26,6 +26,7 @@
GL_EXT_clip_control,
GL_EXT_color_buffer_float,
GL_EXT_color_buffer_half_float,
GL_EXT_geometry_shader,
GL_EXT_sRGB,
GL_EXT_texture_compression_s3tc,
GL_EXT_texture_compression_s3tc_srgb,
@@ -40,12 +41,12 @@
Loader: False
Local files: False
Omit khrplatform: True
Reproducible: False
Reproducible: True
Commandline:
--profile="core" --api="gl=3.3,gles2=3.1" --generator="c" --spec="gl" --no-loader --omit-khrplatform --extensions="GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_ARB_clip_control,GL_ARB_direct_state_access,GL_ARB_multi_bind,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_EXT_clip_control,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_sRGB,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_sRGB,GL_GREMEDY_string_marker,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_vertex_half_float"
--profile="core" --api="gl=3.3,gles2=3.1" --generator="c" --spec="gl" --no-loader --omit-khrplatform --extensions="GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_ARB_clip_control,GL_ARB_direct_state_access,GL_ARB_multi_bind,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_EXT_clip_control,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_geometry_shader,GL_EXT_sRGB,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_sRGB,GL_GREMEDY_string_marker,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_vertex_half_float"
Online:
http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.1&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_framebuffer_blit&extensions=GL_ANGLE_framebuffer_multisample&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_pack_reverse_row_order&extensions=GL_ANGLE_program_binary&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ANGLE_texture_usage&extensions=GL_ANGLE_translated_shader_source&extensions=GL_ARB_clip_control&extensions=GL_ARB_direct_state_access&extensions=GL_ARB_multi_bind&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_texture_storage&extensions=GL_ARB_texture_storage_multisample&extensions=GL_EXT_clip_control&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_color_buffer_half_float&extensions=GL_EXT_sRGB&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_compression_s3tc_srgb&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_sRGB&extensions=GL_GREMEDY_string_marker&extensions=GL_OES_texture_float&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_half_float
https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.1&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_framebuffer_blit&extensions=GL_ANGLE_framebuffer_multisample&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_pack_reverse_row_order&extensions=GL_ANGLE_program_binary&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ANGLE_texture_usage&extensions=GL_ANGLE_translated_shader_source&extensions=GL_ARB_clip_control&extensions=GL_ARB_direct_state_access&extensions=GL_ARB_multi_bind&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_texture_storage&extensions=GL_ARB_texture_storage_multisample&extensions=GL_EXT_clip_control&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_color_buffer_half_float&extensions=GL_EXT_geometry_shader&extensions=GL_EXT_sRGB&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_compression_s3tc_srgb&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_sRGB&extensions=GL_GREMEDY_string_marker&extensions=GL_OES_texture_float&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_half_float
*/
@@ -2745,6 +2746,39 @@ GLAPI PFNGLVERTEXBINDINGDIVISORPROC glad_glVertexBindingDivisor;
#define GL_R16F_EXT 0x822D
#define GL_FRAMEBUFFER_ATTACHMENT_COMPONENT_TYPE_EXT 0x8211
#define GL_UNSIGNED_NORMALIZED_EXT 0x8C17
#define GL_GEOMETRY_SHADER_EXT 0x8DD9
#define GL_GEOMETRY_SHADER_BIT_EXT 0x00000004
#define GL_GEOMETRY_LINKED_VERTICES_OUT_EXT 0x8916
#define GL_GEOMETRY_LINKED_INPUT_TYPE_EXT 0x8917
#define GL_GEOMETRY_LINKED_OUTPUT_TYPE_EXT 0x8918
#define GL_GEOMETRY_SHADER_INVOCATIONS_EXT 0x887F
#define GL_LAYER_PROVOKING_VERTEX_EXT 0x825E
#define GL_LINES_ADJACENCY_EXT 0x000A
#define GL_LINE_STRIP_ADJACENCY_EXT 0x000B
#define GL_TRIANGLES_ADJACENCY_EXT 0x000C
#define GL_TRIANGLE_STRIP_ADJACENCY_EXT 0x000D
#define GL_MAX_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8DDF
#define GL_MAX_GEOMETRY_UNIFORM_BLOCKS_EXT 0x8A2C
#define GL_MAX_COMBINED_GEOMETRY_UNIFORM_COMPONENTS_EXT 0x8A32
#define GL_MAX_GEOMETRY_INPUT_COMPONENTS_EXT 0x9123
#define GL_MAX_GEOMETRY_OUTPUT_COMPONENTS_EXT 0x9124
#define GL_MAX_GEOMETRY_OUTPUT_VERTICES_EXT 0x8DE0
#define GL_MAX_GEOMETRY_TOTAL_OUTPUT_COMPONENTS_EXT 0x8DE1
#define GL_MAX_GEOMETRY_SHADER_INVOCATIONS_EXT 0x8E5A
#define GL_MAX_GEOMETRY_TEXTURE_IMAGE_UNITS_EXT 0x8C29
#define GL_MAX_GEOMETRY_ATOMIC_COUNTER_BUFFERS_EXT 0x92CF
#define GL_MAX_GEOMETRY_ATOMIC_COUNTERS_EXT 0x92D5
#define GL_MAX_GEOMETRY_IMAGE_UNIFORMS_EXT 0x90CD
#define GL_MAX_GEOMETRY_SHADER_STORAGE_BLOCKS_EXT 0x90D7
#define GL_FIRST_VERTEX_CONVENTION_EXT 0x8E4D
#define GL_LAST_VERTEX_CONVENTION_EXT 0x8E4E
#define GL_UNDEFINED_VERTEX_EXT 0x8260
#define GL_PRIMITIVES_GENERATED_EXT 0x8C87
#define GL_FRAMEBUFFER_DEFAULT_LAYERS_EXT 0x9312
#define GL_MAX_FRAMEBUFFER_LAYERS_EXT 0x9317
#define GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS_EXT 0x8DA8
#define GL_FRAMEBUFFER_ATTACHMENT_LAYERED_EXT 0x8DA7
#define GL_REFERENCED_BY_GEOMETRY_SHADER_EXT 0x9309
#define GL_FRAMEBUFFER_ATTACHMENT_COLOR_ENCODING_EXT 0x8210
#define GL_HALF_FLOAT_OES 0x8D61
#ifndef GL_ARB_clip_control
@@ -3181,6 +3215,13 @@ GLAPI int GLAD_GL_EXT_color_buffer_float;
#define GL_EXT_color_buffer_half_float 1
GLAPI int GLAD_GL_EXT_color_buffer_half_float;
#endif
#ifndef GL_EXT_geometry_shader
#define GL_EXT_geometry_shader 1
GLAPI int GLAD_GL_EXT_geometry_shader;
typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTUREEXTPROC)(GLenum target, GLenum attachment, GLuint texture, GLint level);
GLAPI PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT;
#define glFramebufferTextureEXT glad_glFramebufferTextureEXT
#endif
#ifndef GL_EXT_sRGB
#define GL_EXT_sRGB 1
GLAPI int GLAD_GL_EXT_sRGB;

View File

@@ -1,6 +1,6 @@
/*
OpenGL, OpenGL ES loader generated by glad 0.1.28 on Mon Oct 15 19:49:56 2018.
OpenGL, OpenGL ES loader generated by glad 0.1.29 on -.
Language/Generator: C/C++
Specification: gl
@@ -26,6 +26,7 @@
GL_EXT_clip_control,
GL_EXT_color_buffer_float,
GL_EXT_color_buffer_half_float,
GL_EXT_geometry_shader,
GL_EXT_sRGB,
GL_EXT_texture_compression_s3tc,
GL_EXT_texture_compression_s3tc_srgb,
@@ -40,12 +41,12 @@
Loader: False
Local files: False
Omit khrplatform: True
Reproducible: False
Reproducible: True
Commandline:
--profile="core" --api="gl=3.3,gles2=3.1" --generator="c" --spec="gl" --no-loader --omit-khrplatform --extensions="GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_ARB_clip_control,GL_ARB_direct_state_access,GL_ARB_multi_bind,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_EXT_clip_control,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_sRGB,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_sRGB,GL_GREMEDY_string_marker,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_vertex_half_float"
--profile="core" --api="gl=3.3,gles2=3.1" --generator="c" --spec="gl" --no-loader --omit-khrplatform --extensions="GL_ANGLE_depth_texture,GL_ANGLE_framebuffer_blit,GL_ANGLE_framebuffer_multisample,GL_ANGLE_instanced_arrays,GL_ANGLE_pack_reverse_row_order,GL_ANGLE_program_binary,GL_ANGLE_texture_compression_dxt3,GL_ANGLE_texture_compression_dxt5,GL_ANGLE_texture_usage,GL_ANGLE_translated_shader_source,GL_ARB_clip_control,GL_ARB_direct_state_access,GL_ARB_multi_bind,GL_ARB_texture_filter_anisotropic,GL_ARB_texture_storage,GL_ARB_texture_storage_multisample,GL_EXT_clip_control,GL_EXT_color_buffer_float,GL_EXT_color_buffer_half_float,GL_EXT_geometry_shader,GL_EXT_sRGB,GL_EXT_texture_compression_s3tc,GL_EXT_texture_compression_s3tc_srgb,GL_EXT_texture_filter_anisotropic,GL_EXT_texture_sRGB,GL_GREMEDY_string_marker,GL_OES_texture_float,GL_OES_texture_float_linear,GL_OES_texture_half_float,GL_OES_texture_half_float_linear,GL_OES_vertex_half_float"
Online:
http://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.1&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_framebuffer_blit&extensions=GL_ANGLE_framebuffer_multisample&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_pack_reverse_row_order&extensions=GL_ANGLE_program_binary&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ANGLE_texture_usage&extensions=GL_ANGLE_translated_shader_source&extensions=GL_ARB_clip_control&extensions=GL_ARB_direct_state_access&extensions=GL_ARB_multi_bind&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_texture_storage&extensions=GL_ARB_texture_storage_multisample&extensions=GL_EXT_clip_control&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_color_buffer_half_float&extensions=GL_EXT_sRGB&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_compression_s3tc_srgb&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_sRGB&extensions=GL_GREMEDY_string_marker&extensions=GL_OES_texture_float&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_half_float
https://glad.dav1d.de/#profile=core&language=c&specification=gl&api=gl%3D3.3&api=gles2%3D3.1&extensions=GL_ANGLE_depth_texture&extensions=GL_ANGLE_framebuffer_blit&extensions=GL_ANGLE_framebuffer_multisample&extensions=GL_ANGLE_instanced_arrays&extensions=GL_ANGLE_pack_reverse_row_order&extensions=GL_ANGLE_program_binary&extensions=GL_ANGLE_texture_compression_dxt3&extensions=GL_ANGLE_texture_compression_dxt5&extensions=GL_ANGLE_texture_usage&extensions=GL_ANGLE_translated_shader_source&extensions=GL_ARB_clip_control&extensions=GL_ARB_direct_state_access&extensions=GL_ARB_multi_bind&extensions=GL_ARB_texture_filter_anisotropic&extensions=GL_ARB_texture_storage&extensions=GL_ARB_texture_storage_multisample&extensions=GL_EXT_clip_control&extensions=GL_EXT_color_buffer_float&extensions=GL_EXT_color_buffer_half_float&extensions=GL_EXT_geometry_shader&extensions=GL_EXT_sRGB&extensions=GL_EXT_texture_compression_s3tc&extensions=GL_EXT_texture_compression_s3tc_srgb&extensions=GL_EXT_texture_filter_anisotropic&extensions=GL_EXT_texture_sRGB&extensions=GL_GREMEDY_string_marker&extensions=GL_OES_texture_float&extensions=GL_OES_texture_float_linear&extensions=GL_OES_texture_half_float&extensions=GL_OES_texture_half_float_linear&extensions=GL_OES_vertex_half_float
*/
#include <stdio.h>
@@ -78,11 +79,7 @@ static int get_exts(void) {
num_exts_i = 0;
glGetIntegerv(GL_NUM_EXTENSIONS, &num_exts_i);
if (num_exts_i > 0) {
char **tmp_exts_i = (char **)realloc((void *)exts_i, (size_t)num_exts_i * (sizeof *exts_i));
if (tmp_exts_i == NULL) {
return 0;
}
exts_i = tmp_exts_i;
exts_i = (char **)malloc((size_t)num_exts_i * (sizeof *exts_i));
}
if (exts_i == NULL) {
@@ -646,6 +643,7 @@ int GLAD_GL_ARB_texture_storage_multisample = 0;
int GLAD_GL_EXT_clip_control = 0;
int GLAD_GL_EXT_color_buffer_float = 0;
int GLAD_GL_EXT_color_buffer_half_float = 0;
int GLAD_GL_EXT_geometry_shader = 0;
int GLAD_GL_EXT_sRGB = 0;
int GLAD_GL_EXT_texture_compression_s3tc = 0;
int GLAD_GL_EXT_texture_compression_s3tc_srgb = 0;
@@ -771,6 +769,7 @@ PFNGLDRAWELEMENTSINSTANCEDANGLEPROC glad_glDrawElementsInstancedANGLE = NULL;
PFNGLVERTEXATTRIBDIVISORANGLEPROC glad_glVertexAttribDivisorANGLE = NULL;
PFNGLGETTRANSLATEDSHADERSOURCEANGLEPROC glad_glGetTranslatedShaderSourceANGLE = NULL;
PFNGLCLIPCONTROLEXTPROC glad_glClipControlEXT = NULL;
PFNGLFRAMEBUFFERTEXTUREEXTPROC glad_glFramebufferTextureEXT = NULL;
static void load_GL_VERSION_1_0(GLADloadproc load) {
if(!GLAD_GL_VERSION_1_0) return;
glad_glCullFace = (PFNGLCULLFACEPROC)load("glCullFace");
@@ -1756,6 +1755,10 @@ static void load_GL_EXT_clip_control(GLADloadproc load) {
if(!GLAD_GL_EXT_clip_control) return;
glad_glClipControlEXT = (PFNGLCLIPCONTROLEXTPROC)load("glClipControlEXT");
}
static void load_GL_EXT_geometry_shader(GLADloadproc load) {
if(!GLAD_GL_EXT_geometry_shader) return;
glad_glFramebufferTextureEXT = (PFNGLFRAMEBUFFERTEXTUREEXTPROC)load("glFramebufferTextureEXT");
}
static int find_extensionsGLES2(void) {
if (!get_exts()) return 0;
GLAD_GL_ANGLE_depth_texture = has_ext("GL_ANGLE_depth_texture");
@@ -1771,6 +1774,7 @@ static int find_extensionsGLES2(void) {
GLAD_GL_EXT_clip_control = has_ext("GL_EXT_clip_control");
GLAD_GL_EXT_color_buffer_float = has_ext("GL_EXT_color_buffer_float");
GLAD_GL_EXT_color_buffer_half_float = has_ext("GL_EXT_color_buffer_half_float");
GLAD_GL_EXT_geometry_shader = has_ext("GL_EXT_geometry_shader");
GLAD_GL_EXT_sRGB = has_ext("GL_EXT_sRGB");
GLAD_GL_EXT_texture_compression_s3tc = has_ext("GL_EXT_texture_compression_s3tc");
GLAD_GL_EXT_texture_compression_s3tc_srgb = has_ext("GL_EXT_texture_compression_s3tc_srgb");
@@ -1845,6 +1849,7 @@ int gladLoadGLES2Loader(GLADloadproc load) {
load_GL_ANGLE_instanced_arrays(load);
load_GL_ANGLE_translated_shader_source(load);
load_GL_EXT_clip_control(load);
load_GL_EXT_geometry_shader(load);
return GLVersion.major != 0 || GLVersion.minor != 0;
}

View File

@@ -1718,7 +1718,7 @@ void basic_region::update_poi_geometry()
{
std::vector<gfx::basic_vertex> vertices;
for (const auto sem : map::Objects.entries)
vertices.push_back(gfx::basic_vertex(sem->location, glm::vec3(), glm::vec3()));
vertices.push_back(std::move(sem->vertex()));
if (!m_map_poipoints) {
gfx::geometrybank_handle poibank = GfxRenderer.Create_Bank();

View File

@@ -89,13 +89,20 @@ node_groups::update_map()
if (!launcher || !launcher->Event1 || !launcher->Event2)
continue;
auto track_switch = std::make_shared<map::track_switch>();
map::Objects.entries.push_back(track_switch);
auto map_launcher = std::make_shared<map::launcher>();
map::Objects.entries.push_back(map_launcher);
track_switch->location = node->location();
track_switch->name = node->name();
track_switch->straight_event = launcher->Event1;
track_switch->divert_event = launcher->Event2;
map_launcher->location = node->location();
map_launcher->name = node->name();
map_launcher->first_event = launcher->Event1;
map_launcher->second_event = launcher->Event2;
if (map_launcher->name.empty())
map_launcher->name = launcher->Event1->name();
if (launcher->Event1->name().find_first_of("-+:") != std::string::npos)
map_launcher->type = map::launcher::track_switch;
else
map_launcher->type = map::launcher::level_crossing;
}
}
}

View File

@@ -1,4 +1,7 @@
layout(location = 0) in vec3 v_vert;
layout(location = 2) in vec2 v_coords;
out vec2 g_coords;
#include <common>
@@ -7,4 +10,5 @@ void main()
vec4 clip_pos = projection * vec4(v_vert, 1.0f);
gl_Position = vec4(clip_pos.xz, 0.5, 1.0);
g_coords = v_coords;
}

14
shaders/map_poi.frag Normal file
View File

@@ -0,0 +1,14 @@
in vec2 f_coords;
layout(location = 0) out vec4 out_color;
#texture (tex1, 0, sRGB_A)
uniform sampler2D tex1;
void main()
{
vec2 texcoord = f_coords;
vec4 color = texture(tex1, texcoord);
out_color = color;
}

30
shaders/map_poi.geom Normal file
View File

@@ -0,0 +1,30 @@
layout (points) in;
layout (triangle_strip, max_vertices = 4) out;
in vec2 g_coords[];
out vec2 f_coords;
#include <common>
void main() {
vec4 position = gl_in[0].gl_Position;
vec2 size = vec2(0.1) * scene_extra.xy;
gl_Position = position + vec4(-size.x, -size.y, 0.0, 0.0);
f_coords = vec2(g_coords[0].s, 0.0);
EmitVertex();
gl_Position = position + vec4( size.x, -size.y, 0.0, 0.0);
f_coords = vec2(g_coords[0].t, 0.0);
EmitVertex();
gl_Position = position + vec4(-size.x, size.y, 0.0, 0.0);
f_coords = vec2(g_coords[0].s, 1.0);
EmitVertex();
gl_Position = position + vec4( size.x, size.y, 0.0, 0.0);
f_coords = vec2(g_coords[0].t, 1.0);
EmitVertex();
EndPrimitive();
}

View File

@@ -107,6 +107,8 @@ init() {
"Straight |",
"Divert /",
"Open |",
"Close -",
"Insert obstacle:",
"Delete obstacle",
@@ -308,6 +310,8 @@ init() {
u8"Prosto |",
u8"W bok /",
u8"Otwórz |",
u8"Zamknij -",
u8"Wstaw przeszkodę:",
u8"Usuń przeszkodę",

View File

@@ -96,6 +96,8 @@ enum string {
map_straight,
map_divert,
map_open,
map_close,
map_obstacle_insert,
map_obstacle_remove,

View File

@@ -16,8 +16,11 @@ ui::map_panel::map_panel() : ui_panel(LOC_STR(ui_map), false)
gl::shader vert("map.vert");
gl::shader frag("map.frag");
gl::program *prog = new gl::program({vert, frag});
m_shader = std::unique_ptr<gl::program>(prog);
gl::shader poi_frag("map_poi.frag");
gl::shader poi_geom("map_poi.geom");
m_track_shader = std::unique_ptr<gl::program>(new gl::program({vert, frag}));
m_poi_shader = std::unique_ptr<gl::program>(new gl::program({vert, poi_frag, poi_geom}));
m_icon_atlas = GfxRenderer.Fetch_Texture("map_icons");
m_tex = std::make_unique<opengl_texture>();
m_tex->alloc_rendertarget(GL_RGB8, GL_RGB, fb_size, fb_size);
@@ -100,7 +103,7 @@ void ui::map_panel::render_map_texture(glm::mat4 transform, glm::vec2 surface_si
m_fb->bind();
}
m_shader->bind();
m_track_shader->bind();
glLineWidth(1.5f);
glViewport(0, 0, surface_size.x, surface_size.y);
@@ -117,7 +120,10 @@ void ui::map_panel::render_map_texture(glm::mat4 transform, glm::vec2 surface_si
scene_ubo->update(scene_ubs);
GfxRenderer.Draw_Geometry(m_switch_handles.begin(), m_switch_handles.end());
glPointSize(5.0f);
GfxRenderer.Bind_Texture(0, m_icon_atlas);
m_poi_shader->bind();
scene_ubs.scene_extra = glm::vec3(1.0f / (surface_size / 200.0f), 1.0f);
scene_ubs.time = 1.0f;
scene_ubo->update(scene_ubs);
GfxRenderer.Draw_Geometry(simulation::Region->get_map_poi_geometry());
@@ -126,7 +132,7 @@ void ui::map_panel::render_map_texture(glm::mat4 transform, glm::vec2 surface_si
m_fb->blit_from(m_msaa_fb.get(), surface_size.x, surface_size.y, GL_COLOR_BUFFER_BIT, GL_COLOR_ATTACHMENT0);
gl::framebuffer::unbind();
m_shader->unbind();
gl::program::unbind();
}
void ui::map_panel::render_labels(glm::mat4 transform, ImVec2 origin, glm::vec2 surface_size)
@@ -285,9 +291,9 @@ void ui::handle_map_object_click(ui_panel &parent, std::shared_ptr<map::map_obje
{
parent.register_popup(std::make_unique<semaphore_window>(parent, std::move(sem)));
}
else if (auto track = std::dynamic_pointer_cast<map::track_switch>(obj))
else if (auto track = std::dynamic_pointer_cast<map::launcher>(obj))
{
parent.register_popup(std::make_unique<switch_window>(parent, std::move(track)));
parent.register_popup(std::make_unique<launcher_window>(parent, std::move(track)));
}
else if (auto obstacle = std::dynamic_pointer_cast<map::obstacle>(obj))
{
@@ -411,21 +417,29 @@ void ui::semaphore_window::render_content()
}
}
ui::switch_window::switch_window(ui_panel &panel, std::shared_ptr<map::track_switch> &&sw) : popup(panel), m_switch(sw) {}
ui::launcher_window::launcher_window(ui_panel &panel, std::shared_ptr<map::launcher> &&sw) : popup(panel), m_switch(sw) {}
void ui::switch_window::render_content()
void ui::launcher_window::render_content()
{
ImGui::TextUnformatted(m_switch->name.c_str());
if (ImGui::Button(LOC_STR(map_straight)))
const std::string &open_label = locale::strings[
m_switch->type == map::launcher::track_switch
? locale::string::map_straight : locale::string::map_open];
const std::string &close_label = locale::strings[
m_switch->type == map::launcher::track_switch
? locale::string::map_divert : locale::string::map_close];
if (ImGui::Button(open_label.c_str()))
{
m_relay.post(user_command::queueevent, 0.0, 0.0, GLFW_PRESS, 0, glm::vec3(0.0f), &m_switch->straight_event->name());
m_relay.post(user_command::queueevent, 0.0, 0.0, GLFW_PRESS, 0, glm::vec3(0.0f), &m_switch->first_event->name());
ImGui::CloseCurrentPopup();
}
if (ImGui::Button(LOC_STR(map_divert)))
if (ImGui::Button(close_label.c_str()))
{
m_relay.post(user_command::queueevent, 0.0, 0.0, GLFW_PRESS, 0, glm::vec3(0.0f), &m_switch->divert_event->name());
m_relay.post(user_command::queueevent, 0.0, 0.0, GLFW_PRESS, 0, glm::vec3(0.0f), &m_switch->second_event->name());
ImGui::CloseCurrentPopup();
}
}
@@ -473,12 +487,13 @@ void ui::obstacle_insert_window::render_content()
obstacle->name = entry.first;
obstacle->location = m_position;
obstacle->model_name = name;
map::Objects.entries.push_back(std::move(obstacle));
std::vector<gfx::basic_vertex> vertices;
vertices.emplace_back((glm::vec3)m_position, glm::vec3(), glm::vec3());
vertices.emplace_back(std::move(obstacle->vertex()));
GfxRenderer.Append(vertices, simulation::Region->get_map_poi_geometry(), GL_POINTS);
map::Objects.entries.push_back(std::move(obstacle));
ImGui::CloseCurrentPopup();
}
}

View File

@@ -31,13 +31,13 @@ class semaphore_window : public popup
virtual void render_content() override;
};
class switch_window : public popup
class launcher_window : public popup
{
std::shared_ptr<map::track_switch> m_switch;
std::shared_ptr<map::launcher> m_switch;
command_relay m_relay;
public:
switch_window(ui_panel &panel, std::shared_ptr<map::track_switch> &&sw);
launcher_window(ui_panel &panel, std::shared_ptr<map::launcher> &&sw);
virtual void render_content() override;
};
@@ -67,9 +67,11 @@ class obstacle_remove_window : public popup
class map_panel : public ui_panel
{
std::unique_ptr<gl::program> m_shader;
std::unique_ptr<gl::program> m_track_shader;
std::unique_ptr<gl::program> m_poi_shader;
std::unique_ptr<gl::framebuffer> m_msaa_fb;
std::unique_ptr<gl::renderbuffer> m_msaa_rb;
texture_handle m_icon_atlas;
std::unique_ptr<gl::framebuffer> m_fb;
std::unique_ptr<opengl_texture> m_tex;

View File

@@ -13,6 +13,9 @@ struct map_object
glm::vec3 location;
virtual ~map_object() = default;
virtual gfx::basic_vertex vertex() {
return gfx::basic_vertex(location, glm::vec3(), glm::vec2(0.0f, 0.25f));
}
};
using object_list = std::vector<std::shared_ptr<map::map_object>>;
@@ -22,21 +25,38 @@ using sorted_object_list = std::map<float, std::shared_ptr<map::map_object>>;
struct semaphore : public map_object
{
std::vector<TAnimModel *> models;
std::vector<basic_event *> events;
virtual gfx::basic_vertex vertex() override {
return gfx::basic_vertex(location, glm::vec3(), glm::vec2(0.0f, 0.25f));
}
};
// switch description (only for minimap purposes)
struct track_switch : public map_object
// event launcher description (only for minimap purposes)
struct launcher : public map_object
{
basic_event *straight_event = nullptr;
basic_event *divert_event = nullptr;
basic_event *first_event = nullptr;
basic_event *second_event = nullptr;
enum type_e {
track_switch,
level_crossing
} type;
virtual gfx::basic_vertex vertex() {
return gfx::basic_vertex(location, glm::vec3(),
type == track_switch ? glm::vec2(0.25f, 0.5f) : glm::vec2(0.5f, 0.75f));
}
};
// training obstacle description
struct obstacle : public map_object
{
std::string model_name;
virtual gfx::basic_vertex vertex() {
return gfx::basic_vertex(location, glm::vec3(), glm::vec2(0.75f, 1.0f));
}
};
struct objects

View File

@@ -6,7 +6,7 @@
#include "Train.h"
ui::vehicleparams_panel::vehicleparams_panel(const std::string &vehicle)
: ui_panel(std::string(LOC_STR(vehicleparams_window)) + ": " + vehicle, false), m_vehicle_name(vehicle)
: ui_panel(std::string(locale::strings[locale::string::vehicleparams_window]) + ": " + vehicle, false), m_vehicle_name(vehicle)
{
}