diff options
Diffstat (limited to 'src/citra_qt/debugger/graphics_framebuffer.cpp')
| -rw-r--r-- | src/citra_qt/debugger/graphics_framebuffer.cpp | 28 |
1 files changed, 15 insertions, 13 deletions
diff --git a/src/citra_qt/debugger/graphics_framebuffer.cpp b/src/citra_qt/debugger/graphics_framebuffer.cpp index dd41c3880..7ef699f37 100644 --- a/src/citra_qt/debugger/graphics_framebuffer.cpp +++ b/src/citra_qt/debugger/graphics_framebuffer.cpp | |||
| @@ -10,6 +10,7 @@ | |||
| 10 | #include <QPushButton> | 10 | #include <QPushButton> |
| 11 | #include <QSpinBox> | 11 | #include <QSpinBox> |
| 12 | 12 | ||
| 13 | #include "video_core/color.h" | ||
| 13 | #include "video_core/pica.h" | 14 | #include "video_core/pica.h" |
| 14 | 15 | ||
| 15 | #include "graphics_framebuffer.hxx" | 16 | #include "graphics_framebuffer.hxx" |
| @@ -157,7 +158,7 @@ void GraphicsFramebufferWidget::OnFramebufferAddressChanged(qint64 new_value) | |||
| 157 | } | 158 | } |
| 158 | } | 159 | } |
| 159 | 160 | ||
| 160 | void GraphicsFramebufferWidget::OnFramebufferWidthChanged(int new_value) | 161 | void GraphicsFramebufferWidget::OnFramebufferWidthChanged(unsigned int new_value) |
| 161 | { | 162 | { |
| 162 | if (framebuffer_width != new_value) { | 163 | if (framebuffer_width != new_value) { |
| 163 | framebuffer_width = new_value; | 164 | framebuffer_width = new_value; |
| @@ -167,7 +168,7 @@ void GraphicsFramebufferWidget::OnFramebufferWidthChanged(int new_value) | |||
| 167 | } | 168 | } |
| 168 | } | 169 | } |
| 169 | 170 | ||
| 170 | void GraphicsFramebufferWidget::OnFramebufferHeightChanged(int new_value) | 171 | void GraphicsFramebufferWidget::OnFramebufferHeightChanged(unsigned int new_value) |
| 171 | { | 172 | { |
| 172 | if (framebuffer_height != new_value) { | 173 | if (framebuffer_height != new_value) { |
| 173 | framebuffer_height = new_value; | 174 | framebuffer_height = new_value; |
| @@ -202,7 +203,8 @@ void GraphicsFramebufferWidget::OnUpdate() | |||
| 202 | framebuffer_address = framebuffer.GetColorBufferPhysicalAddress(); | 203 | framebuffer_address = framebuffer.GetColorBufferPhysicalAddress(); |
| 203 | framebuffer_width = framebuffer.GetWidth(); | 204 | framebuffer_width = framebuffer.GetWidth(); |
| 204 | framebuffer_height = framebuffer.GetHeight(); | 205 | framebuffer_height = framebuffer.GetHeight(); |
| 205 | framebuffer_format = static_cast<Format>(framebuffer.color_format); | 206 | // TODO: It's unknown how this format is actually specified |
| 207 | framebuffer_format = Format::RGBA8; | ||
| 206 | 208 | ||
| 207 | break; | 209 | break; |
| 208 | } | 210 | } |
| @@ -225,8 +227,8 @@ void GraphicsFramebufferWidget::OnUpdate() | |||
| 225 | { | 227 | { |
| 226 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); | 228 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); |
| 227 | u32* color_buffer = (u32*)Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); | 229 | u32* color_buffer = (u32*)Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); |
| 228 | for (unsigned y = 0; y < framebuffer_height; ++y) { | 230 | for (unsigned int y = 0; y < framebuffer_height; ++y) { |
| 229 | for (unsigned x = 0; x < framebuffer_width; ++x) { | 231 | for (unsigned int x = 0; x < framebuffer_width; ++x) { |
| 230 | u32 value = *(color_buffer + x + y * framebuffer_width); | 232 | u32 value = *(color_buffer + x + y * framebuffer_width); |
| 231 | 233 | ||
| 232 | decoded_image.setPixel(x, y, qRgba((value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF, 255/*value >> 24*/)); | 234 | decoded_image.setPixel(x, y, qRgba((value >> 16) & 0xFF, (value >> 8) & 0xFF, value & 0xFF, 255/*value >> 24*/)); |
| @@ -240,8 +242,8 @@ void GraphicsFramebufferWidget::OnUpdate() | |||
| 240 | { | 242 | { |
| 241 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); | 243 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); |
| 242 | u8* color_buffer = Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); | 244 | u8* color_buffer = Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); |
| 243 | for (unsigned y = 0; y < framebuffer_height; ++y) { | 245 | for (unsigned int y = 0; y < framebuffer_height; ++y) { |
| 244 | for (unsigned x = 0; x < framebuffer_width; ++x) { | 246 | for (unsigned int x = 0; x < framebuffer_width; ++x) { |
| 245 | u8* pixel_pointer = color_buffer + x * 3 + y * 3 * framebuffer_width; | 247 | u8* pixel_pointer = color_buffer + x * 3 + y * 3 * framebuffer_width; |
| 246 | 248 | ||
| 247 | decoded_image.setPixel(x, y, qRgba(pixel_pointer[0], pixel_pointer[1], pixel_pointer[2], 255/*value >> 24*/)); | 249 | decoded_image.setPixel(x, y, qRgba(pixel_pointer[0], pixel_pointer[1], pixel_pointer[2], 255/*value >> 24*/)); |
| @@ -255,13 +257,13 @@ void GraphicsFramebufferWidget::OnUpdate() | |||
| 255 | { | 257 | { |
| 256 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); | 258 | QImage decoded_image(framebuffer_width, framebuffer_height, QImage::Format_ARGB32); |
| 257 | u32* color_buffer = (u32*)Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); | 259 | u32* color_buffer = (u32*)Memory::GetPointer(Pica::PAddrToVAddr(framebuffer_address)); |
| 258 | for (unsigned y = 0; y < framebuffer_height; ++y) { | 260 | for (unsigned int y = 0; y < framebuffer_height; ++y) { |
| 259 | for (unsigned x = 0; x < framebuffer_width; ++x) { | 261 | for (unsigned int x = 0; x < framebuffer_width; ++x) { |
| 260 | u16 value = *(u16*)(((u8*)color_buffer) + x * 2 + y * framebuffer_width * 2); | 262 | u16 value = *(u16*)(((u8*)color_buffer) + x * 2 + y * framebuffer_width * 2); |
| 261 | u8 r = (value >> 11) & 0x1F; | 263 | u8 r = Color::Convert5To8((value >> 11) & 0x1F); |
| 262 | u8 g = (value >> 6) & 0x1F; | 264 | u8 g = Color::Convert5To8((value >> 6) & 0x1F); |
| 263 | u8 b = (value >> 1) & 0x1F; | 265 | u8 b = Color::Convert5To8((value >> 1) & 0x1F); |
| 264 | u8 a = value & 1; | 266 | u8 a = Color::Convert1To8(value & 1); |
| 265 | 267 | ||
| 266 | decoded_image.setPixel(x, y, qRgba(r, g, b, 255/*a*/)); | 268 | decoded_image.setPixel(x, y, qRgba(r, g, b, 255/*a*/)); |
| 267 | } | 269 | } |