1+ #include < RavEngine/App.hpp>
2+ #include < RavEngine/StaticMesh.hpp>
3+ #include < RavEngine/World.hpp>
4+ #include < RavEngine/CameraComponent.hpp>
5+ #include < RavEngine/GameObject.hpp>
6+ #include < RavEngine/Dialogs.hpp>
7+ #include < RavEngine/StartApp.hpp>
8+ #include < RavEngine/MeshCollection.hpp>
9+ #include < SDL3/SDL_dialog.h>
10+ #include < RavEngine/Window.hpp>
11+
12+ using namespace RavEngine ;
13+ using namespace std ;
14+
15+
16+
17+ struct TextureViewerWorld : public RavEngine ::World {
18+
19+ Ref<PBRMaterialInstance> mat;
20+ ComponentHandle<Transform> planeTransform;
21+ TextureViewerWorld () {
22+
23+ auto cubeEntity = Instantiate<GameObject>();
24+
25+ mat = RavEngine::New<PBRMaterialInstance>(Material::Manager::Get<PBRMaterial>());
26+ auto mesh = MeshCollectionStaticManager::Get (" quad" );
27+ cubeEntity.EmplaceComponent <StaticMesh>(mesh, mat);
28+ cubeEntity.GetTransform ().LocalRotateDelta (vector3{deg_to_rad (90 ),0 .f ,0 .f });
29+ planeTransform = cubeEntity;
30+
31+ auto cameraEntity = Instantiate<GameObject>();
32+
33+ auto & cameraComponent = cameraEntity.EmplaceComponent <CameraComponent>();
34+
35+ cameraComponent.SetActive (true );
36+
37+ cubeEntity.GetTransform ().LocalTranslateDelta (vector3 (0 , 0 , -5 ));
38+
39+ auto lightsEntity = Instantiate<GameObject>();
40+ lightsEntity.EmplaceComponent <DirectionalLight>().SetIntensity (4 );
41+ lightsEntity.EmplaceComponent <AmbientLight>().SetIntensity (0.2 );
42+
43+ lightsEntity.GetTransform ().LocalRotateDelta (vector3{ deg_to_rad (45 ), deg_to_rad (45 ),0 });
44+ }
45+
46+ void LoadTexture (const Filesystem::Path& path) {
47+ auto tx = New<Texture>(path);
48+ mat->SetAlbedoTexture (tx);
49+ auto dim = tx->GetTextureSize ();;
50+ auto aspect = (float )dim.width / dim.height ;
51+ planeTransform->SetLocalScale ({ aspect,1 ,1 });
52+ }
53+ };
54+
55+ struct TextureViewerApp : public RavEngine ::App {
56+ constexpr static SDL_DialogFileFilter filters[] = { {" Any file" , " *" } };
57+
58+ Ref<TextureViewerWorld> world;
59+
60+ void OnStartup (int argc, char ** argv) final {
61+
62+ SetWindowTitle (" TextureViewer" );
63+
64+ world = RavEngine::New<TextureViewerWorld>();
65+
66+ AddWorld (world);
67+ LoadNewTexture ();
68+ }
69+
70+ void OnFatal (const std::string_view msg) final {
71+ RavEngine::Dialog::ShowBasic (" Fatal Error" , msg, Dialog::MessageBoxType::Error);
72+ }
73+
74+ void LoadNewTexture () {
75+ SDL_ShowOpenFileDialog ([](void * userdata, const char * const * filelist, int filter) {
76+
77+ auto app = static_cast <TextureViewerApp*>(userdata);
78+ if (filelist == nullptr ) {
79+ Debug::Fatal (" An error occured: {}" , SDL_GetError ());
80+ app->Quit ();
81+ }
82+ if (filelist && *filelist) {
83+ Filesystem::Path chosenFile (*filelist);
84+ app->DispatchMainThread ([app,chosenFile] {
85+ app->world ->LoadTexture (chosenFile);
86+ });
87+ }
88+ else {
89+ app->Quit ();
90+ }
91+
92+
93+ }, this , GetMainWindow ()->window , filters, std::size (filters), NULL , false );
94+ }
95+ };
96+
97+ START_APP (TextureViewerApp)
0 commit comments