예제 #1
0
 private static void DrawSpriteBatch(IEnumerable <IReadOnlyBox2D> bounds, ITexture texture)
 {
     texture.Activate();
     foreach (var enemy in bounds)
     {
         Draw(enemy);
     }
     texture.Deactivate();
 }
예제 #2
0
 /// <summary>
 /// Draws the specified texture.
 /// </summary>
 /// <param name="texture">The texture.</param>
 /// <param name="setUniformsHandler">The set uniforms handler.</param>
 public void Draw(ITexture texture, SetUniforms setUniformsHandler = null)
 {
     shaderProgram.Activate();
     texture.Activate();
     setUniformsHandler?.Invoke(shaderProgram);
     GL.DrawArrays(PrimitiveType.Quads, 0, 4);
     texture.Deactivate();
     shaderProgram.Deactivate();
 }
예제 #3
0
 private static void DrawTexturedRect(IReadOnlyBox2D rect, ITexture tex, IReadOnlyBox2D texCoords)
 {
     tex.Activate();
     GL.Begin(PrimitiveType.Quads);
     GL.TexCoord2(texCoords.MinX, texCoords.MinY); GL.Vertex2(rect.MinX, rect.MinY);
     GL.TexCoord2(texCoords.MaxX, texCoords.MinY); GL.Vertex2(rect.MaxX, rect.MinY);
     GL.TexCoord2(texCoords.MaxX, texCoords.MaxY); GL.Vertex2(rect.MaxX, rect.MaxY);
     GL.TexCoord2(texCoords.MinX, texCoords.MaxY); GL.Vertex2(rect.MinX, rect.MaxY);
     GL.End();
     tex.Deactivate();
 }
예제 #4
0
 private void RenderSsao(ITexture depthTexture)
 {
     _ssaoShader.Activate();
     GL.Uniform2(_ssaoShader.GetResourceLocation(ShaderResourceType.Uniform, "iResolution"), new OpenTK.Vector2(_width, _height));
     GL.Uniform1(_ssaoShader.GetResourceLocation(ShaderResourceType.Uniform, "iGlobalTime"), _time);
     GL.ActiveTexture(TextureUnit.Texture0);
     depthTexture.Activate();
     GL.DrawArrays(PrimitiveType.Quads, 0, 4);
     _ssaoShader.Deactivate();
     depthTexture.Deactivate();
 }
예제 #5
0
 private static void DrawTexturedRect(IReadOnlyBox2D Rectangle, ITexture tex)
 {
     GL.Color3(Color.White);
     tex.Activate();
     GL.Begin(PrimitiveType.Quads);
     GL.TexCoord2(0.0f, 0.0f); GL.Vertex2(Rectangle.MinX, Rectangle.MinY);
     GL.TexCoord2(1.0f, 0.0f); GL.Vertex2(Rectangle.MaxX, Rectangle.MinY);
     GL.TexCoord2(1.0f, 1.0f); GL.Vertex2(Rectangle.MaxX, Rectangle.MaxY);
     GL.TexCoord2(0.0f, 1.0f); GL.Vertex2(Rectangle.MinX, Rectangle.MaxY);
     GL.End();
     tex.Deactivate();
 }
예제 #6
0
 private static void DrawTexturedRect(IReadOnlyBox2D Rect, ITexture texture)
 {
     //the texture has to be enabled before use
     texture.Activate();
     GL.Begin(PrimitiveType.Quads);
     //when using textures we have to set a texture coordinate for each vertex
     //by using the TexCoord command BEFORE the Vertex command
     GL.TexCoord2(0.0f, 0.0f); GL.Vertex2(Rect.MinX, Rect.MinY);
     GL.TexCoord2(1.0f, 0.0f); GL.Vertex2(Rect.MaxX, Rect.MinY);
     GL.TexCoord2(1.0f, 1.0f); GL.Vertex2(Rect.MaxX, Rect.MaxY);
     GL.TexCoord2(0.0f, 1.0f); GL.Vertex2(Rect.MinX, Rect.MaxY);
     GL.End();
     //the texture is disabled, so no other draw calls use this texture
     texture.Deactivate();
 }
예제 #7
0
        private void RenderGround(Vector3 cameraPosition, float[] cam)
        {
            _geometryShader.Activate();
            GL.ActiveTexture(TextureUnit.Texture0);
            _groundTexture.Activate();
            GL.Uniform1(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "tex"), TextureUnit.Texture0 - TextureUnit.Texture0);
            GL.UniformMatrix4(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "camera"), 1, false, cam);
            GL.Uniform3(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "cameraPosition"), cameraPosition.ToOpenTK());
            GL.Uniform3(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "ambientLightColor"), new OpenTK.Vector3(0.1f, 0.1f, 0.1f));
            GL.Uniform3(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "lightDirection"), new OpenTK.Vector3(1f, 1.5f, -2f).Normalized());
            GL.Uniform3(_geometryShader.GetResourceLocation(ShaderResourceType.Uniform, "lightColor"), new OpenTK.Vector3(1f, 1f, 1f));

            _groundGeometry.Draw();

            _groundTexture.Deactivate();
            _geometryShader.Deactivate();
        }
예제 #8
0
        private void RenderAddedTextures(ITexture texture1, ITexture texture2, float opaque)
        {
            _addShader.Activate();
            GL.ActiveTexture(TextureUnit.Texture0);
            texture1.Activate();
            GL.Uniform1(_addShader.GetResourceLocation(ShaderResourceType.Uniform, "image1"), TextureUnit.Texture0 - TextureUnit.Texture0);

            GL.ActiveTexture(TextureUnit.Texture1);
            texture2.Activate();
            GL.Uniform1(_addShader.GetResourceLocation(ShaderResourceType.Uniform, "image2"), TextureUnit.Texture1 - TextureUnit.Texture0);

            GL.Uniform1(_addShader.GetResourceLocation(ShaderResourceType.Uniform, "opaque"), opaque);

            GL.DrawArrays(PrimitiveType.Quads, 0, 4);

            texture1.Deactivate();
            texture2.Deactivate();
            _addShader.Deactivate();
        }
예제 #9
0
        private void RenderGui(int materialId, int materialAmount, Voxel raytracedVoxel)
        {
            GL.Color3(Color.White);
            float crosshairsSize = 70.0f;

            _crosshairs.Activate();
            RenderFunctions.DrawRect(-crosshairsSize / (2 * (float)_width), -crosshairsSize / (2 * (float)_height), crosshairsSize / (float)_width, crosshairsSize / (float)_height);
            _crosshairs.Deactivate();

            float centerPos =
                -CalculateVoxelContentGuiTextWidth(materialId, materialAmount, 0.07f) / _aspect / 2;

            RenderVoxelContentGui(materialId, materialAmount, 0.07f, new Vector2(centerPos, -1.0f), "Selected:");

            if (raytracedVoxel != null && raytracedVoxel.MaterialId != Constant.MaterialAir)
            {
                centerPos =
                    -CalculateVoxelContentGuiTextWidth(raytracedVoxel.MaterialId, raytracedVoxel.Amount, 0.07f) / _aspect / 2;
                RenderVoxelContentGui(raytracedVoxel.MaterialId, raytracedVoxel.Amount, 0.07f, new Vector2(centerPos, 0.79f), "Looking at:");
            }
        }
예제 #10
0
        public void Render()
        {
            // Relevant for non shader pipelines
            // Got from: https://github.com/danielscherzer/Framework/blob/72fec5c85e6f21b868c41141ed1c8105f5252e5e/CG/
            // ... Examples/TextureExample/TextureExample.cs
            GL.Enable(EnableCap.Texture2D);

            // Enable blending for transparency in textures
            GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha);
            GL.Enable(EnableCap.Blend);

            // Color is multiplied with the texture color
            // White means no color change in the texture will be applied
            GL.Color4(ColorFilter);

            var matrix = GameObject?.Transform?.GetTransformationMatrixCached(!GameObject.IsUiElement) ??
                         System.Numerics.Matrix3x2.Identity;
            var minXminY = FastVector2Transform.Transform(Rect.MinX, Rect.MinY, matrix);
            var maxXminY = FastVector2Transform.Transform(Rect.MaxX, Rect.MinY, matrix);
            var maxXmaxY = FastVector2Transform.Transform(Rect.MaxX, Rect.MaxY, matrix);
            var minXmaxY = FastVector2Transform.Transform(Rect.MinX, Rect.MaxY, matrix);

            texture.Activate();
            GL.Begin(PrimitiveType.Quads);
            GL.TexCoord2(0.0f, 0.0f);
            GL.Vertex2(minXminY);
            GL.TexCoord2(1.0f, 0.0f);
            GL.Vertex2(maxXminY);
            GL.TexCoord2(1.0f, 1.0f);
            GL.Vertex2(maxXmaxY);
            GL.TexCoord2(0.0f, 1.0f);
            GL.Vertex2(minXmaxY);
            GL.End();
            texture.Deactivate();

            GL.Disable(EnableCap.Blend);
            GL.Disable(EnableCap.Texture2D);
        }
예제 #11
0
        private void DrawObject(VAO geom, ITexture envMap, ITexture materialTex, Transformation3D camera, Vector3 cameraPosition)
        {
            shaderProgram.Activate();

            GL.ActiveTexture(TextureUnit.Texture0 + 0);
            envMap.Activate();
            shaderProgram.Uniform("envMap", 0);
            GL.ActiveTexture(TextureUnit.Texture0 + 1);
            materialTex.Activate();
            shaderProgram.Uniform("materialTex", 1);

            shaderProgram.Uniform("camera", camera.CalcLocalToWorldColumnMajorMatrix());
            shaderProgram.Uniform("cameraPosition", cameraPosition);

            geom.Draw();

            GL.ActiveTexture(TextureUnit.Texture0 + 0);
            envMap.Deactivate();
            GL.ActiveTexture(TextureUnit.Texture0 + 1);
            materialTex.Deactivate();

            shaderProgram.Deactivate();
        }
 public static void DeactivateTexture(this IShaderProgram shader, int id, ITexture texture)
 {
     GL.ActiveTexture(TextureUnit.Texture0 + id);
     texture.Deactivate(); //Don´t use GL.BindTexture(..., 0). The texture target is not known this way and thus is not useable universally.
 }
 private static void DrawTexturedRect(IReadOnlyBox2D rect, ITexture tex, IReadOnlyBox2D texCoords)
 {
     tex.Activate();
     rect.DrawTexturedRect(texCoords);
     tex.Deactivate();
 }