예제 #1
0
        public static int loadCubeMap()
        {
            int texID = GL.GenTexture();

            GL.ActiveTexture(TextureUnit.Texture0);
            GL.BindTexture(TextureTarget.TextureCubeMap, texID);

            var cubeMapTextures = loadCubeMapTextures();

            foreach (var dictValues in cubeMapTextures)
            {
                var target = TextureTarget.Texture2D;

                switch (dictValues.Key)
                {
                case EnumFacing.NORTH:
                    target = TextureTarget.TextureCubeMapNegativeZ;
                    break;

                case EnumFacing.SOUTH:
                    target = TextureTarget.TextureCubeMapPositiveZ;
                    break;

                case EnumFacing.EAST:
                    target = TextureTarget.TextureCubeMapPositiveX;
                    break;

                case EnumFacing.WEST:
                    target = TextureTarget.TextureCubeMapNegativeX;
                    break;

                case EnumFacing.UP:
                    target = TextureTarget.TextureCubeMapPositiveY;
                    break;

                case EnumFacing.DOWN:
                    target = TextureTarget.TextureCubeMapNegativeY;
                    break;
                }

                var bmp  = (Bitmap)dictValues.Value.Clone();
                var size = bmp.Size;

                BitmapData data = bmp.LockBits(new Rectangle(0, 0, size.Width, size.Height),
                                               ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb);

                GL.TexImage2D(target, 0, PixelInternalFormat.Rgba, data.Width, data.Height, 0, PixelFormat.Bgra,
                              PixelType.UnsignedByte, data.Scan0);

                bmp.UnlockBits(data);
            }

            GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMagFilter, (int)TextureMagFilter.Linear);
            GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Linear);

            GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapS, (int)TextureWrapMode.ClampToEdge);
            GL.TexParameter(TextureTarget.TextureCubeMap, TextureParameterName.TextureWrapT, (int)TextureWrapMode.ClampToEdge);

            return(texID);
        }
예제 #2
0
 public void RenderTextured(IGraphicsContext context, ITexture lightmapTexture)
 {
     foreach (var subset in GetSubsets <ITexture>(Textured).Where(x => x.Instance != null))
     {
         GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture0);
         var tex = (ITexture)subset.Instance;
         tex.Bind();
         GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture1);
         lightmapTexture.Bind();
         Render(context, PrimitiveType.Triangles, subset);
         GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture0);
     }
 }
예제 #3
0
        public static TextureHandle Create(Size <Pixels> size, IOSurface surface)
        {
            GL.ActiveTexture(TextureUnit.Texture0);
            var texture = new TextureHandle(GL.GenTexture());

            GL.BindTexture(TextureTarget.TextureRectangle, texture);
            GL.TexParameter(TextureTarget.TextureRectangle, TextureParameterName.TextureMagFilter, (int)(TextureMagFilter.Nearest));
            GL.TexParameter(TextureTarget.TextureRectangle, TextureParameterName.TextureMinFilter, (int)(TextureMinFilter.Linear));
            GL.TexParameter(TextureTarget.TextureRectangle, TextureParameterName.TextureWrapS, (int)(TextureWrapMode.ClampToEdge));
            GL.TexParameter(TextureTarget.TextureRectangle, TextureParameterName.TextureWrapT, (int)(TextureWrapMode.ClampToEdge));
            Resize(texture, size, surface);
            return(texture);
        }
예제 #4
0
 public void RenderUntextured(IGraphicsContext context, Coordinate location)
 {
     GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture0);
     TextureHelper.Unbind();
     GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture1);
     TextureHelper.Unbind();
     GL.ActiveTexture(OpenTK.Graphics.OpenGL.TextureUnit.Texture0);
     foreach (var subset in GetSubsets <ITexture>(Textured).Where(x => x.Instance == null))
     {
         Render(context, PrimitiveType.Triangles, subset);
     }
     foreach (var subset in GetSubsets <Entity>(Textured))
     {
         var e = (Entity)subset.Instance;
         if (!CBRE.Settings.View.DisableModelRendering && e.HasModel() && e.HideDistance() > (location - e.Origin).VectorMagnitude())
         {
             continue;
         }
         Render(context, PrimitiveType.Triangles, subset);
     }
 }
예제 #5
0
 public void ActiveTexture(GLTextureUnit texture)
 {
     GL.ActiveTexture((TextureUnit)texture);
 }