mirror of
				https://github.com/Atmosphere-NX/Atmosphere.git
				synced 2025-10-31 19:25:46 +01:00 
			
		
		
		
	* Implemented a system updater homebrew (titled Daybreak) * git subrepo pull ./troposphere/daybreak/nanovg subrepo: subdir: "troposphere/daybreak/nanovg" merged: "c197ba2f" upstream: origin: "https://github.com/Adubbz/nanovg-deko.git" branch: "master" commit: "c197ba2f" git-subrepo: version: "0.4.1" origin: "???" commit: "???" (+1 squashed commits) Squashed commits: [232dc943] git subrepo clone https://github.com/Adubbz/nanovg-deko.git troposphere/daybreak/nanovg subrepo: subdir: "troposphere/daybreak/nanovg" merged: "52bb784b" upstream: origin: "https://github.com/Adubbz/nanovg-deko.git" branch: "master" commit: "52bb784b" git-subrepo: version: "0.4.1" origin: "???" commit: "???" * daybreak: switch to using hiddbg for home blocking (+1 squashed commits) Squashed commits: [4bfc7b0d] daybreak: block the home button during installation
		
			
				
	
	
		
			63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /*
 | |
| ** Sample Framework for deko3d Applications
 | |
| **   CShader.cpp: Utility class for loading shaders from the filesystem
 | |
| */
 | |
| #include "CShader.h"
 | |
| 
 | |
| struct DkshHeader
 | |
| {
 | |
|     uint32_t magic; // DKSH_MAGIC
 | |
|     uint32_t header_sz; // sizeof(DkshHeader)
 | |
|     uint32_t control_sz;
 | |
|     uint32_t code_sz;
 | |
|     uint32_t programs_off;
 | |
|     uint32_t num_programs;
 | |
| };
 | |
| 
 | |
| bool CShader::load(CMemPool& pool, const char* path)
 | |
| {
 | |
|     FILE* f;
 | |
|     DkshHeader hdr;
 | |
|     void* ctrlmem;
 | |
| 
 | |
|     m_codemem.destroy();
 | |
| 
 | |
|     f = fopen(path, "rb");
 | |
|     if (!f) return false;
 | |
| 
 | |
|     if (!fread(&hdr, sizeof(hdr), 1, f))
 | |
|         goto _fail0;
 | |
| 
 | |
|     ctrlmem = malloc(hdr.control_sz);
 | |
|     if (!ctrlmem)
 | |
|         goto _fail0;
 | |
| 
 | |
|     rewind(f);
 | |
|     if (!fread(ctrlmem, hdr.control_sz, 1, f))
 | |
|         goto _fail1;
 | |
| 
 | |
|     m_codemem = pool.allocate(hdr.code_sz, DK_SHADER_CODE_ALIGNMENT);
 | |
|     if (!m_codemem)
 | |
|         goto _fail1;
 | |
| 
 | |
|     if (!fread(m_codemem.getCpuAddr(), hdr.code_sz, 1, f))
 | |
|         goto _fail2;
 | |
| 
 | |
|     dk::ShaderMaker{m_codemem.getMemBlock(), m_codemem.getOffset()}
 | |
|         .setControl(ctrlmem)
 | |
|         .setProgramId(0)
 | |
|         .initialize(m_shader);
 | |
| 
 | |
|     free(ctrlmem);
 | |
|     fclose(f);
 | |
|     return true;
 | |
| 
 | |
| _fail2:
 | |
|     m_codemem.destroy();
 | |
| _fail1:
 | |
|     free(ctrlmem);
 | |
| _fail0:
 | |
|     fclose(f);
 | |
|     return false;
 | |
| }
 |