|
@@ -21,6 +21,8 @@
|
|
|
#include "core/perf_stats.h"
|
|
#include "core/perf_stats.h"
|
|
|
#include "core/settings.h"
|
|
#include "core/settings.h"
|
|
|
#include "core/telemetry_session.h"
|
|
#include "core/telemetry_session.h"
|
|
|
|
|
+#include "video_core/host_shaders/opengl_present_frag.h"
|
|
|
|
|
+#include "video_core/host_shaders/opengl_present_vert.h"
|
|
|
#include "video_core/morton.h"
|
|
#include "video_core/morton.h"
|
|
|
#include "video_core/renderer_opengl/gl_rasterizer.h"
|
|
#include "video_core/renderer_opengl/gl_rasterizer.h"
|
|
|
#include "video_core/renderer_opengl/gl_shader_manager.h"
|
|
#include "video_core/renderer_opengl/gl_shader_manager.h"
|
|
@@ -44,46 +46,6 @@ struct Frame {
|
|
|
bool is_srgb{}; /// Framebuffer is sRGB or RGB
|
|
bool is_srgb{}; /// Framebuffer is sRGB or RGB
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-constexpr char VERTEX_SHADER[] = R"(
|
|
|
|
|
-#version 430 core
|
|
|
|
|
-
|
|
|
|
|
-out gl_PerVertex {
|
|
|
|
|
- vec4 gl_Position;
|
|
|
|
|
-};
|
|
|
|
|
-
|
|
|
|
|
-layout (location = 0) in vec2 vert_position;
|
|
|
|
|
-layout (location = 1) in vec2 vert_tex_coord;
|
|
|
|
|
-layout (location = 0) out vec2 frag_tex_coord;
|
|
|
|
|
-
|
|
|
|
|
-// This is a truncated 3x3 matrix for 2D transformations:
|
|
|
|
|
-// The upper-left 2x2 submatrix performs scaling/rotation/mirroring.
|
|
|
|
|
-// The third column performs translation.
|
|
|
|
|
-// The third row could be used for projection, which we don't need in 2D. It hence is assumed to
|
|
|
|
|
-// implicitly be [0, 0, 1]
|
|
|
|
|
-layout (location = 0) uniform mat3x2 modelview_matrix;
|
|
|
|
|
-
|
|
|
|
|
-void main() {
|
|
|
|
|
- // Multiply input position by the rotscale part of the matrix and then manually translate by
|
|
|
|
|
- // the last column. This is equivalent to using a full 3x3 matrix and expanding the vector
|
|
|
|
|
- // to `vec3(vert_position.xy, 1.0)`
|
|
|
|
|
- gl_Position = vec4(mat2(modelview_matrix) * vert_position + modelview_matrix[2], 0.0, 1.0);
|
|
|
|
|
- frag_tex_coord = vert_tex_coord;
|
|
|
|
|
-}
|
|
|
|
|
-)";
|
|
|
|
|
-
|
|
|
|
|
-constexpr char FRAGMENT_SHADER[] = R"(
|
|
|
|
|
-#version 430 core
|
|
|
|
|
-
|
|
|
|
|
-layout (location = 0) in vec2 frag_tex_coord;
|
|
|
|
|
-layout (location = 0) out vec4 color;
|
|
|
|
|
-
|
|
|
|
|
-layout (binding = 0) uniform sampler2D color_texture;
|
|
|
|
|
-
|
|
|
|
|
-void main() {
|
|
|
|
|
- color = vec4(texture(color_texture, frag_tex_coord).rgb, 1.0f);
|
|
|
|
|
-}
|
|
|
|
|
-)";
|
|
|
|
|
-
|
|
|
|
|
constexpr GLint PositionLocation = 0;
|
|
constexpr GLint PositionLocation = 0;
|
|
|
constexpr GLint TexCoordLocation = 1;
|
|
constexpr GLint TexCoordLocation = 1;
|
|
|
constexpr GLint ModelViewMatrixLocation = 0;
|
|
constexpr GLint ModelViewMatrixLocation = 0;
|
|
@@ -461,10 +423,10 @@ void RendererOpenGL::InitOpenGLObjects() {
|
|
|
|
|
|
|
|
// Create shader programs
|
|
// Create shader programs
|
|
|
OGLShader vertex_shader;
|
|
OGLShader vertex_shader;
|
|
|
- vertex_shader.Create(VERTEX_SHADER, GL_VERTEX_SHADER);
|
|
|
|
|
|
|
+ vertex_shader.Create(HostShaders::OPENGL_PRESENT_VERT, GL_VERTEX_SHADER);
|
|
|
|
|
|
|
|
OGLShader fragment_shader;
|
|
OGLShader fragment_shader;
|
|
|
- fragment_shader.Create(FRAGMENT_SHADER, GL_FRAGMENT_SHADER);
|
|
|
|
|
|
|
+ fragment_shader.Create(HostShaders::OPENGL_PRESENT_FRAG, GL_FRAGMENT_SHADER);
|
|
|
|
|
|
|
|
vertex_program.Create(true, false, vertex_shader.handle);
|
|
vertex_program.Create(true, false, vertex_shader.handle);
|
|
|
fragment_program.Create(true, false, fragment_shader.handle);
|
|
fragment_program.Create(true, false, fragment_shader.handle);
|