mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2025-02-16 19:05:39 +00:00
Display: Fix bleeding from adjacent VRAM columns with linear filtering
This commit is contained in:
parent
5c7ef65a34
commit
c008a5d523
|
@ -445,8 +445,9 @@ void D3D11DisplayWindow::renderDisplay()
|
||||||
|
|
||||||
const float uniforms[4] = {static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
const float uniforms[4] = {static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
||||||
static_cast<float>(m_display_width) / static_cast<float>(m_display_texture_width),
|
(static_cast<float>(m_display_width) - 0.5f) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_height) / static_cast<float>(m_display_texture_height)};
|
(static_cast<float>(m_display_height) - 0.5f) /
|
||||||
|
static_cast<float>(m_display_texture_height)};
|
||||||
const auto map = m_display_uniform_buffer.Map(m_context.Get(), sizeof(uniforms), sizeof(uniforms));
|
const auto map = m_display_uniform_buffer.Map(m_context.Get(), sizeof(uniforms), sizeof(uniforms));
|
||||||
std::memcpy(map.pointer, uniforms, sizeof(uniforms));
|
std::memcpy(map.pointer, uniforms, sizeof(uniforms));
|
||||||
m_display_uniform_buffer.Unmap(m_context.Get(), sizeof(uniforms));
|
m_display_uniform_buffer.Unmap(m_context.Get(), sizeof(uniforms));
|
||||||
|
|
|
@ -459,10 +459,11 @@ void OpenGLDisplayWindow::renderDisplay()
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
m_display_program.Bind();
|
m_display_program.Bind();
|
||||||
m_display_program.Uniform4f(0, static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
m_display_program.Uniform4f(
|
||||||
|
0, static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
||||||
static_cast<float>(m_display_width) / static_cast<float>(m_display_texture_width),
|
(static_cast<float>(m_display_width) - 0.5f) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_height) / static_cast<float>(m_display_texture_height));
|
(static_cast<float>(m_display_height) - 0.5f) / static_cast<float>(m_display_texture_height));
|
||||||
glBindTexture(GL_TEXTURE_2D, static_cast<GLuint>(reinterpret_cast<uintptr_t>(m_display_texture_handle)));
|
glBindTexture(GL_TEXTURE_2D, static_cast<GLuint>(reinterpret_cast<uintptr_t>(m_display_texture_handle)));
|
||||||
glBindSampler(0, m_display_linear_filtering ? m_display_linear_sampler : m_display_nearest_sampler);
|
glBindSampler(0, m_display_linear_filtering ? m_display_linear_sampler : m_display_nearest_sampler);
|
||||||
glBindVertexArray(m_display_vao);
|
glBindVertexArray(m_display_vao);
|
||||||
|
|
|
@ -2,12 +2,12 @@
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/d3d11/shader_compiler.h"
|
#include "common/d3d11/shader_compiler.h"
|
||||||
#include "common/log.h"
|
#include "common/log.h"
|
||||||
|
#include "imgui_impl_sdl.h"
|
||||||
#include <SDL_syswm.h>
|
#include <SDL_syswm.h>
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <dxgi1_5.h>
|
#include <dxgi1_5.h>
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include <imgui_impl_dx11.h>
|
#include <imgui_impl_dx11.h>
|
||||||
#include "imgui_impl_sdl.h"
|
|
||||||
Log_SetChannel(D3D11HostDisplay);
|
Log_SetChannel(D3D11HostDisplay);
|
||||||
|
|
||||||
class D3D11HostDisplayTexture : public HostDisplayTexture
|
class D3D11HostDisplayTexture : public HostDisplayTexture
|
||||||
|
@ -411,8 +411,9 @@ void D3D11HostDisplay::RenderDisplay()
|
||||||
|
|
||||||
const float uniforms[4] = {static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
const float uniforms[4] = {static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
||||||
static_cast<float>(m_display_width) / static_cast<float>(m_display_texture_width),
|
(static_cast<float>(m_display_width) - 0.5f) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_height) / static_cast<float>(m_display_texture_height)};
|
(static_cast<float>(m_display_height) - 0.5f) /
|
||||||
|
static_cast<float>(m_display_texture_height)};
|
||||||
const auto map = m_display_uniform_buffer.Map(m_context.Get(), sizeof(uniforms), sizeof(uniforms));
|
const auto map = m_display_uniform_buffer.Map(m_context.Get(), sizeof(uniforms), sizeof(uniforms));
|
||||||
std::memcpy(map.pointer, uniforms, sizeof(uniforms));
|
std::memcpy(map.pointer, uniforms, sizeof(uniforms));
|
||||||
m_display_uniform_buffer.Unmap(m_context.Get(), sizeof(uniforms));
|
m_display_uniform_buffer.Unmap(m_context.Get(), sizeof(uniforms));
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
#include "opengl_host_display.h"
|
#include "opengl_host_display.h"
|
||||||
#include "common/assert.h"
|
#include "common/assert.h"
|
||||||
#include "common/log.h"
|
#include "common/log.h"
|
||||||
|
#include "imgui_impl_sdl.h"
|
||||||
#include <array>
|
#include <array>
|
||||||
#include <imgui.h>
|
#include <imgui.h>
|
||||||
#include <imgui_impl_opengl3.h>
|
#include <imgui_impl_opengl3.h>
|
||||||
#include "imgui_impl_sdl.h"
|
|
||||||
#include <tuple>
|
#include <tuple>
|
||||||
Log_SetChannel(OpenGLHostDisplay);
|
Log_SetChannel(OpenGLHostDisplay);
|
||||||
|
|
||||||
|
@ -366,10 +366,11 @@ void OpenGLHostDisplay::RenderDisplay()
|
||||||
glDisable(GL_SCISSOR_TEST);
|
glDisable(GL_SCISSOR_TEST);
|
||||||
glDepthMask(GL_FALSE);
|
glDepthMask(GL_FALSE);
|
||||||
m_display_program.Bind();
|
m_display_program.Bind();
|
||||||
m_display_program.Uniform4f(0, static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
m_display_program.Uniform4f(
|
||||||
|
0, static_cast<float>(m_display_offset_x) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
static_cast<float>(m_display_offset_y) / static_cast<float>(m_display_texture_height),
|
||||||
static_cast<float>(m_display_width) / static_cast<float>(m_display_texture_width),
|
(static_cast<float>(m_display_width) - 0.5f) / static_cast<float>(m_display_texture_width),
|
||||||
static_cast<float>(m_display_height) / static_cast<float>(m_display_texture_height));
|
(static_cast<float>(m_display_height) - 0.5f) / static_cast<float>(m_display_texture_height));
|
||||||
glBindTexture(GL_TEXTURE_2D, static_cast<GLuint>(reinterpret_cast<uintptr_t>(m_display_texture_handle)));
|
glBindTexture(GL_TEXTURE_2D, static_cast<GLuint>(reinterpret_cast<uintptr_t>(m_display_texture_handle)));
|
||||||
glBindSampler(0, m_display_linear_filtering ? m_display_linear_sampler : m_display_nearest_sampler);
|
glBindSampler(0, m_display_linear_filtering ? m_display_linear_sampler : m_display_nearest_sampler);
|
||||||
glBindVertexArray(m_display_vao);
|
glBindVertexArray(m_display_vao);
|
||||||
|
|
Loading…
Reference in a new issue