From fb47258af76898f9f495e3da1a7db03a724cc9b3 Mon Sep 17 00:00:00 2001
From: archshift <admin@archshift.com>
Date: Wed, 30 Apr 2014 18:34:49 -0700
Subject: [PATCH] TGA dumps work, courtesy of @bunnei

---
 src/citra/citra.cpp                           |  2 +-
 .../renderer_opengl/renderer_opengl.cpp       |  2 +
 src/video_core/utils.cpp                      | 72 +++++++++----------
 3 files changed, 39 insertions(+), 37 deletions(-)

diff --git a/src/citra/citra.cpp b/src/citra/citra.cpp
index d55b97393..458695ca7 100644
--- a/src/citra/citra.cpp
+++ b/src/citra/citra.cpp
@@ -24,7 +24,7 @@ int __cdecl main(int argc, char **argv) {
 
 	System::Init(emu_window);
 
-    std::string boot_filename = "homebrew.elf";
+    std::string boot_filename = "/Users/gandrade-air/Downloads/homebrew/yeti3DS-master.elf";
     std::string error_str;
     
     bool res = Loader::LoadFile(boot_filename, &error_str);
diff --git a/src/video_core/renderer_opengl/renderer_opengl.cpp b/src/video_core/renderer_opengl/renderer_opengl.cpp
index 314b1a8ed..5407c483a 100644
--- a/src/video_core/renderer_opengl/renderer_opengl.cpp
+++ b/src/video_core/renderer_opengl/renderer_opengl.cpp
@@ -6,6 +6,7 @@
 
 #include "video_core/video_core.h"
 #include "video_core/renderer_opengl/renderer_opengl.h"
+#include "video_core/utils.h"
 
 #include "core/mem_map.h"
 
@@ -49,6 +50,7 @@ void RendererOpenGL::SwapBuffers() {
 
     // Switch back to EFB and clear
     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo[kFramebuffer_EFB]);
+	VideoCore::DumpTGA("dump.tga", 400, 240, m_xfb_top_flipped);
 }
 
 /**
diff --git a/src/video_core/utils.cpp b/src/video_core/utils.cpp
index 67d74a2d8..9fcefaad3 100644
--- a/src/video_core/utils.cpp
+++ b/src/video_core/utils.cpp
@@ -8,39 +8,39 @@
 #include "video_core/utils.h"
 
 namespace VideoCore {
-
-/**
- * Dumps a texture to TGA
- * @param filename String filename to dump texture to
- * @param width Width of texture in pixels
- * @param height Height of texture in pixels
- * @param raw_data Raw RGBA8 texture data to dump
- * @todo This should be moved to some general purpose/common code
- */
-void DumpTGA(std::string filename, int width, int height, u8* raw_data) {
-    TGAHeader hdr;
-    FILE* fout;
-    u8 r, g, b;
-
-    memset(&hdr, 0, sizeof(hdr));
-    hdr.datatypecode = 2; // uncompressed RGB
-    hdr.bitsperpixel = 24; // 24 bpp
-    hdr.width = width;
-    hdr.height = height;
-
-    fout = fopen(filename.c_str(), "wb");
-    fwrite(&hdr, sizeof(TGAHeader), 1, fout);
-    for (int i = 0; i < height; i++) {
-        for (int j = 0; j < width; j++) {
-            r = raw_data[(4 * (i * width)) + (4 * j) + 0];
-            g = raw_data[(4 * (i * width)) + (4 * j) + 1];
-            b = raw_data[(4 * (i * width)) + (4 * j) + 2];
-            putc(b, fout);
-            putc(g, fout);
-            putc(r, fout);
-        }
-    }
-    fclose(fout);
-}
-
-} // namespace
+	
+	/**
+	 * Dumps a texture to TGA
+	 * @param filename String filename to dump texture to
+	 * @param width Width of texture in pixels
+	 * @param height Height of texture in pixels
+	 * @param raw_data Raw RGBA8 texture data to dump
+	 * @todo This should be moved to some general purpose/common code
+	 */
+	void DumpTGA(std::string filename, int width, int height, u8* raw_data) {
+		TGAHeader hdr;
+		FILE* fout;
+		u8 r, g, b;
+		
+		memset(&hdr, 0, sizeof(hdr));
+		hdr.datatypecode = 2; // uncompressed RGB
+		hdr.bitsperpixel = 24; // 24 bpp
+		hdr.width = width;
+		hdr.height = height;
+		
+		fout = fopen(filename.c_str(), "wb");
+		fwrite(&hdr, sizeof(TGAHeader), 1, fout);
+		for (int i = 0; i < height; i++) {
+			for (int j = 0; j < width; j++) {
+				b = raw_data[(3 * (i * width)) + (3 * j) + 0];
+				g = raw_data[(3 * (i * width)) + (3 * j) + 1];
+				r = raw_data[(3 * (i * width)) + (3 * j) + 2];
+				putc(b, fout);
+				putc(g, fout);
+				putc(r, fout);
+			}
+		}
+		fclose(fout);
+	}
+	
+} // namespace
\ No newline at end of file