PostProcessRenderer::PostProcessRenderer(GraphicsContext& graphicsContext) : _graphicsContext(graphicsContext), _quadVertexBuffer(graphicsContext.CreateVertexBuffer(BufferType::Static)) { static const VertexPositionTexture quadVertices[6] { VertexPositionTexture(Vector3f(-1, 1, 0), Vector2f::UnitY), VertexPositionTexture(Vector3f(-1, -1, 0), Vector2f::Zero), VertexPositionTexture(Vector3f(1, -1, 0), Vector2f::UnitX), VertexPositionTexture(Vector3f(-1, 1, 0), Vector2f::UnitY), VertexPositionTexture(Vector3f(1, -1, 0), Vector2f::UnitX), VertexPositionTexture(Vector3f(1, 1, 0), Vector2f::One), }; _quadVertexBuffer->SetVertexData(quadVertices, Array::Length(quadVertices)); _currentRenderTarget = _graphicsContext.CreateRenderTarget(1920, 1080, DepthBufferFormat::Depth24Stencil8); _backgroundRenderTarget = _graphicsContext.CreateRenderTarget(1920, 1080, DepthBufferFormat::Depth24Stencil8); static const std::string VertexShader = R"XXX( #version 330 core layout(location = 0) in vec3 vertexPosition; layout(location = 2) in vec2 vertexUV; out vec2 fragmentUV; void main(){ gl_Position = vec4(vertexPosition, 1); fragmentUV = vertexUV; })XXX"; static const std::string FragmentShader = R"XXX( #version 330 core in vec2 fragmentUV; out vec4 color; uniform sampler2D TextureSampler; void main() { color = texture2D(TextureSampler, fragmentUV); })XXX";