klepto2 Posted December 7, 2022 Share Posted December 7, 2022 True, but as soon as you trigger the pbr-pipeline the background and transparent objects are not visible anmyore: just add this to the sample above: auto specmap = LoadTexture("Materials/Environment/Storm/specular.dds"); auto diffmap = LoadTexture("Materials/Environment/Storm/diffuse.dds"); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_BACKGROUND); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_SPECULAR); world->SetEnvironmentMap(diffmap, ENVIRONMENTMAP_DIFFUSE); and you will see, that with tesselation the background is not rendering, without tesselation it works. Windows 10 Pro 64-Bit-Version NVIDIA Geforce 1080 TI Link to comment Share on other sites More sharing options...
Josh Posted December 7, 2022 Author Share Posted December 7, 2022 52 minutes ago, klepto2 said: Another issue is that you can't create terrains higher than 1024. There comes an exception from newton. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 7, 2022 Author Share Posted December 7, 2022 2 hours ago, klepto2 said: True, but as soon as you trigger the pbr-pipeline the background and transparent objects are not visible anmyore: just add this to the sample above: auto specmap = LoadTexture("Materials/Environment/Storm/specular.dds"); auto diffmap = LoadTexture("Materials/Environment/Storm/diffuse.dds"); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_BACKGROUND); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_SPECULAR); world->SetEnvironmentMap(diffmap, ENVIRONMENTMAP_DIFFUSE); and you will see, that with tesselation the background is not rendering, without tesselation it works. Fixed! You will need to call Material::SetTessellation(true) for tessellation to appear, in addition to having it enabled on a per-camera basis. Tessellation is always enabled for terrain, if the camera has the setting enabled. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
klepto2 Posted December 8, 2022 Share Posted December 8, 2022 Works much better now, but i have found another issue: #include "UltraEngine.h" #include "ComponentSystem.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Get the display list auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Terrain Paint", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); world->SetAmbientLight(0); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetFov(70); camera->SetPosition(0, 100, -100); camera->SetRotation(45, 0, 0); camera->SetClearColor(0.125); //Sunlight auto light = CreateDirectionalLight(world); light->SetRotation(45, 35, 0); light->SetColor(2); //Create terrain auto terrain = CreateTerrain(world, 512); terrain->LoadHeightmap("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Terrain/512.r16"); terrain->SetScale(1, 100, 1); //Create base material auto ground = CreateMaterial(); auto diffusemap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/river_small_rocks_diff_4k.dds"); auto normalmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/river_small_rocks_nor_gl_4k.dds"); ground->SetTexture(diffusemap, TEXTURE_DIFFUSE); ground->SetTexture(normalmap, TEXTURE_NORMAL); terrain->SetMaterial(ground); //Create paint material auto rocks = CreateMaterial(); diffusemap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k.dds"); normalmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k_dot3.dds"); auto dispmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k_disp.dds"); rocks->SetTexture(diffusemap, TEXTURE_DIFFUSE); rocks->SetTexture(normalmap, TEXTURE_NORMAL); rocks->SetTexture(dispmap, TEXTURE_DISPLACEMENT); //Camera controls auto actor = CreateActor(camera); actor->AddComponent<CameraControls>(); auto specmap = LoadTexture("Materials/Environment/Storm/specular.dds"); auto diffmap = LoadTexture("Materials/Environment/Storm/diffuse.dds"); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_BACKGROUND); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_SPECULAR); world->SetEnvironmentMap(diffmap, ENVIRONMENTMAP_DIFFUSE); auto plane_mat = CreateMaterial(); plane_mat->SetTessellation(false); plane_mat->SetTransparent(true); plane_mat->SetColor(0.0, 0.0, 1.0, 0.5); auto plane = CreatePlane(world, 2048, 2048,64,64); plane->SetMaterial(plane_mat); plane->SetPosition(0.0, 35.0, 0.0); bool refraction = false; bool tesselation = false; //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyHit(KEY_F1)) camera->SetWireframe(!camera->GetWireframe()); if (window->KeyHit(KEY_F2)) { tesselation = !tesselation; if (tesselation) camera->SetTessellation(8.0); else camera->SetTessellation(0.0); } if (window->KeyHit(KEY_F3)) { refraction = !refraction; camera->SetRefraction(refraction); } if (window->MouseDown(MOUSE_LEFT)) { auto mousepos = window->GetMousePosition(); auto pickinfo = camera->Pick(framebuffer, mousepos.x, mousepos.y); if (pickinfo.success) { if (pickinfo.entity == terrain) { iVec2 pos; pos.x = Round(pickinfo.position.x) + terrain->resolution.x / 2; pos.y = Round(pickinfo.position.z) + terrain->resolution.y / 2; int radius = 20; for (int x = pos.x - radius; x < pos.x + radius; ++x) { for (int y = pos.y - radius; y < pos.y + radius; ++y) { float strength = 1.0f - Vec3(x, y, 0).DistanceToPoint(Vec3(pos.x, pos.y, 0)) / float(radius); if (strength <= 0.0f) continue; float wt = terrain->GetMaterialWeight(x, y, rocks); wt += 0.1f; terrain->SetMaterial(x, y, rocks, wt); } } } } } world->Update(); world->Render(framebuffer); WString title = "Tesselation - Test: "; title += "F1 - Wireframe(" + WString(camera->GetWireframe() ? "true" : "false") + ") "; title += "F2 - Tesselation(" + WString(tesselation ? "true" : "false") + ") "; title += "F3 - Refraction(" + WString(refraction ? "true" : "false") + ") "; window->SetText(title); } return 0; } if you run this, you will see a terrain with a transparent plane (as pseudo water). The water is only visible under the following conditions: Tesselation on, Refraction off Tesselation off, Refraction on Tesselation off, Refrection off (just to clarify that it all works, when now refraction is used) Also the plane_mat->SetTesselation has no effect. The plane is always tesselated when the camera uses tesselation. Windows 10 Pro 64-Bit-Version NVIDIA Geforce 1080 TI Link to comment Share on other sites More sharing options...
Josh Posted December 8, 2022 Author Share Posted December 8, 2022 Okay, I put some more time into it and I think the tessellation problems are fixed. It's a little bit complicated.... I think it is all working correctly now. My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 9, 2022 Author Share Posted December 9, 2022 Client version 14 is uploaded. This adds a list of "files never to update" in the settings panel: https://www.ultraengine.com/community/topic/61132-ultra-engine-testing/#comment-296282 This will prevent files like the project file or main.cpp from ever being overwritten. 3 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 9, 2022 Author Share Posted December 9, 2022 You can use FetchUrl to talk to web APIs. This is what the client app uses to communicate with this site! My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted December 9, 2022 Share Posted December 9, 2022 I wonder if the backups for files that have been updated should be moved to a single folder in the project directory rather than having mountains of .bak's lurking about, especially in the shaders folder. It could keep the same hierarchy in the backups folder so you can find stuff. I take it Ultra is going to be heavily updated over the coming months / years so it could get out of hand pretty quick. Just a thought EDIT : Or has is been done already.. Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 "backup" folder will be created in the project directory. Inside, the subfolder structure of the project will be created and file revisions will be saved. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 In practice I am finding the backup files don't take much space. Binaries for plugins rarely change. Most of the project template files are small text files. Shader SPVs are probably the biggest files that frequently change, but they are still pretty small. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted December 10, 2022 Share Posted December 10, 2022 Have you got physics shape visualization implemented yet? Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 I don't think it's in there yet. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted December 10, 2022 Share Posted December 10, 2022 This has me extremely puzzled - I just started working with kinematic joints again, and all was good, I could set its position with SetPose() and other things, but then a few builds later CreateKinematicJoint() started returning nullptr for no reason same as the slider joint too. I uninstalled Ultra and reinstalled with no luck. Here's an example project where 'k' is empty. #include "UltraEngine.h" #include "ComponentSystem.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { auto plugin = LoadPlugin("Plugins/LELegacy.dll"); //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetFov(70); camera->SetPosition(0, 1, -3); //Create a light auto light = CreateBoxLight(world); light->SetRotation(35, 45, 0); light->SetRange(-10, 10); auto p = CreatePivot(world); auto k = CreateKinematicJoint(Vec3(0, 0, 0), p); //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { world->Update(); world->Render(framebuffer); } return 0; } Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 The mass of p is zero. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted December 10, 2022 Share Posted December 10, 2022 Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 Benchmarks are updated with build-in FPS displays, since FRAPS is reportedly not working with some Vulkan drivers: https://github.com/UltraEngine/Benchmarks 2 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 Client version 15 is available in the first post in this thread. All previous builds will stop working with no warnings in a few days. This update adds a check to see if the client version is supported (this will rarely change) and has better license authentication. The client version will be shown in the lower left corner of the window. 2 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
reepblue Posted December 10, 2022 Share Posted December 10, 2022 I find it easier to use the build date to define build versions. This is so I don't forget to change the version numbers before releasing builds. Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
reepblue Posted December 10, 2022 Share Posted December 10, 2022 6 hours ago, Josh said: Benchmarks are updated with build-in FPS displays, since FRAPS is reportedly not working with some Vulkan drivers: https://github.com/UltraEngine/Benchmarks I decided to run some of these with my GTX 1050 TI with 2 GB of VRAM and here are my weird results. Animation Leadwerks: 4 FPS Ultra: 300 FPS Unity (DX11): 54 FPS Unity (Vulkan): 56 FPS Instanced Geometry Leadwerks: 48 FPS Ultra: 440 FPS Unity (DX11): 32 FPS Unity (Vulkan): 32 FPS Lighting Leadwerks: 380-500 FPS Ultra: 170 FPS Unity (DX11): 88 FPS Unity (Vulkan): 100 FPS Unique Geometry Leadwerks: 42 FPS Ultra: 1223 FPS Unity (DX11): 2 FPS Unity (Vulkan): 2 FPS I'm confused why Leadwerks is fastest in the lighting, and why Ultra is faster running unique geometry over instanced geometry. 1 Cyclone - Ultra Game System - Component Preprocessor - Tex2TGA - Darkness Awaits Template (Leadwerks) If you like my work, consider supporting me on Patreon! Link to comment Share on other sites More sharing options...
Josh Posted December 10, 2022 Author Share Posted December 10, 2022 Ultra runs the unique geometry test faster because it has fewer objects. The Instanced geometry test has 32768 boxes and the unique geometry test only has 4096 boxes. Since unique geometry is no problem for Ultra, that one runs much faster. On my sort of low-end laptop GPU Ultra is slightly faster than Leadwerks on the lighting test. On my GEForce 1080 Ultra was running much faster. However, that was a build from ITSEC last year. I tried the old build on my laptop, and it was a little bit slower than the current build on the same laptop. I still have some questions about that test, but right now it looks like Leadwerks might run faster on low-end cards due to the more expensive PBR calculations, whereas Ultra runs faster on mid to high end cards due to the decreased memory bandwidth of the forward renderer. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
SpiderPig Posted December 10, 2022 Share Posted December 10, 2022 I threw together a quick example for you showing some of the issues I'm still seeing with entities popping in and out. The green cube pops in and out and in my other project so does the player cylinder, doesn't seem to happen here though. The entities are always in the centre of the camera and they still pop in and out. If you remove the player cylinder the blue cube seems to fine, it's just the cube attached the slider. #include "UltraEngine.h" #include "ComponentSystem.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { auto plugin = LoadPlugin("Plugins/LELegacy.dll"); //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetFov(70); //Create a light auto light = CreateDirectionalLight(world); light->SetRotation(35, 45, 0); light->SetRange(-10, 10); auto floor = CreateBox(world, 100, 0.1, 100); floor->SetPosition(0, -1, 0); auto hub_pivot = CreateBox(world, 0.25f); hub_pivot->SetCollider(nullptr); hub_pivot->SetMass(1.0f); hub_pivot->SetColor(0, 1, 0); auto slider_pivot = CreateBox(world, 0.25f); slider_pivot->SetMass(1.0f); slider_pivot->SetColor(0, 0, 1); auto player = CreateCylinder(world, 0.5f, 1.8f); player->SetCollider(nullptr); player->SetParent(slider_pivot); auto cam_pivot = CreatePivot(world); cam_pivot->SetParent(slider_pivot); cam_pivot->SetPosition(0.0f, 2.5f, 0.0f, true); camera->SetParent(cam_pivot); camera->SetPosition(0.0f, 1.8f, -5.0f, true); camera->SetRotation(25.0f, 0.0f, 0.0f); auto k = CreateKinematicJoint(Vec3(0, 0, 0), hub_pivot); auto s = CreateSliderJoint(Vec3(0, 0, 0), Vec3(0, 1, 0), hub_pivot, slider_pivot); Vec3 mousepos; float lookspeed = 0.1f; float looksmoothing = 0.5f; //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { auto _displaySize = window->GetSize(); float cx = Round((float)_displaySize.x / 2.0f); float cy = Round((float)_displaySize.y / 2.0f); auto mouse_position = Vec3(window->GetMousePosition().x, window->GetMousePosition().y, window->GetMousePosition().z); window->SetMousePosition(cx, cy); mouse_position = mouse_position * looksmoothing + mousepos * (1 - looksmoothing); auto dx = (mouse_position.x - cx) * lookspeed; auto dy = (mouse_position.y - cy) * lookspeed; auto camrot = cam_pivot->GetRotation(); camrot.x += dy; camrot.y += dx; cam_pivot->SetRotation(camrot); mousepos = mouse_position; float angle = cam_pivot->GetRotation().y; Vec3 pos = hub_pivot->GetPosition(true); Vec3 up = Vec3(0.0f, 1.0f, 0.0f); Vec3 direction = Vec3(Sin(angle), 0, Cos(angle)); Vec3 strafe = direction.Cross(up).Normalize(); if (window->KeyDown(KEY_W)) { k->SetPose(pos + direction, Vec3()); } if (window->KeyDown(KEY_S)) { k->SetPose(pos - direction, Vec3()); } if (window->KeyDown(KEY_A)) { k->SetPose(pos + strafe, Vec3()); } if (window->KeyDown(KEY_D)) { k->SetPose(pos - strafe, Vec3()); } world->Update(); world->Render(framebuffer); } return 0; } Link to comment Share on other sites More sharing options...
Josh Posted December 11, 2022 Author Share Posted December 11, 2022 Ah yes, I have seen this myself. I need to get that worked out. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
klepto2 Posted December 11, 2022 Share Posted December 11, 2022 #include "UltraEngine.h" #include "ComponentSystem.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { //Get the display list auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Terrain Paint", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); world->SetAmbientLight(0); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetFov(70); camera->SetPosition(0, 100, -100); camera->SetRotation(45, 0, 0); camera->SetClearColor(0.125); //Sunlight auto light = CreateDirectionalLight(world); light->SetRotation(45, 35, 0); light->SetColor(2); //Create terrain auto terrain = CreateTerrain(world, 512); terrain->LoadHeightmap("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Terrain/512.r16"); terrain->SetScale(1, 100, 1); //Create base material auto ground = CreateMaterial(); auto diffusemap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/river_small_rocks_diff_4k.dds"); auto normalmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/river_small_rocks_nor_gl_4k.dds"); ground->SetTexture(diffusemap, TEXTURE_DIFFUSE); ground->SetTexture(normalmap, TEXTURE_NORMAL); terrain->SetMaterial(ground); //Create paint material auto rocks = CreateMaterial(); diffusemap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k.dds"); normalmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k_dot3.dds"); auto dispmap = LoadTexture("https://raw.githubusercontent.com/UltraEngine/Documentation/master/Assets/Materials/Ground/Rocks_Dirt_Ground_2k_disp.dds"); rocks->SetTexture(diffusemap, TEXTURE_DIFFUSE); rocks->SetTexture(normalmap, TEXTURE_NORMAL); rocks->SetTexture(dispmap, TEXTURE_DISPLACEMENT); rocks->SetDisplacement(0.5); //Camera controls auto actor = CreateActor(camera); actor->AddComponent<CameraControls>(); auto specmap = LoadTexture("Materials/Environment/Storm/specular.dds"); auto diffmap = LoadTexture("Materials/Environment/Storm/diffuse.dds"); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_BACKGROUND); world->SetEnvironmentMap(specmap, ENVIRONMENTMAP_SPECULAR); world->SetEnvironmentMap(diffmap, ENVIRONMENTMAP_DIFFUSE); auto plane_mat = CreateMaterial(); plane_mat->SetTessellation(true); plane_mat->SetTransparent(true); plane_mat->SetColor(0.0, 0.0, 1.0, 0.5); auto plane = CreatePlane(world, 4096, 4096, 64, 64); plane->SetMaterial(plane_mat); plane->SetPosition(0.0, 35.0, 0.0); auto camera_second = CreateCamera(world); camera_second->SetTessellation(2.0); auto textbuffer = CreateTextureBuffer(256, 256); camera_second->SetRenderTarget(textbuffer); bool refraction = false; bool tesselation = false; //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyHit(KEY_F1)) camera->SetWireframe(!camera->GetWireframe()); if (window->KeyHit(KEY_F2)) { tesselation = !tesselation; if (tesselation) camera->SetTessellation(32.0); else camera->SetTessellation(0.0); } if (window->KeyHit(KEY_F3)) { refraction = !refraction; camera->SetRefraction(refraction); } if (window->MouseDown(MOUSE_LEFT)) { auto mousepos = window->GetMousePosition(); auto pickinfo = camera->Pick(framebuffer, mousepos.x, mousepos.y); if (pickinfo.success) { if (pickinfo.entity == terrain) { iVec2 pos; pos.x = Round(pickinfo.position.x) + terrain->resolution.x / 2; pos.y = Round(pickinfo.position.z) + terrain->resolution.y / 2; int radius = 20; for (int x = pos.x - radius; x < pos.x + radius; ++x) { for (int y = pos.y - radius; y < pos.y + radius; ++y) { float strength = 1.0f - Vec3(x, y, 0).DistanceToPoint(Vec3(pos.x, pos.y, 0)) / float(radius); if (strength <= 0.0f) continue; float wt = terrain->GetMaterialWeight(x, y, rocks); wt += 0.1f; terrain->SetMaterial(x, y, rocks, wt); } } } } } world->Update(); world->Render(framebuffer); WString title = "Tesselation - Test: "; title += "F1 - Wireframe(" + WString(camera->GetWireframe() ? "true" : "false") + ") "; title += "F2 - Tesselation(" + WString(tesselation ? "true" : "false") + ") "; title += "F3 - Refraction(" + WString(refraction ? "true" : "false") + ") "; window->SetText(title); } return 0; } 1. Tesselation and Refraction (with transparent objects) still doesn't work. 2. in this sample i have a second camera with a high tesselation (2.0) and the main camera has a tesselation-factor of 32. Now if you turn on tesselation you might notice that everything is tesselated with factor 2.0 instead of 32.0. In more complex samples you can see that it might be a uniform issue as it seems to switch between 2 and 32 randomly. Windows 10 Pro 64-Bit-Version NVIDIA Geforce 1080 TI Link to comment Share on other sites More sharing options...
Josh Posted December 11, 2022 Author Share Posted December 11, 2022 @SpiderPig Here is a simpler app that demonstrates the erorr: #include "UltraEngine.h" using namespace UltraEngine; int main(int argc, const char* argv[]) { auto plugin = LoadPlugin("Plugins/LELegacy.dll"); //Get the displays auto displays = GetDisplays(); //Create a window auto window = CreateWindow("Ultra Engine", 0, 0, 1280, 720, displays[0], WINDOW_CENTER | WINDOW_TITLEBAR); //Create a world auto world = CreateWorld(); //Create a framebuffer auto framebuffer = CreateFramebuffer(window); //Create a camera auto camera = CreateCamera(world); camera->SetClearColor(0.125); camera->SetFov(70); camera->SetPosition(0, 0, -4); auto box = CreateBox(world); box->SetColor(1, 0, 0); //Main loop while (window->Closed() == false and window->KeyDown(KEY_ESCAPE) == false) { if (window->KeyDown(KEY_D)) { camera->Move(1, 0, 0); box->Move(1, 0, 0); } if (window->KeyDown(KEY_A)) { camera->Move(-1, 0, 0); box->Move(-1, 0, 0); } world->Update(); world->Render(framebuffer); } return 0; } 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Josh Posted December 11, 2022 Author Share Posted December 11, 2022 Update Fixed culling bug, I think Component::LoadState, SaveState are now Component::Load/Save. 1 My job is to make tools you love, with the features you want, and performance you can't live without. Link to comment Share on other sites More sharing options...
Recommended Posts