//RENDER PASS METHOD private void RenderDepthMaps(ref SystemTransform systemTransform) { int[] currentViewPort = new int[4]; GL.GetInteger(GetPName.Viewport, currentViewPort); GL.UseProgram(ShaderManager.GetInstance().GetProgram("shadowTextured")); int lightNum = 0; var gameObjects = _world.GameObjects; GL.Enable(EnableCap.CullFace); GL.CullFace(CullFaceMode.Front); for (int jdx = 0; jdx < _world.ObjectMemory; jdx++) { if (gameObjects[jdx].Components.HasFlag(Component.LIGHT)) { if (_world.LightComps[jdx].LightObject.HasShadowMap) { var lightComp = _world.LightComps[jdx]; var light = lightComp.LightObject; light.ShadowMap.BindFBO(); GL.Clear(ClearBufferMask.DepthBufferBit); int lightType = 0; if (lightComp.LightType == LightType.SUN) { lightType = 1; } GL.Uniform1(3, lightType); GL.Uniform1(4, lightNum); for (int idx = 0; idx < _world.ObjectMemory; idx++) { if (_world.ExistingGameObjects[idx]) { if (gameObjects[idx].Components.HasFlag(RenderQualfier)) { Bind(idx, false); systemTransform.PushModelMatrix(idx); int elementCount = ModelManager.GetInstance().GetModel(ref _staticModelComps[idx]).ElementCount; GL.DrawElements(PrimitiveType.Triangles, elementCount, DrawElementsType.UnsignedInt, IntPtr.Zero); } } } lightNum++; lightNum %= 3; } } } GL.CullFace(CullFaceMode.Back); GL.Disable(EnableCap.CullFace); GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0); GL.Viewport(currentViewPort[0], currentViewPort[1], currentViewPort[2], currentViewPort[3]); GL.Clear(ClearBufferMask.DepthBufferBit); }
public void RenderAll(ref SystemTransform systemTransform) { RenderDepthMaps(ref systemTransform); var gameObjects = _world.GameObjects; for (int idx = 0; idx < _world.ObjectMemory; idx++) { if (_world.ExistingGameObjects[idx]) { Component comps = gameObjects[idx].Components; if (comps.HasFlag(RenderQualfier)) { Bind(idx, true); if (_staticModelComps[idx].ConstructionFlags.HasFlag(ConstructionFlags.COLOR4_COLOR)) { var colorArr = _staticModelComps[idx].GetConstructionParameter(ConstructionFlags.COLOR4_COLOR); Color4 color = new Color4(colorArr[0], colorArr[1], colorArr[2], colorArr[3]); GL.Uniform4(17, color); } if (comps.HasFlag(Component.TEXTURE)) { _textureComps[idx].BindTexture(TextureUnit.Texture0); } systemTransform.PushModelMatrix(idx); int elementCount = ModelManager.GetInstance().GetModel(ref _staticModelComps[idx]).ElementCount; _world.LightComps[2].LightObject.ShadowMap.BindTexture(TextureUnit.Texture1, true); _world.LightComps[3].LightObject.ShadowMap.BindTexture(TextureUnit.Texture2, true); _world.LightComps[4].LightObject.ShadowMap.BindTexture(TextureUnit.Texture3, true); _world.LightComps[5].LightObject.ShadowMap.BindTexture(TextureUnit.Texture5, true); GL.DrawElements(PrimitiveType.Triangles, elementCount, DrawElementsType.UnsignedInt, IntPtr.Zero); } } } //TEST /* * GL.UseProgram(ShaderManager.GetInstance().GetProgram("detectEdges")); * systemTransform.PushModelMatrix(0); * Bind(0, false); * if(GL.GetInteger(GetPName.TransformFeedbackBinding) != TEST_VAO.Buffers[1]) * GL.BindBufferBase(BufferRangeTarget.TransformFeedbackBuffer, 0, TEST_VAO.Buffers[1]); * GL.BeginTransformFeedback(TransformFeedbackPrimitiveType.Lines); * GL.DrawElements(PrimitiveType.Triangles, ModelManager.GetInstance().GetModel(ref _staticModelComps[0]).ElementCount, DrawElementsType.UnsignedInt, IntPtr.Zero); * GL.EndTransformFeedback(); */ //ENDTEST }