8Observer8

Members
  • Content count

    23
  • Joined

  • Last visited

Community Reputation

160 Neutral

About 8Observer8

  • Rank
    Member

Personal Information

  • Interests
    |programmer|
  1. Maybe my port of program "ClickedPoints" will be useful for someone. These programs are equivalent: ClickedPoints (WebGL) DrawPointsByClick (OpenTK) Screenshot:  
  2. This code draws the point in mouse click position: protected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); if (e.Button == MouseButton.Left) { float x = (e.X - Width / 2f) / (Width / 2f); float y = -(e.Y - Height / 2f) / (Height / 2f); // Pass coordinates of point to a_Position GL.VertexAttrib2(a_Position, x, y); Console.WriteLine(x + " " + y); } }
  3. The solution:   1. Open to: C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 2. Right click on devenv.exe. 3. Hover to the "Run with graphics processor..." 4. Select "High-end NVidia processor".   This solution I found here: https://connect.microsoft.com/VisualStudio/feedback/details/1216990/visual-studio-2013-lacks-nvidia-optimus-profile-but-it-can-run-nvidia-graphics-processor-directly
  4. Hello, I try to port this example from WebGL: ch02/ClickedPoints in OpenTK. This example draws the points in position of mouse click. I draw one point in my example. In beginning the point is drawn in (0, 0.5). Drawing loop is 30 frames per second. When I click on the window area the point must to be redrawn in (0, 0) position. You can run and test my problem in VS2012 - VS2015: DrawPointsByClick_Problem.zip VertexShader.glsl #version 330 in vec4 a_Position; void main() { gl_Position = a_Position; gl_PointSize = 10.0; } FragmentShader.glsl #version 330 out vec4 fragColor; void main() { fragColor = vec4(0.0, 1.0, 1.0, 1.0); } Program.cs namespace DrawPointsByClick { class Program { static void Main(string[] args) { using (var mainWindow = new MainWindow()) { mainWindow.Run(30); } } } } MainWindow.cs using System; using System.Drawing; using OpenTK; using OpenTK.Graphics.OpenGL; using Utils; using OpenTK.Input; namespace DrawPointsByClick { class MainWindow : GameWindow { private int program; private bool canDraw = false; private int a_Position; protected override void OnLoad(EventArgs e) { base.OnLoad(e); // Load shaders from files string vShaderSource = null; string fShaderSource = null; ShaderLoader.LoadShader("./Shaders/VertexShader.glsl", out vShaderSource); ShaderLoader.LoadShader("./Shaders/FragmentShader.glsl", out fShaderSource); if (vShaderSource == null || fShaderSource == null) { Logger.Append("Failed to load shaders from files"); return; } // Initialize the shaders if (!ShaderLoader.InitShaders(vShaderSource, fShaderSource, out program)) { Logger.Append("Failed to initialize the shaders"); return; } // Get the storage location of a_Position a_Position = GL.GetAttribLocation(program, "a_Position"); if (a_Position < 0) { Logger.Append("Failed to get the storage location of a_Position"); return; } // Pass coordinates of point to a_Position GL.VertexAttrib2(a_Position, 0f, 0.5f); // Enable Point Size GL.Enable(EnableCap.ProgramPointSize); // Specify the color for clearing the canvas GL.ClearColor(Color.OliveDrab); canDraw = true; } protected override void OnRenderFrame(FrameEventArgs e) { GL.Viewport(0, 0, Width, Height); base.OnRenderFrame(e); // Clear the canvas with current color GL.Clear(ClearBufferMask.ColorBufferBit); if (canDraw) { // Draw the points GL.DrawArrays(PrimitiveType.Points, 0, 1); } GL.Flush(); SwapBuffers(); } protected override void OnMouseDown(MouseButtonEventArgs e) { base.OnMouseDown(e); Console.WriteLine("OnMouseDown"); // Pass coordinates of point to a_Position GL.VertexAttrib2(a_Position, 0f, 0f); } } } Utils.cs using System; using OpenTK.Graphics.OpenGL; using System.IO; namespace Utils { public class ShaderLoader { ///<summary> ///Create a program object and make current ///</summary> ///<param name="vShader">a vertex shader program</param> ///<param name="fShader">a fragment shader program</param> ///<param name="program">created program</param> ///<returns> ///return true, if the program object was created and successfully made current ///</returns> public static bool InitShaders(string vShaderSource, string fShaderSource, out int program) { program = CreateProgram(vShaderSource, fShaderSource); if (program == 0) { Logger.Append("Failed to create program"); return false; } GL.UseProgram(program); return true; } ///<summary> ///Load a shader from a file ///</summary> ///<param name="errorOutputFileName">a file name for error messages</param> ///<param name="fileName">a file name to a shader</param> ///<param name="shaderSource">a shader source string</param> public static void LoadShader(string shaderFileName, out string shaderSource) { if (File.Exists(Logger.logFileName)) { // Clear File File.WriteAllText(Logger.logFileName, ""); } shaderSource = null; using (StreamReader sr = new StreamReader(shaderFileName)) { shaderSource = sr.ReadToEnd(); } } private static int CreateProgram(string vShader, string fShader) { // Create shader object int vertexShader = LoadShader(ShaderType.VertexShader, vShader); int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader); if (vertexShader == 0 || fragmentShader == 0) { return 0; } // Create a program object int program = GL.CreateProgram(); if (program == 0) { return 0; } // Attach the shader objects GL.AttachShader(program, vertexShader); GL.AttachShader(program, fragmentShader); // Link the program object GL.LinkProgram(program); // Check the result of linking int status; GL.GetProgram(program, GetProgramParameterName.LinkStatus, out status); if (status == 0) { string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program)); Logger.Append(errorString); GL.DeleteProgram(program); GL.DeleteShader(vertexShader); GL.DeleteShader(fragmentShader); return 0; } return program; } private static int LoadShader(ShaderType shaderType, string shaderSource) { // Create shader object int shader = GL.CreateShader(shaderType); if (shader == 0) { Logger.Append("Unable to create shader"); return 0; } // Set the shader program GL.ShaderSource(shader, shaderSource); // Compile the shader GL.CompileShader(shader); // Check the result of compilation int status; GL.GetShader(shader, ShaderParameter.CompileStatus, out status); if (status == 0) { string errorString = string.Format("Failed to compile {0} shader: {1}", shaderType.ToString(), GL.GetShaderInfoLog(shader)); Logger.Append(errorString); GL.DeleteShader(shader); return 0; } return shader; } } public class Logger { public static string logFileName = "info.txt"; /// <summary> /// Write a message to a log file /// </summary> /// <param name="message">a message that will append to a log file</param> public static void Append(string message) { File.AppendAllText(logFileName, message + Environment.NewLine); } } }
  5. OpenGL gl_PointSize doesn't work

    Now it works!     I forgot to initialise the shaders.   The project: PointWithCustomSizeAndColour.zip   vShader.glsl #version 330   void main() {     gl_Position = vec4(0.8, 0.0, 0.0, 1.0);     gl_PointSize = 10.0; }   fShader.glsl #version 330   out vec4 fragColor;   void main() {     fragColor = vec4(1.0, 0.0, 0.0, 1.0); }   Program.cs namespace PointWithCustomSizeAndColour {     class Program     {         static void Main(string[] args)         {             using (MainWindow mainWindow = new MainWindow())             {                 mainWindow.Run(30);             }         }     } }   MainWindow.cs using System; using System.Drawing; using OpenTK; using OpenTK.Graphics.OpenGL; using System.IO; namespace PointWithCustomSizeAndColour { class MainWindow : GameWindow { string vShaderSource = null; string fShaderSource = null; bool canDraw = false; string infoFileName = "info.txt"; int program; protected override void OnLoad(EventArgs e) { base.OnLoad(e); Title = "Point With Custom Size And Colour"; Width = 512; Height = 512; // Load shaders from files ShaderLoader.LoadShader(infoFileName, "./Shaders/vShader.glsl", out vShaderSource); ShaderLoader.LoadShader(infoFileName, "./Shaders/fShader.glsl", out fShaderSource); if (vShaderSource == null || fShaderSource == null) { File.AppendAllText(infoFileName, "Failed to load shaders from files" + Environment.NewLine); return; } // Initialize shaders if (!ShaderLoader.InitShaders(vShaderSource, fShaderSource, out program)) { File.AppendAllText(infoFileName, "Failed to initialize the shaders" + Environment.NewLine); return; } // Specify the color for clearing GL.ClearColor(Color.Black); GL.Enable(EnableCap.ProgramPointSize); canDraw = true; } protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); GL.Viewport(0, 0, Width, Height); if (!canDraw) return; GL.Clear(ClearBufferMask.ColorBufferBit); // Draw a point GL.DrawArrays(PrimitiveType.Points, 0, 1); GL.Flush(); SwapBuffers(); } } }   ShaderLoader.cs using System.IO; using OpenTK.Graphics.OpenGL; using System;   namespace PointWithCustomSizeAndColour {     class ShaderLoader     {         private static string infoFileName = null;           ///<summary>         ///Create a program object and make current         ///</summary>        ///<param name="vShader">a vertex shader program</param>         ///<param name="fShader">a fragment shader program</param>         ///<param name="program">created program</param>         ///<returns>         ///return true, if the program object was created and successfully made current         ///</returns>         public static bool InitShaders(string vShader, string fShader, out int program)         {             program = CreateProgram(vShader, fShader);             if (program == 0)             {                 File.AppendAllText(infoFileName, "Failed to create program" + Environment.NewLine);                 return false;             }               GL.UseProgram(program);               return true;         }           ///<summary>         ///Load a shader from a file         ///</summary>         ///<param name="infoFileName">a file name for errors</param>         ///<param name="fileName">a file name to a shader</param>         ///<param name="shaderSource">a shader source string</param>         public static void LoadShader(string infoFileName, string fileName, out string shaderSource)         {             ShaderLoader.infoFileName = infoFileName;               if (File.Exists(infoFileName))             {                 // Clear File                 File.WriteAllText(infoFileName, "");             }               shaderSource = null;               using (StreamReader sr = new StreamReader(fileName))             {                 shaderSource = sr.ReadToEnd();             }         }           private static int CreateProgram(string vShader, string fShader)         {             // Create shader object             int vertexShader = LoadShader(ShaderType.VertexShader, vShader);             int fragmentShader = LoadShader(ShaderType.FragmentShader, fShader);             if (vertexShader == 0 || fragmentShader == 0)             {                 return 0;             }               // Create a program object             int program = GL.CreateProgram();             if (program == 0)             {                 return 0;             }               // Attach the shader objects             GL.AttachShader(program, vertexShader);             GL.AttachShader(program, fragmentShader);               // Link the program object             GL.LinkProgram(program);               // Check the result of linking             int status;             GL.GetProgram(program, GetProgramParameterName.LinkStatus, out status);             if (status == 0)             {                 string errorString = string.Format("Failed to link program: {0}" + Environment.NewLine, GL.GetProgramInfoLog(program));                 File.AppendAllText(infoFileName, errorString);                 GL.DeleteProgram(program);                 GL.DeleteShader(vertexShader);                 GL.DeleteShader(fragmentShader);                 return 0;             }               return program;         }           private static int LoadShader(ShaderType shaderType, string shaderSource)         {             // Create shader object             int shader = GL.CreateShader(shaderType);             if (shader == 0)             {                 File.AppendAllText(infoFileName, "Unable to create shader" + Environment.NewLine);                 return 0;             }               // Set the shader program             GL.ShaderSource(shader, shaderSource);               // Compile the shader             GL.CompileShader(shader);               // Check the result of compilation             int status;             GL.GetShader(shader, ShaderParameter.CompileStatus, out status);             if (status == 0)             {                 string errorString = string.Format("Failed to compile {0} shader: {1}" + Environment.NewLine, shaderType.ToString(), GL.GetShaderInfoLog(shader));                 File.AppendAllText(infoFileName, errorString);                 GL.DeleteShader(shader);                 return 0;             }               return shader;         }     } }
  6. The solution. You need to set for files "vShader.glsl" and "fShader.glsl" in settings: "Copy to Output Directory" to "Copy always".
  7. Hello, This version of my program works perfect. It gets shaders from strings: string vShaderSource = "#version 330\n" + "in vec4 a_Position;\n" + "void main() {\n" + "gl_Position = a_Position;\n" + "}\n"; string fShaderSource = "#version 330\n" + "out vec4 outColor;\n" + "void main() {\n" + "outColor = vec4(1.0, 0.0, 0.0, 1.0);\n" + "}\n"; Screenshot Download the Project: Triangle_StringShaders.zip But when I want to load shaders from files I receive the error, see shreenshot Download the Project: Triangle_FileShaderError.zip string vShaderSource = null; string fShaderSource = null; // ... private void renderCanvas_Load(object sender, EventArgs e) { // ... // Load shaders from files LoadShader("./Shaders/vShader.glsl", out vShaderSource); LoadShader("./Shaders/fShader.glsl", out fShaderSource); if (vShaderSource == null || fShaderSource == null) { File.AppendAllText(infoFileName, "Failed to load shaders from files"); return; } // ... } private void LoadShader(string fileName, out string shaderSource) { shaderSource = null; using (StreamReader sr = new StreamReader(fileName)) { shaderSource = sr.ReadToEnd(); } }
  8. OpenGL gl_PointSize doesn't work

    I know the solution: https://github.com/opentk/opentk/issues/489#issuecomment-282549309 gl_PointSize doens't work in OpenTK. We need to use GL.PointSize(float) (see glPointSize)
  9. OpenGL gl_PointSize doesn't work

    slicer4ever, can you download and run my project than I attached in first message? Does it run?
  10. OpenGL gl_PointSize doesn't work

    Yes: https://github.com/opentk/opentk
  11. OpenGL gl_PointSize doesn't work

    If the project "HelloPoint1" doesn't run in your VS please say me about it.
  12. Hello I want to draw a point with custom size in C# OpenGL3.3 OpenTK like this: https://jsfiddle.net/8Observer8/cc72u1u5/ But I see the point with size 1 pixel I attached the project. Everyone can run it in VS 2012 - VS 2015 using System; using System.Collections.Generic; using System.Text; using System.Drawing; using OpenTK; using OpenTK.Graphics.OpenGL; using Utils; namespace HelloPoint1 { class MainWindow : GameWindow { string VSHADER_SOURCE = null; string FSHADER_SOURCE = null; bool canDraw = false; protected override void OnLoad(EventArgs e) { base.OnLoad(e); // Load shaders from files ShaderLoader.LoadShader("./Shaders/vShader.glsl", out VSHADER_SOURCE); ShaderLoader.LoadShader("./Shaders/fShader.glsl", out FSHADER_SOURCE); if (VSHADER_SOURCE == null || FSHADER_SOURCE == null) { Console.WriteLine("Failed to load shaders from files"); return; } // Specify the color for clearing GL.ClearColor(Color.Black); GL.Enable(EnableCap.ProgramPointSize); canDraw = true; } protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); if (!canDraw) return; GL.Clear(ClearBufferMask.ColorBufferBit); // Draw a point GL.DrawArrays(PrimitiveType.Points, 0, 1); GL.Flush(); SwapBuffers(); } } }
  13. anyone wanna make a match-3 game?

    Hello. I want to make a match-3 game in this winter. I will use a project from this book. You can click to play   But I don't know what is better: Unity(WebG)+C# or pure WebGL+JavaScript
  14. I think it would be good if you add some game demos in your website.
  15. The Unity Tools Used to Develop Our FPS

    $075 - Behavior Designer $100 - A* Pathfinding Project Pro $030 - Instant Good Day $045 - Colorful FX $000 - Clean Empty Directories $002 - Editor AutoSave $000 - DOTween (HOTween v2) $045 - Master Audio: AAA Sound $025 - Prefab Evolution $045 - Rewired $090 - Shader Forge $020 - StylizedFog $065 - Text Mesh Pro $075 - UFPS : Ultimate FPS   = $617 How much will be cost FPS in Unreal Engine 4 and CryEngine 5?