mirror of
https://github.com/Atmosphere-NX/Atmosphere
synced 2024-11-16 01:49:32 +00:00
94eb2195d3
* 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
62 lines
1.2 KiB
C++
62 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;
|
|
}
|