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); } }
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); }
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; } }
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); } }
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; } }
public Shader() { NewVersion = this; }
/// <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"); }
/// <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; }
/// <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; }