public ClipmapUpdater(Context context, ClipmapLevel[] clipmapLevels) { ShaderVertexAttributeCollection vertexAttributes = new ShaderVertexAttributeCollection(); vertexAttributes.Add(new ShaderVertexAttribute("position", VertexLocations.Position, ShaderVertexAttributeType.FloatVector2, 1)); Mesh unitQuad = RectangleTessellator.Compute(new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(1.0, 1.0)), 1, 1); _unitQuad = context.CreateVertexArray(unitQuad, vertexAttributes, BufferHint.StaticDraw); _unitQuadPrimitiveType = unitQuad.PrimitiveType; _sceneState = new SceneState(); _framebuffer = context.CreateFramebuffer(); _updateShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpdateVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpdateFS.glsl")); _updateTexelOutput = _updateShader.FragmentOutputs["texelOutput"]; _updateDrawState = new DrawState(new RenderState(), _updateShader, _unitQuad); _updateDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _updateDrawState.RenderState.DepthTest.Enabled = false; _updateDestinationOffset = (Uniform <Vector2F>)_updateShader.Uniforms["u_destinationOffset"]; _updateUpdateSize = (Uniform <Vector2F>)_updateShader.Uniforms["u_updateSize"]; _updateSourceOrigin = (Uniform <Vector2F>)_updateShader.Uniforms["u_sourceOrigin"]; _upsampleShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpsampleVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpsampleFS.glsl")); _upsampleTexelOutput = _upsampleShader.FragmentOutputs["texelOutput"]; _upsampleDrawState = new DrawState(new RenderState(), _upsampleShader, _unitQuad); _upsampleDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _upsampleDrawState.RenderState.DepthTest.Enabled = false; _upsampleSourceOrigin = (Uniform <Vector2F>)_upsampleShader.Uniforms["u_sourceOrigin"]; _upsampleUpdateSize = (Uniform <Vector2F>)_upsampleShader.Uniforms["u_updateSize"]; _upsampleDestinationOffset = (Uniform <Vector2F>)_upsampleShader.Uniforms["u_destinationOffset"]; _upsampleOneOverTextureSize = (Uniform <Vector2F>)_upsampleShader.Uniforms["u_oneOverTextureSize"]; _computeNormalsShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapComputeNormalsVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapComputeNormalsFS.glsl")); _normalOutput = _computeNormalsShader.FragmentOutputs["normalOutput"]; _computeNormalsDrawState = new DrawState(new RenderState(), _computeNormalsShader, _unitQuad); _computeNormalsDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _computeNormalsDrawState.RenderState.DepthTest.Enabled = false; _computeNormalsOrigin = (Uniform <Vector2F>)_computeNormalsShader.Uniforms["u_origin"]; _computeNormalsUpdateSize = (Uniform <Vector2F>)_computeNormalsShader.Uniforms["u_updateSize"]; _computeNormalsOneOverHeightMapSize = (Uniform <Vector2F>)_computeNormalsShader.Uniforms["u_oneOverHeightMapSize"]; _heightExaggeration = (Uniform <float>)_computeNormalsShader.Uniforms["u_heightExaggeration"]; _postDelta = (Uniform <float>)_computeNormalsShader.Uniforms["u_postDelta"]; HeightExaggeration = 1.0f; ClipmapLevel levelZero = clipmapLevels[0]; InitializeRequestThreads(context, _terrain, levelZero, levelZero.Terrain); InitializeRequestThreads(context, _imagery, levelZero, levelZero.Imagery); }
public ClipmapUpdater(Context context, ClipmapLevel[] clipmapLevels) { ShaderVertexAttributeCollection vertexAttributes = new ShaderVertexAttributeCollection(); vertexAttributes.Add(new ShaderVertexAttribute("position", VertexLocations.Position, ShaderVertexAttributeType.FloatVector2, 1)); Mesh unitQuad = RectangleTessellator.Compute(new RectangleD(new Vector2D(0.0, 0.0), new Vector2D(1.0, 1.0)), 1, 1); _unitQuad = context.CreateVertexArray(unitQuad, vertexAttributes, BufferHint.StaticDraw); _unitQuadPrimitiveType = unitQuad.PrimitiveType; _sceneState = new SceneState(); _framebuffer = context.CreateFramebuffer(); _updateShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpdateVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpdateFS.glsl")); _updateTexelOutput = _updateShader.FragmentOutputs["texelOutput"]; _updateDrawState = new DrawState(new RenderState(), _updateShader, _unitQuad); _updateDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _updateDrawState.RenderState.DepthTest.Enabled = false; _updateDestinationOffset = (Uniform<Vector2F>)_updateShader.Uniforms["u_destinationOffset"]; _updateUpdateSize = (Uniform<Vector2F>)_updateShader.Uniforms["u_updateSize"]; _updateSourceOrigin = (Uniform<Vector2F>)_updateShader.Uniforms["u_sourceOrigin"]; _upsampleShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpsampleVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapUpsampleFS.glsl")); _upsampleTexelOutput = _upsampleShader.FragmentOutputs["texelOutput"]; _upsampleDrawState = new DrawState(new RenderState(), _upsampleShader, _unitQuad); _upsampleDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _upsampleDrawState.RenderState.DepthTest.Enabled = false; _upsampleSourceOrigin = (Uniform<Vector2F>)_upsampleShader.Uniforms["u_sourceOrigin"]; _upsampleUpdateSize = (Uniform<Vector2F>)_upsampleShader.Uniforms["u_updateSize"]; _upsampleDestinationOffset = (Uniform<Vector2F>)_upsampleShader.Uniforms["u_destinationOffset"]; _upsampleOneOverTextureSize = (Uniform<Vector2F>)_upsampleShader.Uniforms["u_oneOverTextureSize"]; _computeNormalsShader = Device.CreateShaderProgram( EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapComputeNormalsVS.glsl"), EmbeddedResources.GetText("OpenGlobe.Scene.Terrain.ClipmapTerrain.ClipmapComputeNormalsFS.glsl")); _normalOutput = _computeNormalsShader.FragmentOutputs["normalOutput"]; _computeNormalsDrawState = new DrawState(new RenderState(), _computeNormalsShader, _unitQuad); _computeNormalsDrawState.RenderState.FacetCulling.FrontFaceWindingOrder = unitQuad.FrontFaceWindingOrder; _computeNormalsDrawState.RenderState.DepthTest.Enabled = false; _computeNormalsOrigin = (Uniform<Vector2F>)_computeNormalsShader.Uniforms["u_origin"]; _computeNormalsUpdateSize = (Uniform<Vector2F>)_computeNormalsShader.Uniforms["u_updateSize"]; _computeNormalsOneOverHeightMapSize = (Uniform<Vector2F>)_computeNormalsShader.Uniforms["u_oneOverHeightMapSize"]; _heightExaggeration = (Uniform<float>)_computeNormalsShader.Uniforms["u_heightExaggeration"]; _postDelta = (Uniform<float>)_computeNormalsShader.Uniforms["u_postDelta"]; HeightExaggeration = 1.0f; ClipmapLevel levelZero = clipmapLevels[0]; InitializeRequestThreads(context, _terrain, levelZero, levelZero.Terrain); InitializeRequestThreads(context, _imagery, levelZero, levelZero.Imagery); }
private static ShaderVertexAttributeCollection FindVertexAttributes(ShaderProgramNameGL3x program) { int programHandle = program.Value; int numberOfAttributes; GL.GetProgram(programHandle, ProgramParameter.ActiveAttributes, out numberOfAttributes); int attributeNameMaxLength; GL.GetProgram(programHandle, ProgramParameter.ActiveAttributeMaxLength, out attributeNameMaxLength); ShaderVertexAttributeCollection vertexAttributes = new ShaderVertexAttributeCollection(); for (int i = 0; i < numberOfAttributes; ++i) { int attributeNameLength; int attributeLength; ActiveAttribType attributeType; StringBuilder attributeNameBuilder = new StringBuilder(attributeNameMaxLength); GL.GetActiveAttrib(programHandle, i, attributeNameMaxLength, out attributeNameLength, out attributeLength, out attributeType, attributeNameBuilder); string attributeName = attributeNameBuilder.ToString(); if (attributeName.StartsWith("gl_", StringComparison.InvariantCulture)) { // // Names starting with the reserved prefix of "gl_" have a location of -1. // continue; } int attributeLocation = GL.GetAttribLocation(programHandle, attributeName); vertexAttributes.Add(new ShaderVertexAttribute( attributeName, attributeLocation, TypeConverterGL3x.To(attributeType), attributeLength)); } return(vertexAttributes); }
private static ShaderVertexAttributeCollection FindVertexAttributes(ShaderProgramNameGL3x program) { int programHandle = program.Value; int numberOfAttributes; GL.GetProgram(programHandle, ProgramParameter.ActiveAttributes, out numberOfAttributes); int attributeNameMaxLength; GL.GetProgram(programHandle, ProgramParameter.ActiveAttributeMaxLength, out attributeNameMaxLength); ShaderVertexAttributeCollection vertexAttributes = new ShaderVertexAttributeCollection(); for (int i = 0; i < numberOfAttributes; ++i) { int attributeNameLength; int attributeLength; ActiveAttribType attributeType; StringBuilder attributeNameBuilder = new StringBuilder(attributeNameMaxLength); GL.GetActiveAttrib(programHandle, i, attributeNameMaxLength, out attributeNameLength, out attributeLength, out attributeType, attributeNameBuilder); string attributeName = attributeNameBuilder.ToString(); if (attributeName.StartsWith("gl_", StringComparison.InvariantCulture)) { // // Names starting with the reserved prefix of "gl_" have a location of -1. // continue; } int attributeLocation = GL.GetAttribLocation(programHandle, attributeName); vertexAttributes.Add(new ShaderVertexAttribute( attributeName, attributeLocation, TypeConverterGL3x.To(attributeType), attributeLength)); } return vertexAttributes; }