mirror of
				https://git.suyu.dev/suyu/suyu.git
				synced 2025-11-04 12:34:39 +08:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user