nitro-engine/examples/loading/filesystem_textures_grf/source/main.c
Antonio Niño Díaz 47c8061168 examples: test: Refactor to avoid global variables
Using global variables is generally discouraged. Now that NE_ProcessArg()
and NE_ProcessDualArg() exist, it's better to show how to use them instead
of NE_Process() and NE_ProcessDual() while using global variables.

Also, switch from "int main(void)" to "int main(int argc, char *argv[])".
2024-03-08 18:44:02 +00:00

106 lines
2.2 KiB
C

// SPDX-License-Identifier: CC0-1.0
//
// SPDX-FileContributor: Antonio Niño Díaz, 2024
//
// This file is part of Nitro Engine
// Important: This example won't work on devkitPro. GRF loading functions are
// only supported in BlocksDS.
#include <filesystem.h>
#include <NEMain.h>
typedef struct {
NE_Material *Material1;
} SceneData1;
typedef struct {
NE_Material *Material2;
} SceneData2;
void Draw3DScene(void *arg)
{
SceneData1 *Scene = arg;
NE_2DViewInit();
NE_2DDrawTexturedQuad(0, 0,
256, 192,
0, Scene->Material1);
}
void Draw3DScene2(void *arg)
{
SceneData2 *Scene = arg;
NE_2DViewInit();
NE_2DDrawTexturedQuad(64, 32,
64 + 128, 32 + 128,
0, Scene->Material2);
}
__attribute__((noreturn)) void WaitLoop(void)
{
printf("Press START to exit");
while (1)
{
swiWaitForVBlank();
scanKeys();
if (keysHeld() & KEY_START)
exit(0);
}
}
int main(int argc, char *argv[])
{
SceneData1 Scene1 = { 0 };
SceneData2 Scene2 = { 0 };
irqEnable(IRQ_HBLANK);
irqSet(IRQ_VBLANK, NE_VBLFunc);
irqSet(IRQ_HBLANK, NE_HBLFunc);
consoleDemoInit();
if (!nitroFSInit(NULL))
{
printf("nitroFSInit failed.\n");
WaitLoop();
}
// Init 3D mode
NE_InitDual3D();
NE_InitConsole();
// Allocate objects
Scene1.Material1 = NE_MaterialCreate();
Scene2.Material2 = NE_MaterialCreate();
if (NE_MaterialTexLoadGRF(Scene1.Material1, NULL, NE_TEXGEN_TEXCOORD,
"a1rgb5_png.grf") == 0)
{
printf("Failed to load GRF 1\n");
WaitLoop();
}
// This material has a palette, but we don't care about it. By setting the
// pointer to NULL it will be marked to be autoedeleted when the material is
// deleted.
if (NE_MaterialTexLoadGRF(Scene2.Material2, NULL, NE_TEXGEN_TEXCOORD,
"a3pal32_png.grf") == 0)
{
printf("Failed to load GRF 2\n");
WaitLoop();
}
while (1)
{
NE_WaitForVBL(0);
NE_ProcessDualArg(Draw3DScene, Draw3DScene2, &Scene1, &Scene2);
}
return 0;
}