Ejemplo n.º 1
0
 public void SetVox()
 {
     if (isVox)
     {
         return;
     }
     isVox = true;
     if (MainWorldView.FBOid == FBOID.MAIN)
     {
         s_fbov = s_fbov.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     if (MainWorldView.FBOid == FBOID.REFRACT)
     {
         s_fbov_refract = s_fbov_refract.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_UNLIT)
     {
         s_transponlyvox = s_transponlyvox.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LIT)
     {
         s_transponlyvoxlit = s_transponlyvoxlit.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_SHADOWS)
     {
         s_transponlyvoxlitsh = s_transponlyvoxlitsh.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LL)
     {
         s_transponlyvox_ll = s_transponlyvox_ll.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LIT_LL)
     {
         s_transponlyvoxlit_ll = s_transponlyvoxlit_ll.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_SHADOWS_LL)
     {
         s_transponlyvoxlitsh_ll = s_transponlyvoxlitsh_ll.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
         GL.ActiveTexture(TextureUnit.Texture2);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.NormalTextureID);
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.HelpTextureID);
         GL.ActiveTexture(TextureUnit.Texture0);
     }
     else if (MainWorldView.FBOid == FBOID.FORWARD_SOLID)
     {
         s_forw_vox = s_forw_vox.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
     }
     else if (MainWorldView.FBOid == FBOID.FORWARD_TRANSP)
     {
         s_forw_vox_trans = s_forw_vox_trans.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
     }
     else if (MainWorldView.FBOid == FBOID.SHADOWS)
     {
         s_shadowvox = s_shadowvox.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
     }
     if (FixPersp != Matrix4.Identity)
     {
         GL.UniformMatrix4(View3D.MAT_LOC_VIEW, false, ref FixPersp);
     }
 }
Ejemplo n.º 2
0
 public void ShadersCheck()
 {
     string def = CVars.r_good_graphics.ValueB ? "#MCM_GOOD_GRAPHICS" : "#";
     s_shadow = Shaders.GetShader("shadow" + def);
     s_shadowvox = Shaders.GetShader("shadowvox" + def);
     s_fbo = Shaders.GetShader("fbo" + def);
     s_fbot = Shaders.GetShader("fbo" + def + ",MCM_TRANSP_ALLOWED");
     s_fbov = Shaders.GetShader("fbo_vox" + def);
     s_fbo_refract = Shaders.GetShader("fbo" + def + ",MCM_REFRACT");
     s_fbov_refract = Shaders.GetShader("fbo_vox" + def + ",MCM_REFRACT");
     s_shadowadder = Shaders.GetShader("lightadder" + def + ",MCM_SHADOWS");
     s_lightadder = Shaders.GetShader("lightadder" + def);
     s_transponly = Shaders.GetShader("transponly" + def);
     s_transponlyvox = Shaders.GetShader("transponlyvox" + def);
     s_transponlylit = Shaders.GetShader("transponly" + def + ",MCM_LIT");
     s_transponlyvoxlit = Shaders.GetShader("transponlyvox" + def + ",MCM_LIT");
     s_transponlylitsh = Shaders.GetShader("transponly" + def + ",MCM_LIT,MCM_SHADOWS");
     s_transponlyvoxlitsh = Shaders.GetShader("transponlyvox" + def + ",MCM_LIT,MCM_SHADOWS");
     s_godray = Shaders.GetShader("godray" + def);
     s_mapvox = Shaders.GetShader("map_vox" + def);
     s_transpadder = Shaders.GetShader("transpadder" + def);
     s_finalgodray = Shaders.GetShader("finalgodray" + def);
     s_finalgodray_toonify = Shaders.GetShader("finalgodray" + def + ",MCM_TOONIFY");
     s_finalgodray_lights = Shaders.GetShader("finalgodray" + def + ",MCM_LIGHTS");
     s_finalgodray_lights_toonify = Shaders.GetShader("finalgodray" + def + ",MCM_LIGHTS,MCM_TOONIFY");
     s_finalgodray_lights_motblur = Shaders.GetShader("finalgodray" + def + ",MCM_LIGHTS,MCM_MOTBLUR");
     s_forw = Shaders.GetShader("forward" + def);
     s_forw_vox = Shaders.GetShader("forward" + def + ",MCM_VOX");
     s_forw_trans = Shaders.GetShader("forward" + def + ",MCM_TRANSP");
     s_forw_vox_trans = Shaders.GetShader("forward" + def + ",MCM_VOX,MCM_TRANSP");
     s_transponly_ll = Shaders.GetShader("transponly" + def + ",MCM_LL");
     s_transponlyvox_ll = Shaders.GetShader("transponlyvox" + def + ",MCM_LL");
     s_transponlylit_ll = Shaders.GetShader("transponly" + def + ",MCM_LIT,MCM_LL");
     s_transponlyvoxlit_ll = Shaders.GetShader("transponlyvox" + def + ",MCM_LIT,MCM_LL");
     s_transponlylitsh_ll = Shaders.GetShader("transponly" + def + ",MCM_LIT,MCM_SHADOWS,MCM_LL");
     s_transponlyvoxlitsh_ll = Shaders.GetShader("transponlyvox" + def + ",MCM_LIT,MCM_SHADOWS,MCM_LL");
     s_ll_clearer = Shaders.GetShader("clearer" + def);
     s_ll_fpass = Shaders.GetShader("fpass" + def);
     s_hdrpass = Shaders.GetShader("hdrpass" + def);
     s_forw_grass = Shaders.GetShader("forward" + def + ",MCM_GEOM_ACTIVE?grass");
     s_fbo_grass = Shaders.GetShader("fbo" + def + ",MCM_GEOM_ACTIVE,MCM_PRETTY?grass");
     s_forw_particles = Shaders.GetShader("forward" + def + ",MCM_GEOM_ACTIVE,MCM_TRANSP,MCM_NO_ALPHA_CAP?particles");
     // TODO: Better place for models?
     RainCyl = Models.GetModel("raincyl");
     RainCyl.LoadSkin(Textures);
     SnowCyl = Models.GetModel("snowcyl");
     SnowCyl.LoadSkin(Textures);
 }
Ejemplo n.º 3
0
 public void renderGame()
 {
     Stopwatch totalt = new Stopwatch();
     totalt.Start();
     try
     {
         MainWorldView.ForwardVec = Player.ForwardVector();
         // Frustum cf1 = null;
         if (CVars.g_firstperson.ValueB)
         {
             MainWorldView.CameraPos = PlayerEyePosition;
         }
         else
         {
             CollisionResult cr = TheRegion.Collision.RayTrace(PlayerEyePosition, PlayerEyePosition - MainWorldView.CalcForward() * Player.ViewBackMod(), IgnorePlayer);
             if (cr.Hit)
             {
                 MainWorldView.CameraPos = cr.Position + cr.Normal * 0.05;
             }
             else
             {
                 MainWorldView.CameraPos = cr.Position;
             }
         }
         if (CVars.u_showmap.ValueB && mapLastRendered + 1.0 < TheRegion.GlobalTickTimeLocal) // TODO: 1.0 -> custom
         {
             mapLastRendered = TheRegion.GlobalTickTimeLocal;
             AABB box = new AABB() { Min = Player.GetPosition(), Max = Player.GetPosition() };
             foreach (Chunk ch in TheRegion.LoadedChunks.Values)
             {
                 box.Include(ch.WorldPosition.ToLocation() * Chunk.CHUNK_SIZE);
                 box.Include(ch.WorldPosition.ToLocation() * Chunk.CHUNK_SIZE + new Location(Chunk.CHUNK_SIZE));
             }
             Matrix4 ortho = Matrix4.CreateOrthographicOffCenter((float)box.Min.X, (float)box.Max.X, (float)box.Min.Y, (float)box.Max.Y, (float)box.Min.Z, (float)box.Max.Z);
             //  Matrix4 oident = Matrix4.Identity;
             s_mapvox = s_mapvox.Bind();
             GL.UniformMatrix4(View3D.MAT_LOC_VIEW, false, ref ortho);
             GL.Viewport(0, 0, 256, 256); // TODO: Customizable!
             GL.BindFramebuffer(FramebufferTarget.Framebuffer, map_fbo_main);
             GL.DrawBuffer(DrawBufferMode.ColorAttachment0);
             GL.ClearBuffer(ClearBuffer.Color, 0, new float[] { 0.0f, 1.0f, 0.0f, 1.0f });
             GL.ClearBuffer(ClearBuffer.Depth, 0, new float[] { 1.0f });
             GL.BindTexture(TextureTarget.Texture2DArray, TBlock.TextureID);
             foreach (Chunk chunk in TheRegion.LoadedChunks.Values)
             {
                 chunk.Render();
             }
             GL.BindFramebuffer(FramebufferTarget.Framebuffer, 0);
             GL.BindTexture(TextureTarget.Texture2DArray, 0);
             GL.DrawBuffer(DrawBufferMode.Back);
         }
         sortEntities();
         Particles.Sort();
         MainWorldView.Headmat = TheRegion.GetBlockMaterial(PlayerEyePosition);
         MainWorldView.SunLoc = GetSunLocation();
         MainWorldView.Render();
         ReverseEntitiesOrder();
     }
     catch (Exception ex)
     {
         SysConsole.Output("Rendering (2D)", ex);
     }
     totalt.Stop();
     TotalTime = (double)totalt.ElapsedMilliseconds / 1000f;
     if (TotalTime > TotalSpikeTime)
     {
         TotalSpikeTime = TotalTime;
     }
 }
Ejemplo n.º 4
0
 public void SetEnts()
 {
     if (!isVox)
     {
         return;
     }
     isVox = false;
     if (MainWorldView.FBOid == FBOID.MAIN)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_fbo = s_fbo.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.REFRACT)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_fbo_refract = s_fbo_refract.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_UNLIT)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponly = s_transponly.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LIT)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponlylit = s_transponlylit.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_SHADOWS)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponlylitsh = s_transponlylitsh.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LL)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponly_ll = s_transponly_ll.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_LIT_LL)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponlylit_ll = s_transponlylit_ll.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.TRANSP_SHADOWS_LL)
     {
         GL.ActiveTexture(TextureUnit.Texture1);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         GL.ActiveTexture(TextureUnit.Texture0);
         GL.BindTexture(TextureTarget.Texture2D, 0);
         s_transponlylitsh_ll = s_transponlylitsh_ll.Bind();
     }
     else if (MainWorldView.FBOid == FBOID.FORWARD_SOLID)
     {
         s_forw = s_forw.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, 0);
     }
     else if (MainWorldView.FBOid == FBOID.FORWARD_TRANSP)
     {
         s_forw_trans = s_forw_trans.Bind();
         GL.BindTexture(TextureTarget.Texture2DArray, 0);
     }
     else if (MainWorldView.FBOid == FBOID.SHADOWS)
     {
         GL.BindTexture(TextureTarget.Texture2DArray, 0);
         s_shadow = s_shadow.Bind();
     }
     if (FixPersp != Matrix4.Identity)
     {
         GL.UniformMatrix4(View3D.MAT_LOC_VIEW, false, ref FixPersp);
     }
 }
Ejemplo n.º 5
0
 public void CheckValid()
 {
     if (Internal_Program == -1)
     {
         Shader temp = Engine.GetShader(Name);
         Original_Program = temp.Original_Program;
         Internal_Program = Original_Program;
         RemappedTo = temp;
         NewVersion = temp;
     }
     else if (RemappedTo != null)
     {
         RemappedTo.CheckValid();
         Internal_Program = RemappedTo.Original_Program;
     }
 }
Ejemplo n.º 6
0
 public Shader()
 {
     NewVersion = this;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Starts or restarts the shader system.
 /// </summary>
 public void InitShaderSystem(Client tclient)
 {
     TheClient = tclient;
     // Reset shader list
     LoadedShaders = new List<Shader>();
     // Pregenerate a few needed shader
     ColorMultShader = GetShader("color_mult");
     TextCleanerShader = GetShader("text_cleaner");
 }
Ejemplo n.º 8
0
 /// <summary>
 /// Gets the shader object for a specific shader name.
 /// </summary>
 /// <param name="shadername">The name of the shader.</param>
 /// <returns>A valid shader object.</returns>
 public Shader GetShader(string shadername)
 {
     for (int i = 0; i < LoadedShaders.Count; i++)
     {
         if (LoadedShaders[i].Name == shadername)
         {
             return LoadedShaders[i];
         }
     }
     Shader Loaded = LoadShader(shadername);
     if (Loaded == null)
     {
         Loaded = new Shader();
         Loaded.Name = shadername;
         Loaded.Internal_Program = ColorMultShader.Original_Program;
         Loaded.Original_Program = ColorMultShader.Original_Program;
         Loaded.LoadedProperly = false;
         Loaded.Engine = this;
     }
     LoadedShaders.Add(Loaded);
     return Loaded;
 }
Ejemplo n.º 9
0
 /// <summary>
 /// Creates a full Shader object for a VS/FS input.
 /// </summary>
 /// <param name="VS">The input VertexShader code.</param>
 /// <param name="FS">The input FragmentShader code.</param>
 /// <param name="name">The name of the shader.</param>
 /// <param name="vars">The variables to use.</param>
 /// <returns>A valid Shader object.</returns>
 public Shader CreateShader(string VS, string FS, string name, string[] vars, string geom)
 {
     int Program = CompileToProgram(VS, FS, vars, geom);
     Shader generic = new Shader();
     generic.Name = name;
     generic.LoadedProperly = true;
     generic.Internal_Program = Program;
     generic.Original_Program = Program;
     generic.Vars = vars;
     generic.Engine = this;
     return generic;
 }