Skip to content

Commit bf0640e

Browse files
committed
Fixed non-legacy renderer projection matrix being updated with inaccurate values when the viewport size changes.
1 parent 56a82eb commit bf0640e

File tree

1 file changed

+8
-3
lines changed

1 file changed

+8
-3
lines changed

src/SFGUI/Renderers/NonLegacyRenderer.cpp

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,13 +121,19 @@ NonLegacyRenderer::NonLegacyRenderer() :
121121
if( IsAvailable() ) {
122122
auto load_result = m_shader.loadFromMemory(
123123
"#version 130\n"
124-
"uniform mat4 mvp_matrix;\n"
124+
"uniform vec2 viewport_parameters;\n"
125125
"in vec2 vertex;\n"
126126
"in vec4 color;\n"
127127
"in vec2 texture_coordinate;\n"
128128
"out vec4 vertex_color;\n"
129129
"out vec2 vertex_texture_coordinate;\n"
130130
"void main() {\n"
131+
"\tmat4 mvp_matrix = mat4(1.f);\n"
132+
"\tmvp_matrix[3][0] = -1.f;\n"
133+
"\tmvp_matrix[3][1] = 1.f;\n"
134+
"\tmvp_matrix[0][0] = viewport_parameters.x;\n"
135+
"\tmvp_matrix[1][1] = viewport_parameters.y;\n"
136+
"\tmvp_matrix[2][2] = -1.f;\n"
131137
"\tgl_Position = mvp_matrix * vec4(vertex.xy, 1.f, 1.f);\n"
132138
"\tvertex_color = color;\n"
133139
"\tvertex_texture_coordinate = texture_coordinate;\n"
@@ -309,8 +315,7 @@ void NonLegacyRenderer::DisplayImpl() const {
309315
if( m_window_size.x && m_window_size.y ) {
310316
const_cast<NonLegacyRenderer*>( this )->Invalidate( INVALIDATE_VERTEX | INVALIDATE_TEXTURE );
311317

312-
auto view = sf::View( static_cast<sf::Vector2f>( m_window_size / 2 ), static_cast<sf::Vector2f>( m_window_size ) );
313-
m_shader.setParameter( "mvp_matrix", view.getTransform() );
318+
m_shader.setParameter( "viewport_parameters", 2.f / static_cast<float>( m_window_size.x ), -2.f / static_cast<float>( m_window_size.y ) );
314319

315320
const_cast<NonLegacyRenderer*>( this )->SetupFBO( m_window_size.x, m_window_size.y );
316321
}

0 commit comments

Comments
 (0)