Exemple #1
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (loadedTexture == null)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true);

            IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            prog.Tex2D = loadedTexture.TextureId;

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Translate(translateX, 0.5625f, translateZ)
                               .RotateY(rotY * GameMath.DEG2RAD)
                               .Scale(0.45f * QuadWidth, 0.45f * QuadHeight, 0.45f * QuadWidth)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;


            rpi.RenderMesh(quadModelRef);
            prog.Stop();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (workItemMeshRef == null)
            {
                return;
            }
            if (stage == EnumRenderStage.AfterFinalComposition)
            {
                RenderRecipeOutLine();
                return;
            }

            IRenderAPI           rpi         = api.Render;
            IClientWorldAccessor worldAccess = api.World;
            Vec3d camPos = worldAccess.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            rpi.BindTexture2d(texId);

            prog.ModelMatrix      = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z).Values;
            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;

            rpi.RenderMesh(workItemMeshRef);

            prog.Stop();
        }
Exemple #3
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            capi.Render.GlToggleBlend(true);
            IShaderProgram curShader = capi.Render.CurrentActiveShader;

            curShader?.Stop();
            foreach (var prog in progs)
            {
                if (prog.Disposed)
                {
                    continue;
                }
                prog.Use();
                prog.SetDefaultUniforms(capi);
                prog.BindTexture2D("iDepthBuffer", capi.Render.FrameBuffers[(int)EnumFrameBuffer.Primary].DepthTextureId, 0);
                prog.BindTexture2D("iColor", capi.Render.FrameBuffers[(int)EnumFrameBuffer.Primary].ColorTextureIds[0], 1);
                prog.BindTexture2D("iLight", capi.Render.FrameBuffers[(int)EnumFrameBuffer.Primary].ColorTextureIds[1], 2);
                prog.BindTexture2D("iGodrays", capi.Render.FrameBuffers[(int)EnumFrameBuffer.GodRays].ColorTextureIds[0], 3);
                prog.BindTexture2D("iShadowMapNear", capi.Render.FrameBuffers[(int)EnumFrameBuffer.ShadowmapNear].DepthTextureId, 4);
                prog.BindTexture2D("iShadowMapFar", capi.Render.FrameBuffers[(int)EnumFrameBuffer.ShadowmapFar].DepthTextureId, 5);
                capi.Render.RenderMesh(quadRef);
                prog.Stop();
            }
            curShader?.Use();
        }
Exemple #4
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (Level <= 0 || capi.World.Player.CameraMode != EnumCameraMode.FirstPerson)
            {
                return;
            }

            if (Level > 0.2 && capi.World.Rand.Next(60) == 0)
            {
                rndTarget = (float)capi.World.Rand.NextDouble() / 5f - 1 / 10f;
            }

            curRndVal += (rndTarget - curRndVal) * deltaTime;

            IShaderProgram curShader = capi.Render.CurrentActiveShader;

            curShader.Stop();

            eyeShaderProg.Use();

            capi.Render.GlToggleBlend(true);
            eyeShaderProg.Uniform("level", Level + curRndVal);

            capi.Render.RenderMesh(quadRef);
            eyeShaderProg.Stop();


            curShader.Use();
        }
Exemple #5
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (workItemMeshRef == null)
            {
                return;
            }
            if (stage == EnumRenderStage.AfterFinalComposition)
            {
                if (api.World.Player?.InventoryManager?.ActiveHotbarSlot?.Itemstack?.Collectible is ItemHammer)
                {
                    RenderRecipeOutLine();
                }
                return;
            }

            IRenderAPI           rpi         = api.Render;
            IClientWorldAccessor worldAccess = api.World;
            Vec3d camPos = worldAccess.Player.Entity.CameraPos;
            int   temp   = (int)ingot.Collectible.GetTemperature(api.World, ingot);

            Vec4f lightrgbs = worldAccess.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z);
            int   extraGlow = GameMath.Clamp((temp - 550) / 2, 0, 255);

            float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp);
            glowRgb.R = glowColor[0];
            glowRgb.G = glowColor[1];
            glowRgb.B = glowColor[2];
            glowRgb.A = extraGlow / 255f;

            rpi.GlDisableCullFace();

            IShaderProgram prog = coreMod.anvilShaderProg;

            prog.Use();
            rpi.BindTexture2d(texId);
            prog.Uniform("rgbaAmbientIn", rpi.AmbientColor);

            prog.Uniform("rgbaFogIn", rpi.FogColor);
            prog.Uniform("fogMinIn", rpi.FogMin);
            prog.Uniform("dontWarpVertices", (int)0);
            prog.Uniform("addRenderFlags", (int)0);
            prog.Uniform("fogDensityIn", rpi.FogDensity);
            prog.Uniform("rgbaTint", ColorUtil.WhiteArgbVec);
            prog.Uniform("rgbaLightIn", lightrgbs);
            prog.Uniform("rgbaGlowIn", glowRgb);
            prog.Uniform("extraGlow", extraGlow);

            prog.UniformMatrix("modelMatrix", ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Values
                               );
            prog.UniformMatrix("viewMatrix", rpi.CameraMatrixOriginf);
            prog.UniformMatrix("projectionMatrix", rpi.CurrentProjectionMatrix);


            rpi.RenderMesh(workItemMeshRef);

            prog.Stop();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            foreach (var player in API.World.AllPlayers)
            {
                // Player entity may be null in some circumstances..?
                if (player.Entity == null)
                {
                    continue;
                }

                var isLocalPlayer = (player == API.World.Player);
                var isShadowPass  = (stage != EnumRenderStage.Opaque);

                // Fix up animations that should/shouldn't be playing.
                if (isLocalPlayer)
                {
                    AnimationFixer.Update(player.Entity);
                }

                // Don't render if entity hasn't been rendered for the
                // specified render stage (unless it's the local player).
                else if (isShadowPass ? !player.Entity.IsShadowRendered
                                                      : !player.Entity.IsRendered)
                {
                    continue;
                }

                RenderAllCarried(player.Entity, deltaTime, isShadowPass);
            }
            _renderTick++;
        }
Exemple #7
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (backPackMeshRef == null)
            {
                Block block = api.World.GetBlock(new AssetLocation("stationarybasket-north"));
                backPackMeshRef          = api.Render.UploadMesh(api.TesselatorManager.GetDefaultBlockMesh(block));
                backPackTextureId        = api.BlockTextureAtlas.Positions[0].atlasTextureId;
                backPackTransform.Origin = block.GuiTransform.Origin;
            }

            for (int i = 0; i < api.World.AllPlayers.Length; i++)
            {
                IPlayer             plr  = api.World.AllPlayers[i];
                EntityShapeRenderer rend = plr.Entity.Properties.Client.Renderer as EntityShapeRenderer;
                if (rend == null)
                {
                    continue;
                }

                if (plr == api.World.Player && api.World.Player.CameraMode == EnumCameraMode.FirstPerson)
                {
                    continue;
                }

                RenderBackPack(plr.Entity, rend, stage != EnumRenderStage.Opaque);
            }
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (voxelHeight == 0)
            {
                return;
            }

            IStandardShaderProgram prog = api.Render.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            prog.ExtraGlow   = glowLevel;
            prog.RgbaBlockIn = new Vec4f(1 + glowLevel / 128f, 1 + glowLevel / 128f, 1 + glowLevel / 512f, 1);

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            rpi.BindTexture2d(textureId);

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(8 / 16f + pos.X - camPos.X, pos.Y - camPos.Y + voxelHeight / 24f, 8 / 16f + pos.Z - camPos.Z)
                               .Values
            ;
            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            rpi.RenderMesh(cubeModelRef);
            prog.Stop();
        }
Exemple #9
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (prog.Disposed)
            {
                prog = capi.Shader.GetProgramByName("instanced");
            }

            capi.Render.GlDisableCullFace();

            if (stage == EnumRenderStage.Opaque)
            {
                capi.Render.GlToggleBlend(false); // Seems to break SSAO without
                prog.Use();
                prog.BindTexture2D("tex", capi.ItemTextureAtlas.Positions[0].atlasTextureId, 0);
                prog.Uniform("rgbaFogIn", capi.Render.FogColor);
                prog.Uniform("rgbaAmbientIn", capi.Render.AmbientColor);
                prog.Uniform("fogMinIn", capi.Render.FogMin);
                prog.Uniform("fogDensityIn", capi.Render.FogDensity);
                prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
                prog.UniformMatrix("modelViewMatrix", capi.Render.CameraMatrixOriginf);

                foreach (var val in renderers)
                {
                    val.Value.OnRenderFrame(deltaTime, prog);
                }

                prog.Stop();
            }

            capi.Render.GlEnableCullFace();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            UpdateCustomFloatBuffer();

            prog.Use();
            prog.BindTexture2D("tex", capi.BlockTextureAtlas.Positions[0].atlasTextureId, 0);
            prog.Uniform("rgbaFogIn", capi.Render.FogColor);
            prog.Uniform("rgbaAmbientIn", capi.Render.AmbientColor);
            prog.Uniform("fogMinIn", capi.Render.FogMin);
            prog.Uniform("fogDensityIn", capi.Render.FogDensity);
            prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
            prog.UniformMatrix("modelViewMatrix", capi.Render.CameraMatrixOriginf);

            if (quantityGearboxes > 0)
            {
                floatsPeg.Count  = quantityGearboxes * 20;
                floatsCage.Count = quantityGearboxes * 20;

                updateMesh.CustomFloats = floatsPeg;
                capi.Render.UpdateMesh(gearboxPeg, updateMesh);

                updateMesh.CustomFloats = floatsCage;
                capi.Render.UpdateMesh(gearboxCage, updateMesh);

                capi.Render.RenderMeshInstanced(gearboxPeg, quantityGearboxes);
                capi.Render.RenderMeshInstanced(gearboxCage, quantityGearboxes);
            }

            prog.Stop();

            /*capi.Render.RenderMeshInstanced(gearboxCage, quantityGearboxes);
             * capi.Render.RenderMeshInstanced(axle, quantityAxles);
             * capi.Render.RenderMeshInstanced(windmillRotor, quantityRotors);*/
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (meshref == null)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true);

            IStandardShaderProgram prog = rpi.PreparedStandardShader(compassPos.X, compassPos.Y, compassPos.Z);

            prog.Tex2D = api.BlockTextureAtlas.AtlasTextureIds[0];

            // TODO: Decouple from BlockCompass
            var renderAngle = AngleRad ?? BlockCompass.GetWildSpinAngle(api);

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(compassPos.X - camPos.X, compassPos.Y - camPos.Y, compassPos.Z - camPos.Z)
                               .Translate(0.5f, 11f / 16f, 0.5f)
                               .RotateY(renderAngle)
                               .Translate(-0.5f, -11f / 16f, -0.5f)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            rpi.RenderMesh(meshref);
            prog.Stop();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (Level <= 0 || TextureName == null)
            {
                return;
            }

            int voxelY = (int)GameMath.Clamp(Level, 0, fillQuadsByLevel.Length - 1);

            IRenderAPI           rpi         = api.Render;
            IClientWorldAccessor worldAccess = api.World;
            EntityPos            plrPos      = worldAccess.Player.Entity.Pos;
            Vec3d camPos = worldAccess.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            IStandardShaderProgram prog = rpi.StandardShader;

            prog.Use();
            prog.RgbaAmbientIn = rpi.AmbientColor;
            prog.RgbaFogIn     = rpi.FogColor;
            prog.FogMinIn      = rpi.FogMin;
            prog.FogDensityIn  = rpi.FogDensity;
            prog.RgbaTint      = ColorUtil.WhiteArgbVec;
            prog.WaterWave     = 0;

            Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z);

            float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f((int)Temperature);
            lightrgbs.R += 2 * glowColor[0];
            lightrgbs.G += 2 * glowColor[1];
            lightrgbs.B += 2 * glowColor[2];

            prog.RgbaLightIn = lightrgbs;
            prog.RgbaBlockIn = ColorUtil.WhiteArgbVec;
            prog.ExtraGlow   = (int)GameMath.Clamp((Temperature - 500) / 4, 0, 255);

            int     texid = api.Render.GetOrLoadTexture(TextureName);
            Cuboidf rect  = fillQuadsByLevel[voxelY];

            rpi.BindTexture2d(texid);

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Translate(1 - rect.X1 / 16f, 1.01f / 16f + Math.Max(0, Level / 16f - 0.0625f / 3), 1 - rect.Z1 / 16f)
                               .RotateX(90 * GameMath.DEG2RAD)
                               .Scale(0.5f * rect.Width / 16f, 0.5f * rect.Length / 16f, 0.5f)
                               .Translate(-1, -1, 0)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;

            rpi.RenderMesh(quadModelRefs[voxelY]);

            prog.Stop();

            rpi.GlEnableCullFace();
        }
Exemple #13
0
        public void OnRenderFrame(float dt, EnumRenderStage stage)
        {
            if (updateMesh == null)
            {
                return;
            }
            tickPhysics(dt);

            int count = 0;

            updateMesh.CustomFloats.Count = 0;

            foreach (var val in clothSystems)
            {
                if (!val.Value.Active)
                {
                    continue;
                }

                count += val.Value.UpdateMesh(updateMesh, dt);
                updateMesh.CustomFloats.Count = count * (4 + 16);
            }

            if (count > 0)
            {
                //float dt = 1.5f * deltaTime;
                if (prog.Disposed)
                {
                    prog = capi.Shader.GetProgramByName("instanced");
                }

                capi.Render.GlToggleBlend(false); // Seems to break SSAO without
                prog.Use();
                prog.BindTexture2D("tex", capi.ItemTextureAtlas.Positions[0].atlasTextureId, 0);
                prog.Uniform("rgbaFogIn", capi.Render.FogColor);
                prog.Uniform("rgbaAmbientIn", capi.Render.AmbientColor);
                prog.Uniform("fogMinIn", capi.Render.FogMin);
                prog.Uniform("fogDensityIn", capi.Render.FogDensity);
                prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
                prog.UniformMatrix("modelViewMatrix", capi.Render.CameraMatrixOriginf);

                updateMesh.CustomFloats.Count = count * (4 + 16);
                capi.Render.UpdateMesh(ropeMeshRef, updateMesh);
                capi.Render.RenderMeshInstanced(ropeMeshRef, count);

                prog.Stop();
            }


            foreach (var val in clothSystems)
            {
                if (!val.Value.Active)
                {
                    continue;
                }

                val.Value.CustomRender(dt);
            }
        }
Exemple #14
0
 public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
 {
     if (capi.IsGamePaused)
     {
         return;
     }
     onPhysicsTick(deltaTime);
 }
Exemple #15
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (workItemMeshRef == null)
            {
                return;
            }
            if (stage == EnumRenderStage.AfterFinalComposition)
            {
                RenderRecipeOutLine();
                return;
            }

            IRenderAPI           rpi         = api.Render;
            IClientWorldAccessor worldAccess = api.World;
            Vec3d     camPos = worldAccess.Player.Entity.CameraPos;
            EntityPos plrPos = worldAccess.Player.Entity.Pos;
            int       temp   = (int)ingot.Collectible.GetTemperature(api.World, ingot);

            Vec4f lightrgbs = worldAccess.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z);

            float[] glowColor = ColorUtil.GetIncandescenceColorAsColor4f(temp);
            lightrgbs[0] += 2 * glowColor[0];
            lightrgbs[1] += 2 * glowColor[1];
            lightrgbs[2] += 2 * glowColor[2];



            rpi.GlDisableCullFace();

            IStandardShaderProgram prog = rpi.StandardShader;

            prog.Use();
            rpi.BindTexture2d(texId);
            prog.RgbaAmbientIn    = rpi.AmbientColor;
            prog.RgbaFogIn        = rpi.FogColor;
            prog.FogMinIn         = rpi.FogMin;
            prog.DontWarpVertices = 0;
            prog.AddRenderFlags   = 0;
            prog.FogDensityIn     = rpi.FogDensity;
            prog.RgbaTint         = ColorUtil.WhiteArgbVec;
            prog.RgbaLightIn      = lightrgbs;
            prog.RgbaBlockIn      = ColorUtil.WhiteArgbVec;
            prog.ExtraGlow        = GameMath.Clamp((temp - 700) / 2, 0, 255);
            prog.ModelMatrix      = ModelMat
                                    .Identity()
                                    .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                                    .Values
            ;


            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            rpi.RenderMesh(workItemMeshRef);
            prog.Stop();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (capi.IsGamePaused)
            {
                return;
            }

            foreach (MechanicalNetwork network in data.networksById.Values)
            {
                network.ClientTick(deltaTime);
            }
        }
        // Needs to render mash, juice quad and bucket
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (mashMeshref == null || mashMeshref.Disposed)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true);

            IStandardShaderProgram prog = rpi.StandardShader;

            prog.Use();
            prog.Tex2D            = api.BlockTextureAtlas.AtlasTextureIds[0];
            prog.DontWarpVertices = 0;
            prog.AddRenderFlags   = 0;
            prog.RgbaAmbientIn    = rpi.AmbientColor;
            prog.RgbaFogIn        = rpi.FogColor;
            prog.FogMinIn         = rpi.FogMin;
            prog.FogDensityIn     = rpi.FogDensity;
            prog.RgbaTint         = ColorUtil.WhiteArgbVec;
            prog.NormalShaded     = 1;
            prog.ExtraGodray      = 0;
            prog.SsaoAttn         = 0;
            prog.AlphaTest        = 0.05f;
            prog.OverlayOpacity   = 0;

            Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z);

            prog.RgbaLightIn = lightrgbs;


            double squeezeRel = befruitpress.MashSlot.Itemstack?.Attributes?.GetDouble("squeezeRel", 1) ?? 1;

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Translate(0, 0.8f, 0)
                               .Scale(1, (float)squeezeRel, 1)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;

            rpi.RenderMesh(mashMeshref);

            prog.Stop();
        }
Exemple #18
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            // before rendering: update our values
            Mat4f.Invert(InvProjectionMatrix, _mod.CApi.Render.CurrentProjectionMatrix);
            Mat4f.Invert(InvModelViewMatrix, _mod.CApi.Render.CameraMatrixOriginf);

            _tempVec4f.Set(0, 0, 0, 1);
            Mat4f.MulWithVec4(InvModelViewMatrix, _tempVec4f, CameraWorldPosition);

            DayLight = 1.25f * GameMath.Max(
                _mod.CApi.World.Calendar.DayLightStrength -
                _mod.CApi.World.Calendar.MoonLightStrength / 2f, 0.05f);
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            var rend   = Api.Render;
            var shader = rend.CurrentActiveShader;

            _circleAlpha = Math.Max(0.0F, Math.Min(1.0F, _circleAlpha
                                                   + deltaTime / (CircleVisible ? Settings.AlphaIn : -Settings.AlphaOut)));

            // TODO: Do some smoothing between frames?
            if ((CircleProgress <= 0.0F) || (_circleAlpha <= 0.0F))
            {
                return;
            }
            UpdateCirceMesh(CircleProgress);

            var r     = ((Settings.Color >> 16) & 0xFF) / 255.0F;
            var g     = ((Settings.Color >> 8) & 0xFF) / 255.0F;
            var b     = (Settings.Color & 0xFF) / 255.0F;
            var color = new Vec4f(r, g, b, _circleAlpha);

            shader.Uniform("rgbaIn", color);
            shader.Uniform("extraGlow", 0);
            shader.Uniform("applyColor", 0);
            shader.Uniform("tex2d", 0);
            shader.Uniform("noTexture", 1.0F);
            shader.UniformMatrix("projectionMatrix", rend.CurrentProjectionMatrix);

            int x, y;

            if (Api.Input.MouseGrabbed)
            {
                x = Api.Render.FrameWidth / 2;
                y = Api.Render.FrameHeight / 2;
            }
            else
            {
                x = Api.Input.MouseX;
                y = Api.Input.MouseY;
            }

            // These IRenderAPI methods are deprecated but not sure how to do it otherwise.
#pragma warning disable CS0618
            rend.GlPushMatrix();
            rend.GlTranslate(x, y, 0);
            rend.GlScale(Settings.OuterRadius, Settings.OuterRadius, 0);
            shader.UniformMatrix("modelViewMatrix", rend.CurrentModelviewMatrix);
            rend.GlPopMatrix();
#pragma warning restore CS0618

            rend.RenderMesh(_circleMesh);
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            IRenderAPI rpi    = capi.Render;
            Vec3d      camPos = capi.World.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true);

            IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            capi.Render.BindTexture2d(capi.BlockTextureAtlas.AtlasTextureIds[0]);

            prog.DontWarpVertices = 0;
            prog.AddRenderFlags   = 0;
            prog.ModelMatrix      = ModelMat
                                    .Identity()
                                    .Translate(pos.X - camPos.X + 0.001f, pos.Y - camPos.Y, pos.Z - camPos.Z - 0.001f)
                                    .Translate(0f, 1 / 16f, 0f)
                                    .Values
            ;
            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;

            rpi.RenderMesh(potRef);

            if (!isInOutputSlot)
            {
                float origx = GameMath.Sin(capi.World.ElapsedMilliseconds / 300f) * 5 / 16f;
                float origz = GameMath.Cos(capi.World.ElapsedMilliseconds / 300f) * 5 / 16f;

                float cookIntensity = GameMath.Clamp((temp - 50) / 50, 0, 1);

                prog.ModelMatrix = ModelMat
                                   .Identity()
                                   .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                                   .Translate(0, 6.5f / 16f, 0)
                                   .Translate(-origx, 0, -origz)
                                   .RotateX(cookIntensity * GameMath.Sin(capi.World.ElapsedMilliseconds / 50f) / 60)
                                   .RotateZ(cookIntensity * GameMath.Sin(capi.World.ElapsedMilliseconds / 50f) / 60)
                                   .Translate(origx, 0, origz)
                                   .Values
                ;
                prog.ViewMatrix       = rpi.CameraMatrixOriginf;
                prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;


                rpi.RenderMesh(lidRef);
            }

            prog.Stop();
        }
Exemple #21
0
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (meshref == null || be.HammerStack == null)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            rpi.GlDisableCullFace();

            float rotY = be.facing.HorizontalAngleIndex * 90;
            float offx = be.facing == BlockFacing.NORTH || be.facing == BlockFacing.WEST ? -1 / 16f : 17 / 16f;

            ModelMat
            .Identity()
            .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
            .RotateYDeg(rotY)
            .Translate(offx, 12.5f / 16f, 0.5f)
            .RotateZ(AngleRad)
            .Translate(-offx, -12.5f / 16f, -0.5f)
            .RotateYDeg(-rotY)
            ;

            if (stage == EnumRenderStage.Opaque)
            {
                IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);
                prog.Tex2D = api.BlockTextureAtlas.AtlasTextureIds[0];

                prog.ModelMatrix      = ModelMat.Values;
                prog.ViewMatrix       = rpi.CameraMatrixOriginf;
                prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
                rpi.RenderMesh(meshref);
                prog.Stop();

                AngleRad = be.Angle;
            }
            else
            {
                IRenderAPI rapi = api.Render;
                shadowMvpMat.Set(rapi.CurrentProjectionMatrix).Mul(rapi.CurrentModelviewMatrix).Mul(ModelMat.Values);

                rapi.CurrentActiveShader.BindTexture2D("tex2d", api.BlockTextureAtlas.AtlasTextureIds[0], 0);
                rapi.CurrentActiveShader.UniformMatrix("mvpMatrix", shadowMvpMat.Values);
                rapi.CurrentActiveShader.Uniform("origin", new Vec3f());

                rpi.RenderMesh(meshref);
            }
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (prog.Disposed)
            {
                prog = capi.Shader.GetProgramByName("instanced");
            }

            capi.Render.GlDisableCullFace();

            if (stage == EnumRenderStage.Opaque)
            {
                capi.Render.GlToggleBlend(false); // Seems to break SSAO without
                prog.Use();
                prog.BindTexture2D("tex", capi.BlockTextureAtlas.Positions[0].atlasTextureId, 0);
                prog.Uniform("rgbaFogIn", capi.Render.FogColor);
                prog.Uniform("rgbaAmbientIn", capi.Render.AmbientColor);
                prog.Uniform("fogMinIn", capi.Render.FogMin);
                prog.Uniform("fogDensityIn", capi.Render.FogDensity);
                prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
                prog.UniformMatrix("modelViewMatrix", capi.Render.CameraMatrixOriginf);

                for (int i = 0; i < MechBlockRenderer.Count; i++)
                {
                    MechBlockRenderer[i].OnRenderFrame(deltaTime, prog);
                }

                prog.Stop();
            }
            else
            {
                // TODO: Needs a custom shadow map shader

                /*IRenderAPI rapi = capi.Render;
                 * rapi.CurrentActiveShader.BindTexture2D("tex2d", capi.BlockTextureAtlas.Positions[0].atlasTextureId, 0);
                 *
                 * float[] mvpMat = Mat4f.Mul(Mat4f.Create(), capi.Render.CurrentProjectionMatrix, capi.Render.CurrentModelviewMatrix);
                 *
                 * capi.Render.CurrentActiveShader.UniformMatrix("mvpMatrix", mvpMat);
                 * //capi.Render.CurrentActiveShader.Uniform("origin", new Vec3f());
                 *
                 * for (int i = 0; i < MechBlockRenderer.Count; i++)
                 * {
                 *  MechBlockRenderer[i].OnRenderFrame(deltaTime, prog);
                 * }*/
            }


            capi.Render.GlEnableCullFace();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (capi.IsGamePaused)
            {
                return;
            }

            // Graceful degradation of the simulation quality instead of heavily lagging the game
            accum += deltaTime;
            if (accum > clientPhysicsTickTimeThreshold)
            {
                onPhysicsTick(deltaTime);
                accum = 0f;
            }
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (workItemMeshRef == null)
            {
                return;
            }
            if (stage == EnumRenderStage.AfterFinalComposition)
            {
                RenderRecipeOutLine();
                return;
            }

            IRenderAPI           rpi         = api.Render;
            IClientWorldAccessor worldAccess = api.World;
            Vec3d     camPos = worldAccess.Player.Entity.CameraPos;
            EntityPos plrPos = worldAccess.Player.Entity.Pos;

            rpi.GlDisableCullFace();

            IStandardShaderProgram prog = rpi.StandardShader;

            prog.Use();
            prog.ExtraGlow     = 0;
            prog.RgbaAmbientIn = rpi.AmbientColor;
            prog.RgbaFogIn     = rpi.FogColor;
            prog.FogMinIn      = rpi.FogMin;
            prog.FogDensityIn  = rpi.FogDensity;
            prog.RgbaTint      = ColorUtil.WhiteArgbVec;
            prog.WaterWave     = 0;

            Vec4f lightrgbs = api.World.BlockAccessor.GetLightRGBs(pos.X, pos.Y, pos.Z);


            prog.RgbaLightIn = lightrgbs;
            prog.RgbaBlockIn = ColorUtil.WhiteArgbVec;


            rpi.BindTexture2d(texId);

            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ModelMatrix      = ModelMat.Identity().Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z).Values;

            rpi.RenderMesh(workItemMeshRef);

            prog.Stop();
        }
        public void OnRenderFrame(float dt, EnumRenderStage stage)
        {
            simLightning.OnRenderFrame(dt, stage);

            if (stage == EnumRenderStage.Before)
            {
                EntityPlayer eplr = capi.World.Player.Entity;
                plrPos.Set((int)eplr.Pos.X, (int)eplr.Pos.Y, (int)eplr.Pos.Z);
                plrPosd.Set(eplr.Pos.X, eplr.Pos.Y, eplr.Pos.Z);

                WeatherDataAtPlayer.LoadAdjacentSimsAndLerpValues(plrPosd, dt);
                WeatherDataAtPlayer.UpdateAdjacentAndBlendWeatherData();

                int lightlevel = Math.Max(
                    capi.World.BlockAccessor.GetLightLevel(plrPos, EnumLightLevelType.OnlySunLight),
                    capi.World.BlockAccessor.GetLightLevel(plrPos.Up(), EnumLightLevelType.OnlySunLight)
                    );
                smoothedLightLevel += (lightlevel - smoothedLightLevel) * dt * 4;

                // light level > 17 = 100% fog
                // light level <= 2 = 0% fog
                float fogMultiplier = GameMath.Clamp(smoothedLightLevel / 20f, 0f, 1);
                float fac           = (float)GameMath.Clamp(capi.World.Player.Entity.Pos.Y / capi.World.SeaLevel, 0, 1);
                fac           *= fac;
                fogMultiplier *= fac;

                WeatherDataAtPlayer.BlendedWeatherData.Ambient.FlatFogDensity.Weight *= fogMultiplier;
                WeatherDataAtPlayer.BlendedWeatherData.Ambient.FogDensity.Weight     *= fogMultiplier;


                dt = Math.Min(0.5f, dt);

                // Windspeed should be stored inside ClimateConditions and not be a global constant
                double windspeed = WeatherDataAtPlayer.GetWindSpeed(plrPosd.Y);


                windSpeedSmoothed.X += ((float)windspeed - windSpeedSmoothed.X) * dt;

                windRandCounter = (windRandCounter + dt) % (2000 * Math.PI);
                double rndx = (2 * Math.Sin(windRandCounter / 8) + Math.Sin(windRandCounter / 2) + Math.Sin(0.5 + 2 * windRandCounter)) / 10.0;

                GlobalConstants.CurrentWindSpeedClient.Set(windSpeedSmoothed.X, windSpeedSmoothed.Y, windSpeedSmoothed.Z + (float)rndx * windSpeedSmoothed.X);

                capi.Ambient.CurrentModifiers["weather"] = WeatherDataAtPlayer.BlendedWeatherData.Ambient;
            }
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (animator == null || renderer == null)
            {
                return;                                       // not initialized yet
            }
            if (activeAnimationsByAnimCode.Count > 0 || animator.ActiveAnimationCount > 0)
            {
                animator.OnFrame(activeAnimationsByAnimCode, deltaTime);
            }

            if (activeAnimationsByAnimCode.Count == 0 && animator.ActiveAnimationCount == 0 && renderer.ShouldRender && !stopRenderTriggered)
            {
                stopRenderTriggered = true;
                api.World.BlockAccessor.MarkBlockDirty(be.Pos, () => renderer.ShouldRender = false);
            }
        }
Exemple #27
0
        public override void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (loadedTexture == null)
            {
                return;
            }

            IRenderAPI rpi    = api.Render;
            Vec3d      camPos = api.World.Player.Entity.CameraPos;

            if (camPos.SquareDistanceTo(pos.X, pos.Y, pos.Z) > 20 * 20)
            {
                return;
            }

            rpi.GlDisableCullFace();
            rpi.GlToggleBlend(true, EnumBlendMode.PremultipliedAlpha);

            IStandardShaderProgram prog = rpi.PreparedStandardShader(pos.X, pos.Y, pos.Z);

            prog.Tex2D = loadedTexture.TextureId;

            prog.ModelMatrix = ModelMat
                               .Identity()
                               .Translate(pos.X - camPos.X, pos.Y - camPos.Y, pos.Z - camPos.Z)
                               .Translate(0.5f, 0.5f, 0.5f)
                               .RotateY(rotY + GameMath.PI)
                               .Translate(-0.5f, -0.5, -0.5f)
                               .Translate(0.5f, 0.35f, 1 / 16f + 0.03f)
                               .Scale(0.45f * QuadWidth, 0.45f * QuadHeight, 0.45f * QuadWidth)
                               .Values
            ;

            prog.ViewMatrix       = rpi.CameraMatrixOriginf;
            prog.ProjectionMatrix = rpi.CurrentProjectionMatrix;
            prog.NormalShaded     = 0;
            prog.ExtraGodray      = 0;
            prog.SsaoAttn         = 0;
            prog.AlphaTest        = 0.05f;
            prog.OverlayOpacity   = 0;

            rpi.RenderMesh(quadModelRef);
            prog.Stop();

            rpi.GlToggleBlend(true, EnumBlendMode.Standard);
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            if (PercentZoomed == 0)
            {
                return;
            }

            IShaderProgram curShader = capi.Render.CurrentActiveShader;

            curShader.Stop();
            overlayShaderProg.Use();
            capi.Render.GlToggleBlend(true);
            overlayShaderProg.Uniform("percentZoomed", PercentZoomed);
            capi.Render.RenderMesh(quadRef);
            overlayShaderProg.Stop();
            curShader.Use();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            IShaderProgram curShader = capi.Render.CurrentActiveShader;

            Vec4f color = new Vec4f(1, 1, 1, 1);

            // Render rectangle
            curShader.Uniform("rgbaIn", color);
            curShader.Uniform("extraGlow", 0);
            curShader.Uniform("applyColor", 0);
            curShader.Uniform("tex2d", 0);
            curShader.Uniform("noTexture", 1f);

            capi.Render.GlPushMatrix();

            capi.Render.GlTranslate(10, 10, 50);
            capi.Render.GlScale(100, 20, 0);

            capi.Render.GlTranslate(0.5f, 0.5f, 0);
            capi.Render.GlScale(0.5f, 0.5f, 0);

            curShader.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
            curShader.UniformMatrix("modelViewMatrix", capi.Render.CurrentModelviewMatrix);

            capi.Render.RenderMesh(whiteRectangleRef);
            capi.Render.GlPopMatrix();


            // Render progress bar
            float width = (capi.World.ElapsedMilliseconds / 10f) % 100;

            capi.Render.GlPushMatrix();
            capi.Render.GlTranslate(10, 10, 50);
            capi.Render.GlScale(width, 20, 0);

            capi.Render.GlTranslate(0.5f, 0.5f, 0);
            capi.Render.GlScale(0.5f, 0.5f, 0);


            curShader.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
            curShader.UniformMatrix("modelViewMatrix", capi.Render.CurrentModelviewMatrix);

            capi.Render.RenderMesh(progressQuadRef);
            capi.Render.GlPopMatrix();
        }
        public void OnRenderFrame(float deltaTime, EnumRenderStage stage)
        {
            prog.Use();
            prog.BindTexture2D("tex", capi.BlockTextureAtlas.Positions[0].atlasTextureId, 0);
            prog.Uniform("rgbaFogIn", capi.Render.FogColor);
            prog.Uniform("rgbaAmbientIn", capi.Render.AmbientColor);
            prog.Uniform("fogMinIn", capi.Render.FogMin);
            prog.Uniform("fogDensityIn", capi.Render.FogDensity);
            prog.UniformMatrix("projectionMatrix", capi.Render.CurrentProjectionMatrix);
            prog.UniformMatrix("modelViewMatrix", capi.Render.CameraMatrixOriginf);

            for (int i = 0; i < MechBlockRenderer.Count; i++)
            {
                MechBlockRenderer[i].OnRenderFrame(deltaTime, prog);
            }

            prog.Stop();
        }