TGA dumps work, courtesy of @bunnei
This commit is contained in:
		
							parent
							
								
									bdc3c99904
								
							
						
					
					
						commit
						fb47258af7
					
				| @ -24,7 +24,7 @@ int __cdecl main(int argc, char **argv) { | |||||||
| 
 | 
 | ||||||
| 	System::Init(emu_window); | 	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; |     std::string error_str; | ||||||
|      |      | ||||||
|     bool res = Loader::LoadFile(boot_filename, &error_str); |     bool res = Loader::LoadFile(boot_filename, &error_str); | ||||||
|  | |||||||
| @ -6,6 +6,7 @@ | |||||||
| 
 | 
 | ||||||
| #include "video_core/video_core.h" | #include "video_core/video_core.h" | ||||||
| #include "video_core/renderer_opengl/renderer_opengl.h" | #include "video_core/renderer_opengl/renderer_opengl.h" | ||||||
|  | #include "video_core/utils.h" | ||||||
| 
 | 
 | ||||||
| #include "core/mem_map.h" | #include "core/mem_map.h" | ||||||
| 
 | 
 | ||||||
| @ -49,6 +50,7 @@ void RendererOpenGL::SwapBuffers() { | |||||||
| 
 | 
 | ||||||
|     // Switch back to EFB and clear
 |     // Switch back to EFB and clear
 | ||||||
|     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo[kFramebuffer_EFB]); |     glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo[kFramebuffer_EFB]); | ||||||
|  | 	VideoCore::DumpTGA("dump.tga", 400, 240, m_xfb_top_flipped); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| /**
 | /**
 | ||||||
|  | |||||||
| @ -8,39 +8,39 @@ | |||||||
| #include "video_core/utils.h" | #include "video_core/utils.h" | ||||||
| 
 | 
 | ||||||
| namespace VideoCore { | namespace VideoCore { | ||||||
| 
 | 	 | ||||||
| /**
 | 	/**
 | ||||||
|  * Dumps a texture to TGA | 	 * Dumps a texture to TGA | ||||||
|  * @param filename String filename to dump texture to | 	 * @param filename String filename to dump texture to | ||||||
|  * @param width Width of texture in pixels | 	 * @param width Width of texture in pixels | ||||||
|  * @param height Height of texture in pixels | 	 * @param height Height of texture in pixels | ||||||
|  * @param raw_data Raw RGBA8 texture data to dump | 	 * @param raw_data Raw RGBA8 texture data to dump | ||||||
|  * @todo This should be moved to some general purpose/common code | 	 * @todo This should be moved to some general purpose/common code | ||||||
|  */ | 	 */ | ||||||
| void DumpTGA(std::string filename, int width, int height, u8* raw_data) { | 	void DumpTGA(std::string filename, int width, int height, u8* raw_data) { | ||||||
|     TGAHeader hdr; | 		TGAHeader hdr; | ||||||
|     FILE* fout; | 		FILE* fout; | ||||||
|     u8 r, g, b; | 		u8 r, g, b; | ||||||
| 
 | 		 | ||||||
|     memset(&hdr, 0, sizeof(hdr)); | 		memset(&hdr, 0, sizeof(hdr)); | ||||||
|     hdr.datatypecode = 2; // uncompressed RGB
 | 		hdr.datatypecode = 2; // uncompressed RGB
 | ||||||
|     hdr.bitsperpixel = 24; // 24 bpp
 | 		hdr.bitsperpixel = 24; // 24 bpp
 | ||||||
|     hdr.width = width; | 		hdr.width = width; | ||||||
|     hdr.height = height; | 		hdr.height = height; | ||||||
| 
 | 		 | ||||||
|     fout = fopen(filename.c_str(), "wb"); | 		fout = fopen(filename.c_str(), "wb"); | ||||||
|     fwrite(&hdr, sizeof(TGAHeader), 1, fout); | 		fwrite(&hdr, sizeof(TGAHeader), 1, fout); | ||||||
|     for (int i = 0; i < height; i++) { | 		for (int i = 0; i < height; i++) { | ||||||
|         for (int j = 0; j < width; j++) { | 			for (int j = 0; j < width; j++) { | ||||||
|             r = raw_data[(4 * (i * width)) + (4 * j) + 0]; | 				b = raw_data[(3 * (i * width)) + (3 * j) + 0]; | ||||||
|             g = raw_data[(4 * (i * width)) + (4 * j) + 1]; | 				g = raw_data[(3 * (i * width)) + (3 * j) + 1]; | ||||||
|             b = raw_data[(4 * (i * width)) + (4 * j) + 2]; | 				r = raw_data[(3 * (i * width)) + (3 * j) + 2]; | ||||||
|             putc(b, fout); | 				putc(b, fout); | ||||||
|             putc(g, fout); | 				putc(g, fout); | ||||||
|             putc(r, fout); | 				putc(r, fout); | ||||||
|         } | 			} | ||||||
|     } | 		} | ||||||
|     fclose(fout); | 		fclose(fout); | ||||||
| } | 	} | ||||||
| 
 | 	 | ||||||
| } // namespace
 | } // namespace
 | ||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 archshift
						archshift