public override void RenderScene(float FOV, float near, float far, Vector3f eyeVector, float xPos, float yPos) { base.RenderScene(FOV, near, far, eyeVector, xPos, yPos); Gl.glTexEnvf(Gl.GL_POINT_SPRITE_ARB, Gl.GL_COORD_REPLACE_ARB, Gl.GL_TRUE); Gl.glEnable(Gl.GL_POINT_SPRITE_ARB); //control point size from vertex program? Gl.glEnable(Gl.GL_VERTEX_PROGRAM_POINT_SIZE_ARB); Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture[selectedTexture]); //enable additive blending Gl.glEnable(Gl.GL_BLEND); Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA); //set the blend function Gl.glDepthFunc(Gl.GL_LEQUAL); //less or equal for depth #region PASS 1 //enable writing into depth buffer to Gl.glDepthMask(Gl.GL_TRUE); EnableShadersPass1(eyeVector); Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); Gl.glEnableClientState(Gl.GL_NORMAL_ARRAY); Gl.glEnableClientState(Gl.GL_COLOR_ARRAY); dataSource.RenderingPass(FOV, near, far, eyeVector, new Point2f(xPos, yPos)); Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); Gl.glDisableClientState(Gl.GL_NORMAL_ARRAY); Gl.glDisableClientState(Gl.GL_COLOR_ARRAY); Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, 0); #endregion #region PASS 2 Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); Gl.glDepthMask(Gl.GL_FALSE); EnableShadersPass2(eyeVector); Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); Gl.glEnableClientState(Gl.GL_NORMAL_ARRAY); Gl.glEnableClientState(Gl.GL_COLOR_ARRAY); VBOUtils.RenderVBOsFastSecondPass(); VBOUtils.ClearSecondPassQueue(); Gl.glDisableClientState(Gl.GL_VERTEX_ARRAY); Gl.glDisableClientState(Gl.GL_NORMAL_ARRAY); Gl.glDisableClientState(Gl.GL_COLOR_ARRAY); Gl.glBindBuffer(Gl.GL_ARRAY_BUFFER, 0); #endregion DisableShaders(); Gl.glDepthMask(Gl.GL_TRUE); Gl.glDisable(Gl.GL_POINT_SPRITE_ARB); }
public void Render() { VBOUtils.DrawVBO(_mode, ref _handle); }