summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/Software/SWOGLWindow.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/Core/VideoBackends/Software/SWOGLWindow.cpp')
-rw-r--r--Source/Core/VideoBackends/Software/SWOGLWindow.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp
index 9d42ff5790..8027d3fb68 100644
--- a/Source/Core/VideoBackends/Software/SWOGLWindow.cpp
+++ b/Source/Core/VideoBackends/Software/SWOGLWindow.cpp
@@ -9,6 +9,7 @@
#include "Common/Logging/Log.h"
#include "VideoBackends/Software/SWOGLWindow.h"
+#include "VideoBackends/Software/SWTexture.h"
std::unique_ptr<SWOGLWindow> SWOGLWindow::s_instance;
@@ -53,9 +54,9 @@ void SWOGLWindow::Prepare()
std::string frag_shader = "in vec2 TexCoord;\n"
"out vec4 ColorOut;\n"
- "uniform sampler2D Texture;\n"
+ "uniform sampler2D samp;\n"
"void main() {\n"
- " ColorOut = texture(Texture, TexCoord);\n"
+ " ColorOut = texture(samp, TexCoord);\n"
"}\n";
std::string vertex_shader = "out vec2 TexCoord;\n"
@@ -74,10 +75,10 @@ void SWOGLWindow::Prepare()
glUseProgram(m_image_program);
- glUniform1i(glGetUniformLocation(m_image_program, "Texture"), 0);
-
+ glUniform1i(glGetUniformLocation(m_image_program, "samp"), 0);
glGenTextures(1, &m_image_texture);
glBindTexture(GL_TEXTURE_2D, m_image_texture);
+
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -89,23 +90,27 @@ void SWOGLWindow::PrintText(const std::string& text, int x, int y, u32 color)
m_text.push_back({text, x, y, color});
}
-void SWOGLWindow::ShowImage(const u8* data, int stride, int width, int height, float aspect)
+void SWOGLWindow::ShowImage(AbstractTexture* image, const EFBRectangle& xfb_region)
{
- GLInterface->MakeCurrent();
- GLInterface->Update();
- Prepare();
+ SW::SWTexture* sw_image = static_cast<SW::SWTexture*>(image);
+ GLInterface->Update(); // just updates the render window position and the backbuffer size
GLsizei glWidth = (GLsizei)GLInterface->GetBackBufferWidth();
GLsizei glHeight = (GLsizei)GLInterface->GetBackBufferHeight();
glViewport(0, 0, glWidth, glHeight);
+ glActiveTexture(GL_TEXTURE9);
glBindTexture(GL_TEXTURE_2D, m_image_texture);
+ // TODO: Apply xfb_region
+
glPixelStorei(GL_UNPACK_ALIGNMENT, 4); // 4-byte pixel alignment
- glPixelStorei(GL_UNPACK_ROW_LENGTH, stride / 4);
- glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (GLsizei)width, (GLsizei)height, 0, GL_RGBA,
- GL_UNSIGNED_BYTE, data);
+ glPixelStorei(GL_UNPACK_ROW_LENGTH, sw_image->GetConfig().width);
+
+ glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, static_cast<GLsizei>(sw_image->GetConfig().width),
+ static_cast<GLsizei>(sw_image->GetConfig().height), 0, GL_RGBA, GL_UNSIGNED_BYTE,
+ sw_image->GetData());
glUseProgram(m_image_program);
@@ -119,7 +124,6 @@ void SWOGLWindow::ShowImage(const u8* data, int stride, int width, int height, f
m_text.clear();
GLInterface->Swap();
- GLInterface->ClearCurrent();
}
int SWOGLWindow::PeekMessages()