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); | ||||
| 
 | ||||
|     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); | ||||
|  | ||||
| @ -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); | ||||
| } | ||||
| 
 | ||||
| /**
 | ||||
|  | ||||
| @ -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
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 archshift
						archshift