Browse Source

almost done

meemknight 1 year ago
parent
commit
15649839a9

+ 46 - 13
Pika/core/pikaSTD/pikaGL/frameBuffer.cpp

@@ -5,8 +5,11 @@ namespace pika
 	namespace GL
 	{
 
-		void PikaFramebuffer::createFramebuffer(unsigned int w, unsigned int h)
+		void PikaFramebuffer::createFramebuffer(unsigned int w, unsigned int h, bool hasDepth)
 		{
+			this->w = w;
+			this->h = h;
+
 			glGenFramebuffers(1, &fbo);
 			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
 
@@ -21,15 +24,19 @@ namespace pika
 
 			//glDrawBuffer(GL_COLOR_ATTACHMENT0); //todo look into this function
 
-			//glGenTextures(1, &depthtTexture); //todo add depth stuff
-			//glBindTexture(GL_TEXTURE_2D, depthtTexture);
+			if (hasDepth)
+			{
+				glGenTextures(1, &depthTexture); //todo add depth stuff
+				glBindTexture(GL_TEXTURE_2D, depthTexture);
 
-			//glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, w, h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, NULL);
+				glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, w, h, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, nullptr);
 
-			//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
-			//glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
+				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
+				glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
 
-			//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthtTexture, 0);
+				glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, depthTexture, 0);
+			}
+			
 
 			glBindTexture(GL_TEXTURE_2D, 0);
 			glBindFramebuffer(GL_FRAMEBUFFER, 0);
@@ -49,17 +56,43 @@ namespace pika
 				glDeleteTextures(1, &texture);
 				texture = 0;
 			}
+
+			if (depthTexture)
+			{
+				glDeleteTextures(1, &depthTexture);
+				depthTexture = 0;
+			}
 		}
 
 		void PikaFramebuffer::resizeFramebuffer(unsigned int w, unsigned int h)
 		{
-			glBindTexture(GL_TEXTURE_2D, texture);
-			glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+			if (this->w != w || this->h != h)
+			{
+				this->w = w;
+				this->h = h;
 
-			//glBindTexture(GL_TEXTURE_2D, depthtTexture);
-			//glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
-			
-			glBindTexture(GL_TEXTURE_2D, 0);
+				glBindTexture(GL_TEXTURE_2D, texture);
+				glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+
+				if (depthTexture)
+				{
+					glBindTexture(GL_TEXTURE_2D, depthTexture);
+					glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
+				}
+
+				glBindTexture(GL_TEXTURE_2D, 0);
+			}
+
+		}
+
+		void PikaFramebuffer::clear()
+		{
+			glBindFramebuffer(GL_FRAMEBUFFER, fbo);
+			//glClearColor(1, 1, 1, 0);
+			glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
+			//glClearColor(0, 0, 0, 0);
+
+			glBindFramebuffer(GL_FRAMEBUFFER, 0);
 		}
 
 	}

+ 8 - 2
Pika/core/pikaSTD/pikaGL/frameBuffer.h

@@ -10,14 +10,20 @@ namespace pika
 		struct PikaFramebuffer
 		{
 			GLuint fbo = 0;
-			GLuint texture = 0; 
+			GLuint texture = 0;
+			GLuint depthTexture = 0;
 
-			void createFramebuffer(unsigned int w, unsigned int h);
+			unsigned int w = 0;
+			unsigned int h = 0;
+
+			void createFramebuffer(unsigned int w, unsigned int h, bool hasDepth = 0);
 
 			void deleteFramebuffer();
 
 			void resizeFramebuffer(unsigned int w, unsigned int h);
 		
+			void clear();
+
 		};
 
 

+ 156 - 66
Pika/gameplay/containers/threeDGameExample/threeDGameExample.h

@@ -13,7 +13,7 @@
 #include <sushi/sushi.h>
 #include <engineLibraresSupport/sushi/engineSushiSupport.h>
 
-
+//todo engine: don't remove notifications untill the user can see them (the engine has focus)
 struct ThreeDGameExample: public Container
 {
 	enum Animations
@@ -27,6 +27,9 @@ struct ThreeDGameExample: public Container
 		zombieRun,
 	};
 
+
+	bool player2joined = 0;
+
 	//todo user can request imgui ids; shortcut manager context; allocators
 	static ContainerStaticInfo containerInfo()
 	{
@@ -58,9 +61,15 @@ struct ThreeDGameExample: public Container
 		gl3d::Entity legs[2];
 
 		float armAngle = 0;
+
+		gl3d::PointLight pointLight;
+		gl3d::SpotLight spotLight;
+
+		McDungeonsGameplay::PhysicsComponent physics;
 	};
 
-	PlayerModel playerModel;
+	PlayerModel playerModel1;
+	PlayerModel playerModel2;
 
 	std::vector<Enemy> enemies;
 	float enemySpawnTimer = 5;
@@ -79,6 +88,8 @@ struct ThreeDGameExample: public Container
 	gl2d::Renderer2D renderer2d;
 	gl2d::Font font;
 
+	pika::GL::PikaFramebuffer frameBuffers[2];
+
 	//todo add this in the renderer
 	//todo add a default material if material left blank or something
 	gl3d::Model createCubeModel(gl3d::Renderer3D &renderer, glm::vec3 color, float metallic = 1)
@@ -252,24 +263,27 @@ struct ThreeDGameExample: public Container
 
 	}
 
-	void createPlayerEntity(gl3d::Renderer3D &renderer, glm::vec3 color)
+	void createPlayerEntity(gl3d::Renderer3D &renderer, glm::vec3 color, PlayerModel& playerModel)
 	{
-		auto cube = createCubeModel(renderer, color);
+		auto cube = createCubeModel(renderer, color, 0);
+
+		playerModel.torso = renderer.createEntity(cube, {}, false, true, false);
 
-		playerModel.torso = renderer.createEntity(cube, {}, false);
+		playerModel.legs[0] = renderer.createEntity(cube, {}, false, true, false);
+		playerModel.legs[1] = renderer.createEntity(cube, {}, false, true, false);
 
-		playerModel.legs[0] = renderer.createEntity(cube, {}, false);
-		playerModel.legs[1] = renderer.createEntity(cube, {}, false);
+		playerModel.hands[0] = renderer.createEntity(cube, {}, false, true, false);
+		playerModel.hands[1] = renderer.createEntity(cube, {}, false, true, false);
 
-		playerModel.hands[0] = renderer.createEntity(cube, {}, false);
-		playerModel.hands[1] = renderer.createEntity(cube, {}, false);
+		playerModel.head = renderer.createEntity(cube, {}, false, true, false);
 
-		playerModel.head = renderer.createEntity(cube, {}, false);
+		playerModel.pointLight = renderer.createPointLight({}, glm::vec3{1.f}, 20, 1);
+		playerModel.spotLight = renderer.createSpotLight({}, glm::radians(50.f), {0,0}, 40, 10, glm::vec3(2.f));
 	}
 
 	gl3d::Model createPlane(gl3d::Renderer3D &renderer)
 	{
-		float uv = 1;
+		float uv = 10;
 		float size = 200;
 		std::vector<unsigned int> ind = {0,   1,  2,  0,  2,  3};
 		std::vector<float> topVer = {
@@ -290,9 +304,15 @@ struct ThreeDGameExample: public Container
 				0, 1 * uv,			 //uv
 		};
 
-		auto material =  renderer.createMaterial(0, {1,1,1,1}, 0, 1);
+		//auto material =  renderer.createMaterial(0, {1,1,1,1}, 0, 1);
+		auto material =  renderer.loadMaterial(PIKA_RESOURCES_PATH "materials/rustedIron.mtl", gl3d::maxQuality);
 
-		return renderer.createModelFromData(material, "plane",
+		if (material.empty())
+		{
+			material.push_back(renderer.createMaterial(0, {1,1,1,1}, 0, 1));
+		}
+
+		return renderer.createModelFromData(material[0], "plane",
 			topVer.size(), topVer.data(), ind.size(),
 			ind.data());
 	}
@@ -330,11 +350,11 @@ struct ThreeDGameExample: public Container
 			});
 
 		spotLights.push_back(renderer.createSpotLight({position.x - 1.5, 8.1, position.y},
-			glm::radians(50.f), glm::vec3(0, -1, 0), 20, 2, glm::vec3(20.f), 1.f, 0));
+			glm::radians(55.f), glm::vec3(0, -1, 0), 20, 2, glm::vec3(1.f), 1.f, 0));
 
 		spotLights.push_back
 		(renderer.createSpotLight({position.x + 1.5, 8.1, position.y},
-			glm::radians(50.f), glm::vec3(0, -1, 0), 20, 2, glm::vec3(20.f), 1.f, 0));
+			glm::radians(55.f), glm::vec3(0, -1, 0), 20, 2, glm::vec3(1.f), 1.f, 0));
 
 
 	}
@@ -374,9 +394,12 @@ struct ThreeDGameExample: public Container
 
 	bool create(RequestedContainerInfo &requestedInfo, pika::StaticString<256> commandLineArgument)
 	{
-		renderer2d.create(requestedInfo.requestedFBO.fbo);
-		font = pika::gl2d::loadFont(PIKA_RESOURCES_PATH "arial.ttf", requestedInfo);
+		
+		renderer2d.create(requestedInfo.requestedFBO.fbo, 50);
+		//font = pika::gl2d::loadFont(PIKA_RESOURCES_PATH "arial.ttf", requestedInfo);
 
+		frameBuffers[0].createFramebuffer(1, 1, true);
+		frameBuffers[1].createFramebuffer(1, 1, true);
 		
 		renderer.setErrorCallback(&errorCallbackCustom, &requestedInfo);
 		renderer.fileOpener.userData = &requestedInfo;
@@ -408,7 +431,7 @@ struct ThreeDGameExample: public Container
 
 		//renderer.
 
-		createPlayerEntity(renderer, {1,1,0});
+		createPlayerEntity(renderer, {1,1,0}, playerModel1);
 
 		createStalpi();
 
@@ -423,7 +446,7 @@ struct ThreeDGameExample: public Container
 		groundEntity = renderer.createEntity(groundModel, t);
 
 
-		renderer.createDirectionalLight(glm::normalize(glm::vec3{-0.175,-0.577, -0.798}));
+		renderer.createDirectionalLight(glm::normalize(glm::vec3{-0.175,-0.577, -0.798}), glm::vec3{0.25f});
 	
 
 		{
@@ -445,9 +468,6 @@ struct ThreeDGameExample: public Container
 	float attackCulldown = 0;
 	bool freeCamera = 0;
 
-
-	McDungeonsGameplay::PhysicsComponent playerPhysics;
-
 	bool update(pika::Input input, pika::WindowState windowState,
 		RequestedContainerInfo &requestedInfo)
 	{
@@ -463,12 +483,24 @@ struct ThreeDGameExample: public Container
 		glDisable(GL_LINE_SMOOTH);
 		glDisable(GL_MULTISAMPLE);
 
-		renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
-		renderer.camera.aspectRatio = (float)windowState.windowW / windowState.windowH; //todo do this in update
+		//renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
+		//renderer.camera.aspectRatio = (float)windowState.windowW / windowState.windowH; //todo do this in update
 
 		renderer2d.updateWindowMetrics(windowState.windowW, windowState.windowH);
 	#pragma endregion
 
+		frameBuffers[0].clear();
+		frameBuffers[0].resizeFramebuffer(windowState.windowW / 2, windowState.windowH);
+		frameBuffers[1].clear();
+		frameBuffers[1].resizeFramebuffer(windowState.windowW/2, windowState.windowH);
+
+
+		if (!player2joined && input.buttons[pika::Button::Enter].pressed())
+		{
+			player2joined = true;
+			createPlayerEntity(renderer, {1,0,0}, playerModel2);
+
+		}
 
 		if (enemySpawnTimer < 0)
 		{
@@ -497,6 +529,21 @@ struct ThreeDGameExample: public Container
 		}
 
 		//editor.update(requestedInfo.requestedImguiIds, renderer, input, 4, requestedInfo, {windowState.windowW,windowState.windowH});
+	
+	#pragma region spot lights
+
+		for (int i = 0; i < spotLights.size(); i++)
+		{
+
+			//auto t = renderer.getSpotLightDirection(spotLights[i]);
+
+			renderer.setSpotLightDirection(spotLights[i], gl3d::fromAnglesToDirection(glm::radians(190.f), 
+				((i%2)*2-1) * clock()*0.0003f + i));
+
+		}
+
+	#pragma endregion
+
 
 	#pragma region player
 		{
@@ -508,7 +555,7 @@ struct ThreeDGameExample: public Container
 				if (!freeCamera)
 				{
 
-					auto updatePlayer = [&](PlayerModel &p)
+					auto updatePlayer = [&](PlayerModel &p, bool differentInput = 0)
 					{
 
 						glm::vec2 dir = {};
@@ -536,7 +583,7 @@ struct ThreeDGameExample: public Container
 						{
 							dir = glm::normalize(dir);
 
-							playerPhysics.desiredRotation = std::atan2(dir.x, dir.y);
+							p.physics.desiredRotation = std::atan2(dir.x, dir.y);
 							
 							p.armAngle = sin(clock()/100.f);
 
@@ -566,7 +613,7 @@ struct ThreeDGameExample: public Container
 						}
 
 						float speed = 3;
-						playerPhysics.position += dir * input.deltaTime * speed;
+						p.physics.position += dir * input.deltaTime * speed;
 
 
 						if (input.buttons[pika::Button::Space].pressed() && attackCulldown <= 0)
@@ -577,7 +624,7 @@ struct ThreeDGameExample: public Container
 
 							for (int i = 0; i < enemies.size(); i++)
 							{
-								float d = glm::distance(playerPhysics.position, enemies[i].physics.position);
+								float d = glm::distance(p.physics.position, enemies[i].physics.position);
 								if (d < 1.5f)
 								{
 									enemies[i].life -= 0.4;
@@ -595,7 +642,7 @@ struct ThreeDGameExample: public Container
 
 									if (d != 0)
 									{
-										dir = (enemies[i].physics.position - playerPhysics.position) / d;
+										dir = (enemies[i].physics.position - p.physics.position) / d;
 									}
 
 									enemies[i].physics.position += dir * 4.0f;
@@ -617,16 +664,16 @@ struct ThreeDGameExample: public Container
 								float limbRotation = p.armAngle;
 
 								renderer.setEntityTransform(p.torso,
-									{{playerPhysics.position.x, 2.50, playerPhysics.position.y}, {0,
-									playerPhysics.rotation, 0}, {0.5,1,0.25}});
+									{{p.physics.position.x, 2.50, p.physics.position.y}, {0,
+									p.physics.rotation, 0}, {0.5,1,0.25}});
 
 								renderer.setEntityTransform(p.head,
-									{{playerPhysics.position.x, 3.0, playerPhysics.position.y}, {0,
-									playerPhysics.rotation, 0}, {0.5,0.5,0.5}});
+									{{p.physics.position.x, 3.0, p.physics.position.y}, {0,
+									p.physics.rotation, 0}, {0.5,0.5,0.5}});
 
 								glm::mat4 legMatrix =
-									glm::translate(glm::vec3{playerPhysics.position.x, 0.75, playerPhysics.position.y}) *
-									glm::rotate(playerPhysics.rotation, glm::vec3{0,0.75,0}) *
+									glm::translate(glm::vec3{p.physics.position.x, 0.75, p.physics.position.y}) *
+									glm::rotate(p.physics.rotation, glm::vec3{0,0.75,0}) *
 									glm::translate(glm::vec3{0, 0.75 / 2.f, 0}) *
 									glm::rotate(limbRotation, glm::vec3{1,0,0}) *
 									glm::translate(glm::vec3{-0.25, -0.75 / 2.f, 0}) *
@@ -636,8 +683,8 @@ struct ThreeDGameExample: public Container
 								legTransform.setFromMatrix(legMatrix);
 
 								glm::mat4 legMatrix2 =
-									glm::translate(glm::vec3{playerPhysics.position.x, 0.75, playerPhysics.position.y}) *
-									glm::rotate(playerPhysics.rotation, glm::vec3{0,0.75,0}) *
+									glm::translate(glm::vec3{p.physics.position.x, 0.75, p.physics.position.y}) *
+									glm::rotate(p.physics.rotation, glm::vec3{0,0.75,0}) *
 									glm::translate(glm::vec3{0, 0.75 / 2.f, 0}) *
 									glm::rotate(-limbRotation, glm::vec3{1,0,0}) *
 									glm::translate(glm::vec3{0.25, -0.75 / 2.f, 0}) *
@@ -650,8 +697,8 @@ struct ThreeDGameExample: public Container
 
 
 								glm::mat4 armMatrix =
-									glm::translate(glm::vec3{playerPhysics.position.x, 1.75, playerPhysics.position.y}) *
-									glm::rotate(playerPhysics.rotation, glm::vec3{0,0.75,0}) *
+									glm::translate(glm::vec3{p.physics.position.x, 1.75, p.physics.position.y}) *
+									glm::rotate(p.physics.rotation, glm::vec3{0,0.75,0}) *
 									glm::translate(glm::vec3{0, 0.75 / 2.f, 0}) *
 									glm::rotate(-limbRotation, glm::vec3{1,0,0}) *
 									glm::translate(glm::vec3{-0.75, -0.75 / 2.f, 0}) *
@@ -660,8 +707,8 @@ struct ThreeDGameExample: public Container
 								armTransform.setFromMatrix(armMatrix);
 
 								glm::mat4 armMatrix2 =
-									glm::translate(glm::vec3{playerPhysics.position.x, 1.75, playerPhysics.position.y}) *
-									glm::rotate(playerPhysics.rotation, glm::vec3{0,0.75,0}) *
+									glm::translate(glm::vec3{p.physics.position.x, 1.75, p.physics.position.y}) *
+									glm::rotate(p.physics.rotation, glm::vec3{0,0.75,0}) *
 									glm::translate(glm::vec3{0, 0.75 / 2.f, 0}) *
 									glm::rotate(limbRotation, glm::vec3{1,0,0}) *
 									glm::translate(glm::vec3{0.75, -0.75 / 2.f, 0}) *
@@ -680,9 +727,26 @@ struct ThreeDGameExample: public Container
 
 							setPos(p);
 						}
+
+						renderer.setPointLightPosition(p.pointLight, glm::vec3(p.physics.position.x,
+							1, p.physics.position.y));
+
+						renderer.setSpotLightPosition(p.spotLight, glm::vec3(p.physics.position.x,
+							1, p.physics.position.y));
+
+						renderer.setSpotLightDirection(p.spotLight,
+							gl3d::fromAnglesToDirection(glm::radians(90.f), -p.physics.rotation
+							+ glm::radians(180.f)));
 					};
 
-					updatePlayer(playerModel);
+					updatePlayer(playerModel1, false);
+
+					if (player2joined)
+					{
+						updatePlayer(playerModel2, true);
+					}
+					
+
 				}
 			}
 
@@ -742,10 +806,14 @@ struct ThreeDGameExample: public Container
 
 			};
 
-			solveRotation(playerPhysics);
+			solveRotation(playerModel1.physics);
+			playerModel1.physics.updateMove();
 
-			//resolveConstrains(playerPhysics);
-			playerPhysics.updateMove();
+			if (player2joined)
+			{
+				solveRotation(playerModel2.physics);
+				playerModel2.physics.updateMove();
+			}
 
 			auto setTransform = [&](McDungeonsGameplay::PhysicsComponent &p, gl3d::Entity &e)
 			{
@@ -758,7 +826,7 @@ struct ThreeDGameExample: public Container
 			};
 
 		#pragma region player position
-			glm::vec3 playerPos = {playerPhysics.position.x, -0.5, playerPhysics.position.y};
+			glm::vec3 playerPos = {playerModel1.physics.position.x, -0.5, playerModel1.physics.position.y};
 			glm::vec3 cameraPos = {};
 			{
 				glm::vec3 cameraViewDir = glm::normalize(glm::vec3(-1, 0.8, 1));
@@ -768,12 +836,12 @@ struct ThreeDGameExample: public Container
 
 			for (auto &e : enemies)
 			{
-				float d = glm::distance(e.physics.position, playerPhysics.position);
+				float d = glm::distance(e.physics.position, playerModel1.physics.position);
 				if (d < 8.f)
 				{
 					if (d > 1.f)
 					{
-						glm::vec2 dir = glm::normalize(playerPhysics.position - e.physics.position);
+						glm::vec2 dir = glm::normalize(playerModel1.physics.position - e.physics.position);
 						float speed = 1.4;
 						e.physics.position += dir * input.deltaTime * speed;
 			
@@ -819,23 +887,6 @@ struct ThreeDGameExample: public Container
 			}
 
 
-#pragma region sword
-	//{
-	//	gl3d::Transform t;
-	//	renderer.getEntityJointTransform(player, "arm.r", t);
-	//	t.scale = glm::vec3(0.5);
-	//
-	//	gl3d::Transform offset;
-	//	offset.rotation.x = glm::radians(90.f);
-	//	//offset.position.y = -1.f;
-	//
-	//	t.setFromMatrix(t.getTransformMatrix() * offset.getTransformMatrix());
-	//
-	//	renderer.setEntityTransform(sword, t);
-	//}
-#pragma endregion
-
-
 			if (!freeCamera)
 			{
 				renderer.camera.position = cameraPos;
@@ -855,7 +906,39 @@ struct ThreeDGameExample: public Container
 
 	#pragma region render3d
 
-		renderer.render(input.deltaTime);
+		if (player2joined && !freeCamera)
+		{
+
+			renderer.frameBuffer = frameBuffers[0].fbo;
+			renderer.updateWindowMetrics(windowState.windowW/2, windowState.windowH);
+			renderer.camera.aspectRatio = (float)(windowState.windowW/2) / windowState.windowH;
+			renderer.render(input.deltaTime);
+
+			renderer.frameBuffer = frameBuffers[1].fbo;
+			//renderer.updateWindowMetrics(windowState.windowW / 2, windowState.windowH);
+			renderer.camera.aspectRatio = (float)(windowState.windowW / 2) / windowState.windowH;
+			renderer.render(0);
+
+			gl2d::Texture t1; t1.id = frameBuffers[0].texture;
+			gl2d::Texture t2; t2.id = frameBuffers[1].texture;
+			renderer2d.renderRectangle({0,0, windowState.windowW / 2, windowState.windowH}, t1);
+			renderer2d.renderRectangle({windowState.windowW / 2,0, windowState.windowW / 2, windowState.windowH}, t2);
+
+			glDisable(GL_DEPTH_TEST);
+			renderer2d.flush();
+
+			//todo constructor (maybe explicit from uint)
+		}
+		else
+		{
+			renderer.updateWindowMetrics(windowState.windowW, windowState.windowH);
+			renderer.frameBuffer = requestedInfo.requestedFBO.fbo;
+			renderer.render(input.deltaTime);
+		}
+
+
+
+
 		glDisable(GL_DEPTH_TEST);
 	#pragma endregion
 
@@ -868,6 +951,13 @@ struct ThreeDGameExample: public Container
 	void destruct(RequestedContainerInfo &requestedInfo) override
 	{
 		renderer.clearAllRendererResources();
+
+		frameBuffers[0].deleteFramebuffer();
+		frameBuffers[1].deleteFramebuffer();
+
+		renderer2d.cleanup();
+		font.texture.cleanup();
+
 	}
 
 };

+ 2 - 4
Pika/resources/logs.txt

@@ -1,4 +1,2 @@
-#2024-01-03 17:50:06: Created container: IsometricGameEditor
-#2024-01-03 17:50:13: Destroyed continer: IsometricGameEditor #1
-#2024-01-03 17:50:17: Created container: IsometricGameEditor
-#2024-01-03 17:50:40: Destroyed continer: IsometricGameEditor #2
+#2024-01-04 10:19:43: Created container: ThreeDGameExample
+#2024-01-04 10:20:00: Destroyed continer: ThreeDGameExample #1

+ 1 - 1
Pika/resources/threedgame/settings.gl3d

@@ -1 +1 @@
-{"SSR":true,"SSRdata":{"maxRayDelta":0.7940000295639038,"maxRayStep":1.75,"maxSteps":33,"minRayStep":0.35199999809265137,"numBinarySearchSteps":7},"adaptiveResolution":false,"ambientb":1.0,"ambientg":1.0,"ambientr":1.0,"chromaticAberation":false,"chromaticAberationData":{"strength":20.0,"unfocusDistance":5.0},"colorCorrection":false,"exposure":2.8289999961853027,"frustumCulling":false,"fxaa":true,"fxaaData":{"edgeDarkTreshold":0.24500000476837158,"edgeMinTreshold":0.004000000189989805,"iterations":30,"qualityMultiplyer":0.8240000009536743,"subPixelQuality":0.9259999990463257},"light subscatter":true,"normal mapping":true,"ssao":true,"ssaoData":{"bias":0.02500000037252903,"exponent":5.0,"radius":0.20000000298023224,"sampleCount":16}}
+{"SSR":true,"SSRdata":{"maxRayDelta":0.6000000238418579,"maxRayStep":1.75,"maxSteps":20,"minRayStep":0.4000000059604645,"numBinarySearchSteps":7},"adaptiveResolution":false,"ambientb":0.9725490212440491,"ambientg":0.9725490212440491,"ambientr":0.9725490212440491,"chromaticAberation":false,"chromaticAberationData":{"strength":20.0,"unfocusDistance":5.0},"colorCorrection":false,"exposure":1.684000015258789,"frustumCulling":false,"fxaa":true,"fxaaData":{"edgeDarkTreshold":0.24500000476837158,"edgeMinTreshold":0.004000000189989805,"iterations":30,"qualityMultiplyer":0.8240000009536743,"subPixelQuality":0.9259999990463257},"light subscatter":true,"normal mapping":true,"ssao":true,"ssaoData":{"bias":0.02500000037252903,"exponent":5.0,"radius":0.20000000298023224,"sampleCount":16}}