diff --git a/AUTHORS b/AUTHORS index e69e5760d2..10c9d23fde 100644 --- a/AUTHORS +++ b/AUTHORS @@ -100,8 +100,8 @@ distributed under the MIT license. Using SharpFont created by Robert Rouhani and distributed under the MIT license. -Using the Tao framework and distributed under -the MIT license. +Using the Open Toolkit distributed under the +MIT license. Using SDL2# created by Ethan Lee and released under the zlib license. diff --git a/Makefile b/Makefile index 46f775589e..5ab9c331f5 100644 --- a/Makefile +++ b/Makefile @@ -98,7 +98,7 @@ rsdl2_SRCS := $(shell find OpenRA.Renderer.Sdl2/ -iname '*.cs') rsdl2_TARGET = OpenRA.Renderer.Sdl2.dll rsdl2_KIND = library rsdl2_DEPS = $(game_TARGET) -rsdl2_LIBS = $(COMMON_LIBS) thirdparty/Tao/Tao.OpenGl.dll thirdparty/SDL2-CS.dll $(rsdl2_DEPS) +rsdl2_LIBS = $(COMMON_LIBS) thirdparty/SDL2-CS.dll $(rsdl2_DEPS) rnull_SRCS := $(shell find OpenRA.Renderer.Null/ -iname '*.cs') rnull_TARGET = OpenRA.Renderer.Null.dll @@ -276,7 +276,6 @@ endif dependencies: @ $(CP_R) thirdparty/*.dl* . - @ $(CP_R) thirdparty/Tao/* . @ $(CP_R) thirdparty/${platformdeps}/* . version: mods/ra/mod.yaml mods/cnc/mod.yaml mods/d2k/mod.yaml mods/modchooser/mod.yaml @@ -315,7 +314,6 @@ install-core: default @$(CP_R) glsl "$(DATA_INSTALL_DIR)" @$(CP_R) lua "$(DATA_INSTALL_DIR)" @$(CP) *.ttf "$(DATA_INSTALL_DIR)" - @$(CP) thirdparty/Tao/* "$(DATA_INSTALL_DIR)" @$(CP) thirdparty/SDL2-CS* "$(DATA_INSTALL_DIR)" @$(CP) thirdparty/Eluant* "$(DATA_INSTALL_DIR)" @$(INSTALL_PROGRAM) thirdparty/ICSharpCode.SharpZipLib.dll "$(DATA_INSTALL_DIR)" diff --git a/OpenRA.Renderer.Sdl2/ErrorHandler.cs b/OpenRA.Renderer.Sdl2/ErrorHandler.cs index 5d1ec5f88b..00c262e544 100644 --- a/OpenRA.Renderer.Sdl2/ErrorHandler.cs +++ b/OpenRA.Renderer.Sdl2/ErrorHandler.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* -* Copyright 2007-2011 The OpenRA Developers (see AUTHORS) +* Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -10,37 +10,18 @@ using System; using System.Diagnostics; -using Tao.OpenGl; +using OpenTK.Graphics.OpenGL; namespace OpenRA.Renderer.Sdl2 { public static class ErrorHandler { - public enum GlError - { - GL_NO_ERROR = Gl.GL_NO_ERROR, - GL_INVALID_ENUM = Gl.GL_INVALID_ENUM, - GL_INVALID_VALUE = Gl.GL_INVALID_VALUE, - GL_STACK_OVERFLOW = Gl.GL_STACK_OVERFLOW, - GL_STACK_UNDERFLOW = Gl.GL_STACK_UNDERFLOW, - GL_OUT_OF_MEMORY = Gl.GL_OUT_OF_MEMORY, - GL_TABLE_TOO_LARGE = Gl.GL_TABLE_TOO_LARGE, - GL_INVALID_OPERATION = Gl.GL_INVALID_OPERATION, - - // Framebuffer errors - GL_FRAMEBUFFER_COMPLETE_EXT = Gl.GL_FRAMEBUFFER_COMPLETE_EXT, - GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT, - GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT, - GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT = Gl.GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT, - GL_FRAMEBUFFER_UNSUPPORTED_EXT = Gl.GL_FRAMEBUFFER_UNSUPPORTED_EXT, - } - public static void CheckGlError() { - var n = Gl.glGetError(); - if (n != Gl.GL_NO_ERROR) + var n = GL.GetError(); + if (n != ErrorCode.NoError) { - var error = "GL Error: {0}\n{1}".F((GlError)n, new StackTrace()); + var error = "GL Error: {0}\n{1}".F(n, new StackTrace()); WriteGraphicsLog(error); throw new InvalidOperationException("OpenGL Error: See graphics.log for details."); } @@ -51,12 +32,12 @@ namespace OpenRA.Renderer.Sdl2 Log.Write("graphics", message); Log.Write("graphics", ""); Log.Write("graphics", "OpenGL Information:"); - Log.Write("graphics", "Vendor: {0}", Gl.glGetString(Gl.GL_VENDOR)); - Log.Write("graphics", "Renderer: {0}", Gl.glGetString(Gl.GL_RENDERER)); - Log.Write("graphics", "GL Version: {0}", Gl.glGetString(Gl.GL_VERSION)); - Log.Write("graphics", "Shader Version: {0}", Gl.glGetString(Gl.GL_SHADING_LANGUAGE_VERSION)); + Log.Write("graphics", "Vendor: {0}", GL.GetString(StringName.Vendor)); + Log.Write("graphics", "Renderer: {0}", GL.GetString(StringName.Renderer)); + Log.Write("graphics", "GL Version: {0}", GL.GetString(StringName.Version)); + Log.Write("graphics", "Shader Version: {0}", GL.GetString(StringName.ShadingLanguageVersion)); Log.Write("graphics", "Available extensions:"); - Log.Write("graphics", Gl.glGetString(Gl.GL_EXTENSIONS)); + Log.Write("graphics", GL.GetString(StringName.Extensions)); } } } \ No newline at end of file diff --git a/OpenRA.Renderer.Sdl2/FrameBuffer.cs b/OpenRA.Renderer.Sdl2/FrameBuffer.cs index 6e4eaace76..3bba809464 100644 --- a/OpenRA.Renderer.Sdl2/FrameBuffer.cs +++ b/OpenRA.Renderer.Sdl2/FrameBuffer.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -13,7 +13,7 @@ using System.Diagnostics; using System.Drawing; using System.IO; using OpenRA.Graphics; -using Tao.OpenGl; +using OpenTK.Graphics.OpenGL; namespace OpenRA.Renderer.Sdl2 { @@ -29,41 +29,41 @@ namespace OpenRA.Renderer.Sdl2 if (!Exts.IsPowerOf2(size.Width) || !Exts.IsPowerOf2(size.Height)) throw new InvalidDataException("Frame buffer size ({0}x{1}) must be a power of two".F(size.Width, size.Height)); - Gl.glGenFramebuffersEXT(1, out framebuffer); + GL.Ext.GenFramebuffers(1, out framebuffer); ErrorHandler.CheckGlError(); - Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, framebuffer); + GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, framebuffer); ErrorHandler.CheckGlError(); // Color texture = new Texture(); texture.SetEmpty(size.Width, size.Height); - Gl.glFramebufferTexture2DEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_COLOR_ATTACHMENT0_EXT, Gl.GL_TEXTURE_2D, texture.ID, 0); + GL.Ext.FramebufferTexture2D(FramebufferTarget.FramebufferExt, FramebufferAttachment.ColorAttachment0Ext, TextureTarget.Texture2D, texture.ID, 0); ErrorHandler.CheckGlError(); // Depth - Gl.glGenRenderbuffersEXT(1, out depth); + GL.Ext.GenRenderbuffers(1, out depth); ErrorHandler.CheckGlError(); - Gl.glBindRenderbufferEXT(Gl.GL_RENDERBUFFER_EXT, depth); + GL.Ext.BindRenderbuffer(RenderbufferTarget.RenderbufferExt, depth); ErrorHandler.CheckGlError(); - Gl.glRenderbufferStorageEXT(Gl.GL_RENDERBUFFER_EXT, Gl.GL_DEPTH_COMPONENT, size.Width, size.Height); + GL.Ext.RenderbufferStorage(RenderbufferTarget.RenderbufferExt, (RenderbufferStorage)All.DepthComponent, size.Width, size.Height); ErrorHandler.CheckGlError(); - Gl.glFramebufferRenderbufferEXT(Gl.GL_FRAMEBUFFER_EXT, Gl.GL_DEPTH_ATTACHMENT_EXT, Gl.GL_RENDERBUFFER_EXT, depth); + GL.Ext.FramebufferRenderbuffer(FramebufferTarget.FramebufferExt, FramebufferAttachment.DepthAttachmentExt, RenderbufferTarget.RenderbufferExt, depth); ErrorHandler.CheckGlError(); // Test for completeness - var status = Gl.glCheckFramebufferStatusEXT(Gl.GL_FRAMEBUFFER_EXT); - if (status != Gl.GL_FRAMEBUFFER_COMPLETE_EXT) + var status = GL.Ext.CheckFramebufferStatus(FramebufferTarget.FramebufferExt); + if (status != FramebufferErrorCode.FramebufferCompleteExt) { - var error = "Error creating framebuffer: {0}\n{1}".F((ErrorHandler.GlError)status, new StackTrace()); + var error = "Error creating framebuffer: {0}\n{1}".F(status, new StackTrace()); ErrorHandler.WriteGraphicsLog(error); throw new InvalidOperationException("OpenGL Error: See graphics.log for details."); } // Restore default buffer - Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0); + GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, 0); ErrorHandler.CheckGlError(); } @@ -74,8 +74,7 @@ namespace OpenRA.Renderer.Sdl2 { fixed (int* ptr = &v[0]) { - IntPtr intPtr = new IntPtr((void*)ptr); - Gl.glGetIntegerv(Gl.GL_VIEWPORT, intPtr); + GL.GetInteger(GetPName.Viewport, ptr); } } @@ -85,9 +84,9 @@ namespace OpenRA.Renderer.Sdl2 void FinalizeInner() { - Gl.glDeleteFramebuffersEXT(1, ref framebuffer); + GL.Ext.DeleteFramebuffers(1, ref framebuffer); ErrorHandler.CheckGlError(); - Gl.glDeleteRenderbuffersEXT(1, ref depth); + GL.Ext.DeleteRenderbuffers(1, ref depth); ErrorHandler.CheckGlError(); } @@ -99,25 +98,25 @@ namespace OpenRA.Renderer.Sdl2 // Cache viewport rect to restore when unbinding cv = ViewportRectangle(); - Gl.glFlush(); + GL.Flush(); ErrorHandler.CheckGlError(); - Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, framebuffer); + GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, framebuffer); ErrorHandler.CheckGlError(); - Gl.glViewport(0, 0, size.Width, size.Height); + GL.Viewport(0, 0, size.Width, size.Height); ErrorHandler.CheckGlError(); - Gl.glClearColor(0, 0, 0, 0); + GL.ClearColor(0, 0, 0, 0); ErrorHandler.CheckGlError(); - Gl.glClear(Gl.GL_COLOR_BUFFER_BIT | Gl.GL_DEPTH_BUFFER_BIT); + GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit); ErrorHandler.CheckGlError(); } public void Unbind() { - Gl.glFlush(); + GL.Flush(); ErrorHandler.CheckGlError(); - Gl.glBindFramebufferEXT(Gl.GL_FRAMEBUFFER_EXT, 0); + GL.Ext.BindFramebuffer(FramebufferTarget.FramebufferExt, 0); ErrorHandler.CheckGlError(); - Gl.glViewport(cv[0], cv[1], cv[2], cv[3]); + GL.Viewport(cv[0], cv[1], cv[2], cv[3]); ErrorHandler.CheckGlError(); } diff --git a/OpenRA.Renderer.Sdl2/OpenRA.Renderer.Sdl2.csproj b/OpenRA.Renderer.Sdl2/OpenRA.Renderer.Sdl2.csproj index 8417c540ef..59825a48c3 100644 --- a/OpenRA.Renderer.Sdl2/OpenRA.Renderer.Sdl2.csproj +++ b/OpenRA.Renderer.Sdl2/OpenRA.Renderer.Sdl2.csproj @@ -33,9 +33,6 @@ - - ..\thirdparty\Tao\Tao.OpenGl.dll - ..\thirdparty\SDL2-CS.dll diff --git a/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs b/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs index 88890814c5..35cda16564 100755 --- a/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs +++ b/OpenRA.Renderer.Sdl2/Sdl2GraphicsDevice.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* -* Copyright 2007-2013 The OpenRA Developers (see AUTHORS) +* Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -14,7 +14,7 @@ using System.Linq; using OpenRA; using OpenRA.Graphics; using SDL2; -using Tao.OpenGl; +using OpenTK.Graphics.OpenGL; [assembly: Renderer(typeof(OpenRA.Renderer.Sdl2.DeviceFactory))] @@ -33,6 +33,7 @@ namespace OpenRA.Renderer.Sdl2 { static string[] requiredExtensions = { + // TODO: not ARB anymore "GL_ARB_vertex_shader", "GL_ARB_fragment_shader", "GL_ARB_vertex_buffer_object", @@ -41,7 +42,7 @@ namespace OpenRA.Renderer.Sdl2 Size size; Sdl2Input input; - IntPtr window; + IntPtr context, window; public Size WindowSize { get { return size; } } @@ -84,10 +85,12 @@ namespace OpenRA.Renderer.Sdl2 } SDL.SDL_ShowCursor(0); - SDL.SDL_GL_CreateContext(window); + context = SDL.SDL_GL_CreateContext(window); + SDL.SDL_GL_MakeCurrent(window, context); + GL.LoadAll(); ErrorHandler.CheckGlError(); - var extensions = Gl.glGetString(Gl.GL_EXTENSIONS); + var extensions = GL.GetString(StringName.Extensions); if (extensions == null) Console.WriteLine("Failed to fetch GL_EXTENSIONS, this is bad."); @@ -98,9 +101,9 @@ namespace OpenRA.Renderer.Sdl2 throw new InvalidProgramException("Unsupported GPU. See graphics.log for details."); } - Gl.glEnableClientState(Gl.GL_VERTEX_ARRAY); + GL.EnableClientState(ArrayCap.VertexArray); ErrorHandler.CheckGlError(); - Gl.glEnableClientState(Gl.GL_TEXTURE_COORD_ARRAY); + GL.EnableClientState(ArrayCap.TextureCoordArray); ErrorHandler.CheckGlError(); SDL.SDL_SetModState(0); @@ -109,17 +112,19 @@ namespace OpenRA.Renderer.Sdl2 public virtual void Quit() { + SDL.SDL_GL_DeleteContext(context); + SDL.SDL_DestroyWindow(window); SDL.SDL_Quit(); } - int ModeFromPrimitiveType(PrimitiveType pt) + BeginMode ModeFromPrimitiveType(PrimitiveType pt) { switch (pt) { - case PrimitiveType.PointList: return Gl.GL_POINTS; - case PrimitiveType.LineList: return Gl.GL_LINES; - case PrimitiveType.TriangleList: return Gl.GL_TRIANGLES; - case PrimitiveType.QuadList: return Gl.GL_QUADS; + case PrimitiveType.PointList: return BeginMode.Points; + case PrimitiveType.LineList: return BeginMode.Lines; + case PrimitiveType.TriangleList: return BeginMode.Triangles; + case PrimitiveType.QuadList: return BeginMode.Quads; } throw new NotImplementedException(); @@ -127,63 +132,63 @@ namespace OpenRA.Renderer.Sdl2 public void DrawPrimitives(PrimitiveType pt, int firstVertex, int numVertices) { - Gl.glDrawArrays(ModeFromPrimitiveType(pt), firstVertex, numVertices); + GL.DrawArrays(ModeFromPrimitiveType(pt), firstVertex, numVertices); ErrorHandler.CheckGlError(); } public void Clear() { - Gl.glClearColor(0, 0, 0, 0); + GL.ClearColor(0, 0, 0, 0); ErrorHandler.CheckGlError(); - Gl.glClear(Gl.GL_COLOR_BUFFER_BIT); + GL.Clear(ClearBufferMask.ColorBufferBit); ErrorHandler.CheckGlError(); } public void EnableDepthBuffer() { - Gl.glClear(Gl.GL_DEPTH_BUFFER_BIT); + GL.Clear(ClearBufferMask.DepthBufferBit); ErrorHandler.CheckGlError(); - Gl.glEnable(Gl.GL_DEPTH_TEST); + GL.Enable(EnableCap.DepthTest); ErrorHandler.CheckGlError(); } public void DisableDepthBuffer() { - Gl.glDisable(Gl.GL_DEPTH_TEST); + GL.Disable(EnableCap.DepthTest); ErrorHandler.CheckGlError(); } public void SetBlendMode(BlendMode mode) { - Gl.glBlendEquation(Gl.GL_FUNC_ADD); + GL.BlendEquation(BlendEquationMode.FuncAdd); ErrorHandler.CheckGlError(); switch (mode) { case BlendMode.None: - Gl.glDisable(Gl.GL_BLEND); + GL.Disable(EnableCap.Blend); break; case BlendMode.Alpha: - Gl.glEnable(Gl.GL_BLEND); + GL.Enable(EnableCap.Blend); ErrorHandler.CheckGlError(); - Gl.glBlendFunc(Gl.GL_SRC_ALPHA, Gl.GL_ONE_MINUS_SRC_ALPHA); + GL.BlendFunc(BlendingFactorSrc.SrcAlpha, BlendingFactorDest.OneMinusSrcAlpha); break; case BlendMode.Additive: - Gl.glEnable(Gl.GL_BLEND); + GL.Enable(EnableCap.Blend); ErrorHandler.CheckGlError(); - Gl.glBlendFunc(Gl.GL_ONE, Gl.GL_ONE); + GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One); break; case BlendMode.Subtractive: - Gl.glEnable(Gl.GL_BLEND); + GL.Enable(EnableCap.Blend); ErrorHandler.CheckGlError(); - Gl.glBlendFunc(Gl.GL_ONE, Gl.GL_ONE); + GL.BlendFunc(BlendingFactorSrc.One, BlendingFactorDest.One); ErrorHandler.CheckGlError(); - Gl.glBlendEquation(Gl.GL_FUNC_REVERSE_SUBTRACT); + GL.BlendEquation(BlendEquationMode.FuncReverseSubtract); break; case BlendMode.Multiply: - Gl.glEnable(Gl.GL_BLEND); + GL.Enable(EnableCap.Blend); ErrorHandler.CheckGlError(); - Gl.glBlendFuncSeparate(Gl.GL_DST_COLOR, Gl.GL_ZERO, Gl.GL_ONE, Gl.GL_ONE_MINUS_SRC_ALPHA); + GL.BlendFuncSeparate(BlendingFactorSrc.DstColor, BlendingFactorDest.Zero, BlendingFactorSrc.One, BlendingFactorDest.OneMinusSrcAlpha); ErrorHandler.CheckGlError(); break; } @@ -199,21 +204,21 @@ namespace OpenRA.Renderer.Sdl2 if (height < 0) height = 0; - Gl.glScissor(left, size.Height - (top + height), width, height); + GL.Scissor(left, size.Height - (top + height), width, height); ErrorHandler.CheckGlError(); - Gl.glEnable(Gl.GL_SCISSOR_TEST); + GL.Enable(EnableCap.ScissorTest); ErrorHandler.CheckGlError(); } public void DisableScissor() { - Gl.glDisable(Gl.GL_SCISSOR_TEST); + GL.Disable(EnableCap.ScissorTest); ErrorHandler.CheckGlError(); } public void SetLineWidth(float width) { - Gl.glLineWidth(width); + GL.LineWidth(width); ErrorHandler.CheckGlError(); } diff --git a/OpenRA.Renderer.Sdl2/Shader.cs b/OpenRA.Renderer.Sdl2/Shader.cs index a237eb4cfa..af0f2e55f9 100644 --- a/OpenRA.Renderer.Sdl2/Shader.cs +++ b/OpenRA.Renderer.Sdl2/Shader.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -14,7 +14,8 @@ using System.IO; using System.Text; using OpenRA.FileSystem; using OpenRA.Graphics; -using Tao.OpenGl; +using OpenTK; +using OpenTK.Graphics.OpenGL; namespace OpenRA.Renderer.Sdl2 { @@ -31,76 +32,73 @@ namespace OpenRA.Renderer.Sdl2 using (var file = new StreamReader(GlobalFileSystem.Open("glsl{0}{1}.vert".F(Path.DirectorySeparatorChar, name)))) vertexCode = file.ReadToEnd(); - var v = Gl.glCreateShaderObjectARB(Gl.GL_VERTEX_SHADER_ARB); + var vertexShader = GL.CreateShader(ShaderType.VertexShader); ErrorHandler.CheckGlError(); - Gl.glShaderSourceARB(v, 1, new string[] { vertexCode }, null); + GL.ShaderSource(vertexShader, vertexCode); ErrorHandler.CheckGlError(); - Gl.glCompileShaderARB(v); + GL.CompileShader(vertexShader); ErrorHandler.CheckGlError(); - int success; - Gl.glGetObjectParameterivARB(v, Gl.GL_OBJECT_COMPILE_STATUS_ARB, out success); + GL.GetShader(vertexShader, ShaderParameter.CompileStatus, out success); ErrorHandler.CheckGlError(); - if (success == 0) - throw new InvalidProgramException("Compile error in {0}{1}.vert".F(Path.DirectorySeparatorChar, name)); + if (success == (int)All.False) + throw new InvalidProgramException("Compile error in glsl{0}{1}.vert".F(Path.DirectorySeparatorChar, name)); // Fragment shader string fragmentCode; using (var file = new StreamReader(GlobalFileSystem.Open("glsl{0}{1}.frag".F(Path.DirectorySeparatorChar, name)))) fragmentCode = file.ReadToEnd(); - var f = Gl.glCreateShaderObjectARB(Gl.GL_FRAGMENT_SHADER_ARB); + var fragmentShader = GL.CreateShader(ShaderType.FragmentShader); ErrorHandler.CheckGlError(); - Gl.glShaderSourceARB(f, 1, new string[] { fragmentCode }, null); + GL.ShaderSource(fragmentShader, fragmentCode); ErrorHandler.CheckGlError(); - Gl.glCompileShaderARB(f); + GL.CompileShader(fragmentShader); ErrorHandler.CheckGlError(); - - Gl.glGetObjectParameterivARB(f, Gl.GL_OBJECT_COMPILE_STATUS_ARB, out success); + GL.GetShader(vertexShader, ShaderParameter.CompileStatus, out success); ErrorHandler.CheckGlError(); - if (success == 0) + if (success == (int)All.False) throw new InvalidProgramException("Compile error in glsl{0}{1}.frag".F(Path.DirectorySeparatorChar, name)); // Assemble program - program = Gl.glCreateProgramObjectARB(); + program = GL.CreateProgram(); ErrorHandler.CheckGlError(); - Gl.glAttachObjectARB(program, v); + GL.AttachShader(program, vertexShader); ErrorHandler.CheckGlError(); - Gl.glAttachObjectARB(program, f); + GL.AttachShader(program, fragmentShader); ErrorHandler.CheckGlError(); - Gl.glLinkProgramARB(program); + GL.LinkProgram(program); ErrorHandler.CheckGlError(); - - Gl.glGetObjectParameterivARB(program, Gl.GL_OBJECT_LINK_STATUS_ARB, out success); + GL.GetProgram(program, ProgramParameter.LinkStatus, out success); ErrorHandler.CheckGlError(); - if (success == 0) + if (success == (int)All.False) throw new InvalidProgramException("Linking error in {0} shader".F(name)); - Gl.glUseProgramObjectARB(program); + GL.UseProgram(program); ErrorHandler.CheckGlError(); int numUniforms; - Gl.glGetObjectParameterivARB(program, Gl.GL_ACTIVE_UNIFORMS, out numUniforms); + GL.GetProgram(program, ProgramParameter.ActiveUniforms, out numUniforms); ErrorHandler.CheckGlError(); int nextTexUnit = 0; for (var i = 0; i < numUniforms; i++) { - int length, size, type; + int length, size; + ActiveUniformType type; var sb = new StringBuilder(128); - - Gl.glGetActiveUniformARB(program, i, 128, out length, out size, out type, sb); + GL.GetActiveUniform(program, i, 128, out length, out size, out type, sb); var sampler = sb.ToString(); ErrorHandler.CheckGlError(); - if (type == Gl.GL_SAMPLER_2D_ARB) + if (type == ActiveUniformType.Sampler2D) { samplers.Add(sampler, nextTexUnit); - var loc = Gl.glGetUniformLocationARB(program, sampler); + var loc = GL.GetUniformLocation(program, sampler); ErrorHandler.CheckGlError(); - Gl.glUniform1iARB(loc, nextTexUnit); + GL.Uniform1(loc, nextTexUnit); ErrorHandler.CheckGlError(); nextTexUnit++; @@ -110,13 +108,13 @@ namespace OpenRA.Renderer.Sdl2 public void Render(Action a) { - Gl.glUseProgramObjectARB(program); + GL.UseProgram(program); // bind the textures foreach (var kv in textures) { - Gl.glActiveTextureARB(Gl.GL_TEXTURE0_ARB + kv.Key); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, ((Texture)kv.Value).ID); + GL.ActiveTexture(TextureUnit.Texture0 + kv.Key); + GL.BindTexture(TextureTarget.Texture2D, ((Texture)kv.Value).ID); } ErrorHandler.CheckGlError(); @@ -136,34 +134,34 @@ namespace OpenRA.Renderer.Sdl2 public void SetVec(string name, float x) { - Gl.glUseProgramObjectARB(program); + GL.UseProgram(program); ErrorHandler.CheckGlError(); - var param = Gl.glGetUniformLocationARB(program, name); + var param = GL.GetUniformLocation(program, name); ErrorHandler.CheckGlError(); - Gl.glUniform1fARB(param, x); + GL.Uniform1(param, x); ErrorHandler.CheckGlError(); } public void SetVec(string name, float x, float y) { - Gl.glUseProgramObjectARB(program); + GL.UseProgram(program); ErrorHandler.CheckGlError(); - var param = Gl.glGetUniformLocationARB(program, name); + var param = GL.GetUniformLocation(program, name); ErrorHandler.CheckGlError(); - Gl.glUniform2fARB(param, x, y); + GL.Uniform2(param, x, y); ErrorHandler.CheckGlError(); } public void SetVec(string name, float[] vec, int length) { - var param = Gl.glGetUniformLocationARB(program, name); + var param = GL.GetUniformLocation(program, name); ErrorHandler.CheckGlError(); switch (length) { - case 1: Gl.glUniform1fv(param, 1, vec); break; - case 2: Gl.glUniform2fv(param, 1, vec); break; - case 3: Gl.glUniform3fv(param, 1, vec); break; - case 4: Gl.glUniform4fv(param, 1, vec); break; + case 1: GL.Uniform1(param, 1, vec); break; + case 2: GL.Uniform2(param, 1, vec); break; + case 3: GL.Uniform3(param, 1, vec); break; + case 4: GL.Uniform4(param, 1, vec); break; default: throw new InvalidDataException("Invalid vector length"); } @@ -175,11 +173,11 @@ namespace OpenRA.Renderer.Sdl2 if (mtx.Length != 16) throw new InvalidDataException("Invalid 4x4 matrix"); - Gl.glUseProgramObjectARB(program); + GL.UseProgram(program); ErrorHandler.CheckGlError(); - var param = Gl.glGetUniformLocationARB(program, name); + var param = GL.GetUniformLocation(program, name); ErrorHandler.CheckGlError(); - Gl.glUniformMatrix4fv(param, 1, Gl.GL_FALSE, mtx); + GL.UniformMatrix4(param, 1, false, mtx); ErrorHandler.CheckGlError(); } } diff --git a/OpenRA.Renderer.Sdl2/Texture.cs b/OpenRA.Renderer.Sdl2/Texture.cs index efd977d3d8..f000235aba 100644 --- a/OpenRA.Renderer.Sdl2/Texture.cs +++ b/OpenRA.Renderer.Sdl2/Texture.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -13,7 +13,7 @@ using System.Drawing; using System.Drawing.Imaging; using System.IO; using OpenRA.Graphics; -using Tao.OpenGl; +using OpenTK.Graphics.OpenGL; namespace OpenRA.Renderer.Sdl2 { @@ -27,38 +27,38 @@ namespace OpenRA.Renderer.Sdl2 public Texture() { - Gl.glGenTextures(1, out texture); + GL.GenTextures(1, out texture); ErrorHandler.CheckGlError(); } public Texture(Bitmap bitmap) { - Gl.glGenTextures(1, out texture); + GL.GenTextures(1, out texture); ErrorHandler.CheckGlError(); SetData(bitmap); } - void FinalizeInner() { Gl.glDeleteTextures(1, ref texture); } + void FinalizeInner() { GL.DeleteTextures(1, ref texture); } ~Texture() { Game.RunAfterTick(FinalizeInner); } void PrepareTexture() { ErrorHandler.CheckGlError(); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture); + GL.BindTexture(TextureTarget.Texture2D, texture); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAG_FILTER, Gl.GL_NEAREST); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)TextureMinFilter.Nearest); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MIN_FILTER, Gl.GL_NEAREST); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)TextureMinFilter.Nearest); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_S, Gl.GL_CLAMP_TO_EDGE); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapS, (float)TextureWrapMode.ClampToEdge); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_WRAP_T, Gl.GL_CLAMP_TO_EDGE); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureWrapT, (float)TextureWrapMode.ClampToEdge); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_BASE_LEVEL, 0); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureBaseLevel, 0); ErrorHandler.CheckGlError(); - Gl.glTexParameteri(Gl.GL_TEXTURE_2D, Gl.GL_TEXTURE_MAX_LEVEL, 0); + GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMaxLevel, 0); ErrorHandler.CheckGlError(); } @@ -74,8 +74,8 @@ namespace OpenRA.Renderer.Sdl2 { IntPtr intPtr = new IntPtr((void*)ptr); PrepareTexture(); - Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height, - 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, width, height, + 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, intPtr); ErrorHandler.CheckGlError(); } } @@ -97,8 +97,8 @@ namespace OpenRA.Renderer.Sdl2 { IntPtr intPtr = new IntPtr((void*)ptr); PrepareTexture(); - Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height, - 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, width, height, + 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, intPtr); ErrorHandler.CheckGlError(); } } @@ -111,11 +111,11 @@ namespace OpenRA.Renderer.Sdl2 size = new Size(bitmap.Width, bitmap.Height); var bits = bitmap.LockBits(bitmap.Bounds(), - ImageLockMode.ReadOnly, PixelFormat.Format32bppArgb); + ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppArgb); PrepareTexture(); - Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, bits.Width, bits.Height, - 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, bits.Scan0); // todo: weird strides + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, bits.Width, bits.Height, + 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, bits.Scan0); // TODO: weird strides ErrorHandler.CheckGlError(); bitmap.UnlockBits(bits); } @@ -125,13 +125,13 @@ namespace OpenRA.Renderer.Sdl2 var data = new byte[4 * size.Width * size.Height]; ErrorHandler.CheckGlError(); - Gl.glBindTexture(Gl.GL_TEXTURE_2D, texture); + GL.BindTexture(TextureTarget.Texture2D, texture); unsafe { fixed (byte* ptr = &data[0]) { IntPtr intPtr = new IntPtr((void*)ptr); - Gl.glGetTexImage(Gl.GL_TEXTURE_2D, 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, intPtr); + GL.GetTexImage(TextureTarget.Texture2D, 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, intPtr); } } @@ -146,8 +146,8 @@ namespace OpenRA.Renderer.Sdl2 size = new Size(width, height); PrepareTexture(); - Gl.glTexImage2D(Gl.GL_TEXTURE_2D, 0, Gl.GL_RGBA8, width, height, - 0, Gl.GL_BGRA, Gl.GL_UNSIGNED_BYTE, null); + GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba8, width, height, + 0, OpenTK.Graphics.OpenGL.PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); ErrorHandler.CheckGlError(); } } diff --git a/OpenRA.Renderer.Sdl2/VertexBuffer.cs b/OpenRA.Renderer.Sdl2/VertexBuffer.cs index af6d4fcbe6..841666b8b8 100644 --- a/OpenRA.Renderer.Sdl2/VertexBuffer.cs +++ b/OpenRA.Renderer.Sdl2/VertexBuffer.cs @@ -1,6 +1,6 @@ #region Copyright & License Information /* - * Copyright 2007-2011 The OpenRA Developers (see AUTHORS) + * Copyright 2007-2014 The OpenRA Developers (see AUTHORS) * This file is part of OpenRA, which is free software. It is made * available to you under the terms of the GNU General Public License * as published by the Free Software Foundation. For more information, @@ -11,7 +11,7 @@ using System; using System.Runtime.InteropServices; using OpenRA.Graphics; -using Tao.OpenGl; +using OpenTK.Graphics.OpenGL; namespace OpenRA.Renderer.Sdl2 { @@ -23,20 +23,21 @@ namespace OpenRA.Renderer.Sdl2 public VertexBuffer(int size) { - Gl.glGenBuffersARB(1, out buffer); + GL.GenBuffers(1, out buffer); ErrorHandler.CheckGlError(); Bind(); - Gl.glBufferDataARB(Gl.GL_ARRAY_BUFFER_ARB, + GL.BufferData(BufferTarget.ArrayBuffer, new IntPtr(VertexSize * size), new T[size], - Gl.GL_DYNAMIC_DRAW_ARB); + BufferUsageHint.DynamicDraw + ); ErrorHandler.CheckGlError(); } public void SetData(T[] data, int length) { Bind(); - Gl.glBufferSubDataARB(Gl.GL_ARRAY_BUFFER_ARB, + GL.BufferSubData(BufferTarget.ArrayBuffer, IntPtr.Zero, new IntPtr(VertexSize * length), data); @@ -45,15 +46,15 @@ namespace OpenRA.Renderer.Sdl2 public void Bind() { - Gl.glBindBufferARB(Gl.GL_ARRAY_BUFFER_ARB, buffer); + GL.BindBuffer(BufferTarget.ArrayBuffer, buffer); ErrorHandler.CheckGlError(); - Gl.glVertexPointer(3, Gl.GL_FLOAT, VertexSize, IntPtr.Zero); + GL.VertexPointer(3, VertexPointerType.Float, VertexSize, IntPtr.Zero); ErrorHandler.CheckGlError(); - Gl.glTexCoordPointer(4, Gl.GL_FLOAT, VertexSize, new IntPtr(12)); + GL.TexCoordPointer(4, TexCoordPointerType.Float, VertexSize, new IntPtr(12)); ErrorHandler.CheckGlError(); } - void FinalizeInner() { Gl.glDeleteBuffersARB(1, ref buffer); } + void FinalizeInner() { GL.DeleteBuffers(1, ref buffer); } ~VertexBuffer() { Game.RunAfterTick(FinalizeInner); } } } diff --git a/make.ps1 b/make.ps1 index d70e8ee964..a4bedda148 100644 --- a/make.ps1 +++ b/make.ps1 @@ -76,7 +76,6 @@ elseif ($command -eq "version") elseif ($command -eq "dependencies") { cp thirdparty/*.dll . - cp thirdparty/Tao/*.dll . cp thirdparty/windows/*.dll . echo "Dependencies copied." } diff --git a/packaging/package-all.sh b/packaging/package-all.sh index 27493d24f6..d151e95847 100755 --- a/packaging/package-all.sh +++ b/packaging/package-all.sh @@ -41,9 +41,6 @@ for i in "${FILES[@]}"; do cp -R "${i}" "packaging/built/${i}" || exit 3 done -# Copy Tao -cp thirdparty/Tao/* packaging/built - # SharpZipLib for zip file support cp thirdparty/ICSharpCode.SharpZipLib.dll packaging/built diff --git a/packaging/windows/OpenRA.nsi b/packaging/windows/OpenRA.nsi index 7377fa7975..3db2306843 100644 --- a/packaging/windows/OpenRA.nsi +++ b/packaging/windows/OpenRA.nsi @@ -81,7 +81,6 @@ Section "Game" GAME File "${SRCDIR}\DOCUMENTATION.html" File "${SRCDIR}\*.ttf" File "${SRCDIR}\OpenRA.ico" - File "${SRCDIR}\Tao.*.dll" File "${SRCDIR}\SharpFont.dll" File "${SRCDIR}\SDL2-CS.dll" File "${SRCDIR}\global mix database.dat" @@ -195,7 +194,6 @@ Function ${UN}Clean Delete $INSTDIR\ICSharpCode.SharpZipLib.dll Delete $INSTDIR\FuzzyLogicLibrary.dll Delete $INSTDIR\Mono.Nat.dll - Delete $INSTDIR\Tao.*.dll Delete $INSTDIR\SharpFont.dll Delete $INSTDIR\AUTHORS Delete $INSTDIR\COPYING diff --git a/thirdparty/SDL2-CS.dll.config b/thirdparty/SDL2-CS.dll.config index e7ebbb513f..85592006e0 100644 --- a/thirdparty/SDL2-CS.dll.config +++ b/thirdparty/SDL2-CS.dll.config @@ -6,4 +6,16 @@ + + + + + + + + + + + + diff --git a/thirdparty/Tao/Tao.OpenGl.dll b/thirdparty/Tao/Tao.OpenGl.dll deleted file mode 100644 index 8eb040e654..0000000000 Binary files a/thirdparty/Tao/Tao.OpenGl.dll and /dev/null differ diff --git a/thirdparty/Tao/Tao.OpenGl.dll.config b/thirdparty/Tao/Tao.OpenGl.dll.config deleted file mode 100644 index 846d1e6e7c..0000000000 --- a/thirdparty/Tao/Tao.OpenGl.dll.config +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - -