|
@@ -56,15 +56,12 @@ static constexpr size_t BUTTONS = sizeof(buttons) / sizeof(ButtonData);
|
|
|
static const GLchar* VERTEX_SHADER_CODE =
|
|
static const GLchar* VERTEX_SHADER_CODE =
|
|
|
"#version 430\n"
|
|
"#version 430\n"
|
|
|
"layout (location = 0) in vec2 pos;\n"
|
|
"layout (location = 0) in vec2 pos;\n"
|
|
|
- "uniform vec2 size;\n"
|
|
|
|
|
|
|
+ "uniform vec2 offset;\n"
|
|
|
|
|
+ "uniform vec2 factor;\n"
|
|
|
"out vec2 tex;\n"
|
|
"out vec2 tex;\n"
|
|
|
"void main(void) {\n"
|
|
"void main(void) {\n"
|
|
|
" tex = pos;\n"
|
|
" tex = pos;\n"
|
|
|
- " vec2 w = vec2(" STR(WIDTH) ", " STR(HEIGHT) ");\n"
|
|
|
|
|
- " ivec2 f = ivec2(size / w);\n"
|
|
|
|
|
- " f = ivec2(min(f.x, f.y), min(f.x, f.y));\n"
|
|
|
|
|
- " vec2 f2 = (f * w) / size;\n"
|
|
|
|
|
- " gl_Position = vec4(pos * f2, 0.0, 1.0);\n"
|
|
|
|
|
|
|
+ " gl_Position = vec4(pos * factor - offset, 0.0, 1.0);\n"
|
|
|
"}\n";
|
|
"}\n";
|
|
|
// clang-format on
|
|
// clang-format on
|
|
|
|
|
|
|
@@ -253,8 +250,19 @@ void windowNextFrame() {
|
|
|
texture, 0, 0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1,
|
|
texture, 0, 0, 0, WIDTH, HEIGHT, GL_RGBA, GL_UNSIGNED_SHORT_5_5_5_1,
|
|
|
pixels);
|
|
pixels);
|
|
|
|
|
|
|
|
- GLint size = glGetUniformLocation(program, "size");
|
|
|
|
|
- glUniform2f(size, (float)width, (float)height);
|
|
|
|
|
|
|
+ int factorX = width / WIDTH;
|
|
|
|
|
+ int factorY = height / HEIGHT;
|
|
|
|
|
+ int factor = factorX < factorY ? factorX : factorY;
|
|
|
|
|
+ float sizeX = (float)(factor * WIDTH) / (float)width;
|
|
|
|
|
+ float sizeY = (float)(factor * HEIGHT) / (float)height;
|
|
|
|
|
+ float offsetX = (width & 1) ? 1.0f / (float)width : 0.0f;
|
|
|
|
|
+ float offsetY = (height & 1) ? 1.0f / (float)height : 0.0f;
|
|
|
|
|
+
|
|
|
|
|
+ GLint factorLoc = glGetUniformLocation(program, "factor");
|
|
|
|
|
+ glUniform2f(factorLoc, sizeX, sizeY);
|
|
|
|
|
+
|
|
|
|
|
+ GLint offsetLoc = glGetUniformLocation(program, "offset");
|
|
|
|
|
+ glUniform2f(offsetLoc, offsetX, offsetY);
|
|
|
|
|
|
|
|
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
|
glBindBuffer(GL_ARRAY_BUFFER, vbo);
|
|
|
glBindVertexArray(vba);
|
|
glBindVertexArray(vba);
|