kandi background
Explore Kits

opentk | Open Toolkit library is a fast, lowlevel C | Game Engine library

 by   opentk C# Version: 5.0-pre.7 License: Non-SPDX

 by   opentk C# Version: 5.0-pre.7 License: Non-SPDX

Download this library from

kandi X-RAY | opentk Summary

opentk is a C# library typically used in Institutions, Learning, Education, Gaming, Game Engine, WebGL applications. opentk has no bugs, it has no vulnerabilities and it has medium support. However opentk has a Non-SPDX License. You can download it from GitHub.
OpenTK is a large project. There are many components to work on, and we’d welcome almost any contribution. The community is friendly, welcoming and always ready to help you get your PRs merged!.
Support
Support
Quality
Quality
Security
Security
License
License
Reuse
Reuse

kandi-support Support

  • opentk has a medium active ecosystem.
  • It has 2428 star(s) with 599 fork(s). There are 159 watchers for this library.
  • There were 3 major release(s) in the last 6 months.
  • There are 36 open issues and 631 have been closed. On average issues are closed in 85 days. There are 17 open pull requests and 0 closed requests.
  • It has a neutral sentiment in the developer community.
  • The latest version of opentk is 5.0-pre.7
opentk Support
Best in #Game Engine
Average in #Game Engine
opentk Support
Best in #Game Engine
Average in #Game Engine

quality kandi Quality

  • opentk has 0 bugs and 0 code smells.
opentk Quality
Best in #Game Engine
Average in #Game Engine
opentk Quality
Best in #Game Engine
Average in #Game Engine

securitySecurity

  • opentk has no vulnerabilities reported, and its dependent libraries have no vulnerabilities reported.
  • opentk code analysis shows 0 unresolved vulnerabilities.
  • There are 0 security hotspots that need review.
opentk Security
Best in #Game Engine
Average in #Game Engine
opentk Security
Best in #Game Engine
Average in #Game Engine

license License

  • opentk has a Non-SPDX License.
  • Non-SPDX licenses can be open source with a non SPDX compliant license, or non open source licenses, and you need to review them closely before use.
opentk License
Best in #Game Engine
Average in #Game Engine
opentk License
Best in #Game Engine
Average in #Game Engine

buildReuse

  • opentk releases are available to install and integrate.
  • Installation instructions are not available. Examples and code snippets are available.
  • It has 256866 lines of code, 0 functions and 1399 files.
  • It has low code complexity. Code complexity directly impacts maintainability of the code.
opentk Reuse
Best in #Game Engine
Average in #Game Engine
opentk Reuse
Best in #Game Engine
Average in #Game Engine
Top functions reviewed by kandi - BETA

Coming Soon for all Libraries!

Currently covering the most popular Java, JavaScript and Python libraries. See a SAMPLE HERE.
kandi's functional review helps you automatically verify the functionalities of the libraries and avoid rework.

opentk Key Features

Create cutting-edge graphics with OpenGL 4.6 and OpenGL ES 3.0

Spice up your GUI with 3d acceleration

Improve your code flow with strong types and inline documentation

Windowing systems to help get you started

Input, and other game essentials.

Performant, highly optimized and reliable linear algebra library

Write once run everywhere

2018-01-05

copy iconCopydownload iconDownload
git clone https://github.com/opentk/opentk   # Download source code from git
cd opentk                                    # Enter the source directory
./build.cmd / ./build.sh                     # Run the bootstrap/build script for your platform

OpenTK doesn't render the color of my triangle

copy iconCopydownload iconDownload
ShaderProgram shaderProgram = new ShaderProgram() { id = 0 };
window.Load += () =>
{
    Console.WriteLine("Hello");
                
    // ShaderProgram shaderProgram = LoadShaderProgram("../../../../vertex_shader.glsl", "../../../../fragment_shader.glsl");
    shaderProgram = LoadShaderProgram("../../../../vertex_shader.glsl", "../../../../fragment_shader.glsl");
};

OpenTK triangle not drawing

copy iconCopydownload iconDownload
GL.DrawArrays(PrimitiveType.Triangles, 0, 3);

How to color the face of a cube object drawn with Opentk

copy iconCopydownload iconDownload
float[,] colors = new float[,]{
    {1.0f, 0.0f, 0.0f},
    {0.0f, 1.0f, 0.0f},
    {0.0f, 0.0f, 1.0f},
    {1.0f, 1.0f, 0.0f},
    {0.0f, 1.0f, 1.0f},
    {1.0f, 0.0f, 1.0f}
};
GL.Begin(BeginMode.Quads);
for (i = 5; i >= 0; i--)
{
    GL.Color3(ref colors[i, 0]);
    GL.Vertex3(ref v[faces[i, 0], 0]);
    GL.Vertex3(ref v[faces[i, 1], 0]);
    GL.Vertex3(ref v[faces[i, 2], 0]);
    GL.Vertex3(ref v[faces[i, 3], 0]);
}
GL.End();
-----------------------
float[,] colors = new float[,]{
    {1.0f, 0.0f, 0.0f},
    {0.0f, 1.0f, 0.0f},
    {0.0f, 0.0f, 1.0f},
    {1.0f, 1.0f, 0.0f},
    {0.0f, 1.0f, 1.0f},
    {1.0f, 0.0f, 1.0f}
};
GL.Begin(BeginMode.Quads);
for (i = 5; i >= 0; i--)
{
    GL.Color3(ref colors[i, 0]);
    GL.Vertex3(ref v[faces[i, 0], 0]);
    GL.Vertex3(ref v[faces[i, 1], 0]);
    GL.Vertex3(ref v[faces[i, 2], 0]);
    GL.Vertex3(ref v[faces[i, 3], 0]);
}
GL.End();

Which method inside GameWindow do we override to draw an object with OpenTk?

copy iconCopydownload iconDownload
class MyWindow : GameWindow
{
    // [...]

    protected override void OnUpdateFrame(FrameEventArgs e)
    {
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

        this.DrawBox(0.5f);

        Context.SwapBuffers();
        base.OnUpdateFrame(e);
    }
}
nativeWindowSettings.API = ContextAPI.OpenGL;
nativeWindowSettings.Profile = ContextProfile.Compatability;
-----------------------
class MyWindow : GameWindow
{
    // [...]

    protected override void OnUpdateFrame(FrameEventArgs e)
    {
        GL.Clear(ClearBufferMask.ColorBufferBit | ClearBufferMask.DepthBufferBit);

        this.DrawBox(0.5f);

        Context.SwapBuffers();
        base.OnUpdateFrame(e);
    }
}
nativeWindowSettings.API = ContextAPI.OpenGL;
nativeWindowSettings.Profile = ContextProfile.Compatability;

OpenTK read depth buffer to array

copy iconCopydownload iconDownload
//Get depth buffer
int[] depthBufferID = new int[1];
GL.GenBuffers(1, depthBufferID);
GL.BindBuffer(BufferTarget.PixelPackBuffer, depthBufferID[0]);
GL.BufferData(BufferTarget.PixelPackBuffer, glControlGLRender.Width * glControlGLRender.Height * sizeof(float), IntPtr.Zero, BufferUsageHint.StreamRead);
GL.ReadPixels(0, 0, glControlGLRender.Width, glControlGLRender.Height, PixelFormat.DepthComponent, PixelType.Float, IntPtr.Zero);
IntPtr depthBufferPTR = GL.MapBuffer(BufferTarget.PixelPackBuffer, BufferAccess.ReadOnly);

float[] myPixels = new float[glControlGLRender.Width * glControlGLRender.Height];
Marshal.Copy(depthBufferPTR, myPixels, 0, glControlGLRender.Width * glControlGLRender.Height); 

How to get the correct name stack in OpenTK for a 3D cube?

copy iconCopydownload iconDownload
# [...]

GL.MatrixMode(MatrixMode.Projection);
GL.PushMatrix();
GL.LoadIdentity();

GluPickMatrix(e.Mouse.X, viewPort[3] - e.Mouse.Y, 5.0, 5.0, viewPort);

var matrix = Matrix4.CreatePerspectiveFieldOfView(45.0f * (MathHelper.Pi) / 180, window.Width / window.Height, 1.0f, 100.0f);
GL.MultMatrix(ref matrix); # <-- GL.MultMatrix insterad of GL.LoadMatrix

GL.MatrixMode(MatrixMode.Modelview);
# GL.LoadIdentity();         <-- delete this

# [...]

Cannot get the correct name stack in OpenTK

copy iconCopydownload iconDownload
public void select(object o, MouseEventArgs e)
{
    // [...]

    GL.MatrixMode(MatrixMode.Projection);
    GL.PushMatrix();
    GL.LoadIdentity();

    GluPickMatrix(e.Mouse.X, viewPort[3] - e.Mouse.Y, 5.0, 5.0, viewPort);
    GL.Ortho(-50.0, 50.0, -50.0, 50.0, -100.0, 100.0);

    GL.MatrixMode(MatrixMode.Modelview);
    GL.LoadIdentity();

    GL.LoadName(1);
    GL.Begin(BeginMode.Quads);
    GL.Color3(1.0, 1.0, 0.0);
    GL.Vertex3(-5.0, -5.0, -80.0);
    GL.Vertex3(5.0, -5.0, -80.0);
    GL.Vertex3(5.0, 5.0, -80.0);
    GL.Vertex3(-5.0, 5.0, -80.0);
    GL.End();

    GL.LoadName(2);
    GL.Begin(BeginMode.Quads);
    GL.Color3(1.0, 0.0, 0.0);
    GL.Vertex3(-10.0, -10.0, -80.0);
    GL.Vertex3(0.0, -10.0, -80.0);
    GL.Vertex3(0.0, 0.0, -80.0);
    GL.Vertex3(-10.0, 0.0, -80.0);
    GL.End();
  
    GL.MatrixMode(MatrixMode.Projection);
    GL.PopMatrix();
    GL.MatrixMode(MatrixMode.Modelview);

    // [...]
}
Matrix4 perspective = Matrix4.CreatePerspectiveFieldOfView(
    40f * (float)Math.PI / 180f, 500f / 500f, 0.001f, 400f);
GL.MultMatrix(ref perspective);
-----------------------
public void select(object o, MouseEventArgs e)
{
    // [...]

    GL.MatrixMode(MatrixMode.Projection);
    GL.PushMatrix();
    GL.LoadIdentity();

    GluPickMatrix(e.Mouse.X, viewPort[3] - e.Mouse.Y, 5.0, 5.0, viewPort);
    GL.Ortho(-50.0, 50.0, -50.0, 50.0, -100.0, 100.0);

    GL.MatrixMode(MatrixMode.Modelview);
    GL.LoadIdentity();

    GL.LoadName(1);
    GL.Begin(BeginMode.Quads);
    GL.Color3(1.0, 1.0, 0.0);
    GL.Vertex3(-5.0, -5.0, -80.0);
    GL.Vertex3(5.0, -5.0, -80.0);
    GL.Vertex3(5.0, 5.0, -80.0);
    GL.Vertex3(-5.0, 5.0, -80.0);
    GL.End();

    GL.LoadName(2);
    GL.Begin(BeginMode.Quads);
    GL.Color3(1.0, 0.0, 0.0);
    GL.Vertex3(-10.0, -10.0, -80.0);
    GL.Vertex3(0.0, -10.0, -80.0);
    GL.Vertex3(0.0, 0.0, -80.0);
    GL.Vertex3(-10.0, 0.0, -80.0);
    GL.End();
  
    GL.MatrixMode(MatrixMode.Projection);
    GL.PopMatrix();
    GL.MatrixMode(MatrixMode.Modelview);

    // [...]
}
Matrix4 perspective = Matrix4.CreatePerspectiveFieldOfView(
    40f * (float)Math.PI / 180f, 500f / 500f, 0.001f, 400f);
GL.MultMatrix(ref perspective);

How to set OpenGL API version in OpenTK .NET Core?

copy iconCopydownload iconDownload
var nativeWindowSettings = new NativeWindowSettings()
{
    // [...]

    APIVersion = new System.Version(4, 6)
};

How to fit an image (texture) inside a quad in OpenTK?

copy iconCopydownload iconDownload
List<float> vertex_data = { 

//   x      y     u     v 
    -.25f, -.25f, 0.0f, 0.0f,
    -.25f,  .25f, 0.0f, 1.0f,
     .25f,  .25f, 1.0f, 1.0f,
     .25f, -.25f, 1.0f, 0.0f,
};

// Load the 2D object
GL.UseProgram(program);

GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
GL.BufferData(BufferTarget.ArrayBuffer, vertex_data.Count * sizeof(float),
    vertex_data.ToArray(), BufferUsageHint.DynamicDraw);

GL.EnableVertexAttribArray(attr_pos);
GL.VertexAttribPointer(attr_pos, 2, VertexAttribPointerType.Float, false,
    4 * sizeof(float), 0);
GL.EnableVertexAttribArray(attr_uv);
GL.VertexAttribPointer(attr_uv, 2, VertexAttribPointerType.Float, false,
    4 * sizeof(float), 2 * sizeof(float));
List<float> vertex_data = { 
    
//   x      y  
    -.25f, -.25f, 
    -.25f,  .25f,
     .25f,  .25f,
     .25f, -.25f,
}

List<float> texture_data = { 
//   u      v  
     0.0f, 0.0f,
     0.0f, 1.0f,
     1.0f, 1.0f,
     1.0f, 0.0f,
};

// Load the 2D object
GL.UseProgram(program);

GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
GL.BufferData(BufferTarget.ArrayBuffer, 
    vertex_data.Count * sizeof(float) + texture_data.Count * sizeof(float), 
    IntPtr.Zero, BufferUsageHint.DynamicDraw);
GL.BufferSubData(BufferTarget.ArrayBuffer, 0, 
    vertex_data.Count * sizeof(float), vertex_data.ToArray())
GL.BufferSubData(BufferTarget.ArrayBuffer, vertex_data.Count * sizeof(float), 
    texture_data.Count * sizeof(float), texture_data.ToArray())

GL.EnableVertexAttribArray(attr_pos);
GL.VertexAttribPointer(attr_pos, 2, VertexAttribPointerType.Float, false, 
    2 * sizeof(float), 0);
GL.EnableVertexAttribArray(attr_uv);
GL.VertexAttribPointer(attr_uv, 2, VertexAttribPointerType.Float, false, 
    2 * sizeof(float), vertex_data.Count * sizeof(float));
-----------------------
List<float> vertex_data = { 

//   x      y     u     v 
    -.25f, -.25f, 0.0f, 0.0f,
    -.25f,  .25f, 0.0f, 1.0f,
     .25f,  .25f, 1.0f, 1.0f,
     .25f, -.25f, 1.0f, 0.0f,
};

// Load the 2D object
GL.UseProgram(program);

GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
GL.BufferData(BufferTarget.ArrayBuffer, vertex_data.Count * sizeof(float),
    vertex_data.ToArray(), BufferUsageHint.DynamicDraw);

GL.EnableVertexAttribArray(attr_pos);
GL.VertexAttribPointer(attr_pos, 2, VertexAttribPointerType.Float, false,
    4 * sizeof(float), 0);
GL.EnableVertexAttribArray(attr_uv);
GL.VertexAttribPointer(attr_uv, 2, VertexAttribPointerType.Float, false,
    4 * sizeof(float), 2 * sizeof(float));
List<float> vertex_data = { 
    
//   x      y  
    -.25f, -.25f, 
    -.25f,  .25f,
     .25f,  .25f,
     .25f, -.25f,
}

List<float> texture_data = { 
//   u      v  
     0.0f, 0.0f,
     0.0f, 1.0f,
     1.0f, 1.0f,
     1.0f, 0.0f,
};

// Load the 2D object
GL.UseProgram(program);

GL.BindBuffer(BufferTarget.ArrayBuffer, vbo);
GL.BufferData(BufferTarget.ArrayBuffer, 
    vertex_data.Count * sizeof(float) + texture_data.Count * sizeof(float), 
    IntPtr.Zero, BufferUsageHint.DynamicDraw);
GL.BufferSubData(BufferTarget.ArrayBuffer, 0, 
    vertex_data.Count * sizeof(float), vertex_data.ToArray())
GL.BufferSubData(BufferTarget.ArrayBuffer, vertex_data.Count * sizeof(float), 
    texture_data.Count * sizeof(float), texture_data.ToArray())

GL.EnableVertexAttribArray(attr_pos);
GL.VertexAttribPointer(attr_pos, 2, VertexAttribPointerType.Float, false, 
    2 * sizeof(float), 0);
GL.EnableVertexAttribArray(attr_uv);
GL.VertexAttribPointer(attr_uv, 2, VertexAttribPointerType.Float, false, 
    2 * sizeof(float), vertex_data.Count * sizeof(float));

Projecting and offseting vertices in shaders in OpenTK 3.3

copy iconCopydownload iconDownload
offset = new Vector3(10, 10, -10);
Matrix4.CreateOrthographicOffCenter(0.0f, width, 0.0f, height, -100.0f, 100.0f);
gl_Position = projection * vec4(position + offset, 1.0);
GL.UniformMatrix4(_uniformLocations[name], false, ref data);
-----------------------
offset = new Vector3(10, 10, -10);
Matrix4.CreateOrthographicOffCenter(0.0f, width, 0.0f, height, -100.0f, 100.0f);
gl_Position = projection * vec4(position + offset, 1.0);
GL.UniformMatrix4(_uniformLocations[name], false, ref data);
-----------------------
offset = new Vector3(10, 10, -10);
Matrix4.CreateOrthographicOffCenter(0.0f, width, 0.0f, height, -100.0f, 100.0f);
gl_Position = projection * vec4(position + offset, 1.0);
GL.UniformMatrix4(_uniformLocations[name], false, ref data);
-----------------------
offset = new Vector3(10, 10, -10);
Matrix4.CreateOrthographicOffCenter(0.0f, width, 0.0f, height, -100.0f, 100.0f);
gl_Position = projection * vec4(position + offset, 1.0);
GL.UniformMatrix4(_uniformLocations[name], false, ref data);
-----------------------
gl_Position = projection * vec4(position + offset, 1.0);
gl_Position = vec4(position + offset, 1.0) * projection;
-----------------------
gl_Position = projection * vec4(position + offset, 1.0);
gl_Position = vec4(position + offset, 1.0) * projection;

Community Discussions

Trending Discussions on opentk
  • OpenTK doesn't render the color of my triangle
  • OpenTK triangle not drawing
  • How to color the face of a cube object drawn with Opentk
  • Which method inside GameWindow do we override to draw an object with OpenTk?
  • OpenTK read depth buffer to array
  • OpenTK black triangle?
  • C# Gstreamer-d3d11-overlay Sink.Emit pointer error on render
  • OpenTK UV issue
  • How to get the correct name stack in OpenTK for a 3D cube?
  • Cannot get the correct name stack in OpenTK
Trending Discussions on opentk

QUESTION

OpenTK doesn't render the color of my triangle

Asked 2022-Apr-03 at 07:08

I am learning to program a game engine which is why I followed a tutorial, with that tutorial I have gotten this far and even though my code is identical to theirs (theirs did work in the videos) its not working the way it is meant to. The triangle stays black no matter what. There is not any errors.

Main Program Script:

      using System;
using OpenTK.Mathematics;
using OpenTK.Windowing.Desktop;
using OpenTK.Windowing.Common;
using System.Drawing;
using OpenTK.Graphics.OpenGL4;
using System.IO;

namespace Game_Engine
{
    public static class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");

            GameWindowSettings gws = GameWindowSettings.Default;
            NativeWindowSettings nws = NativeWindowSettings.Default;
            gws.IsMultiThreaded = false;
            gws.RenderFrequency = 60;
            gws.UpdateFrequency = 60;

            nws.APIVersion = Version.Parse("4.1.0");
            nws.AutoLoadBindings = true;
            nws.Size = new Vector2i(1280, 720);
            nws.Title = "Horizon";
            


            GameWindow window = new GameWindow(gws, nws);

            window.UpdateFrame += (FrameEventArgs args) => {

                
            };

            ShaderProgram shaderProgram = new ShaderProgram(){id = 0};
            window.Load += () =>
            {
                Console.WriteLine("Hello");
                ShaderProgram shaderProgram = LoadShaderProgram("../../../../vertex_shader.glsl", "../../../../fragment_shader.glsl");
            };

            window.RenderFrame += (FrameEventArgs args) =>
            {
                GL.UseProgram( shaderProgram.id );

                GL.ClearColor(1.0f, 0.0f, 0.0f, 0.0f);
                GL.Clear(ClearBufferMask.ColorBufferBit);

                float[] verts = { -0.5f, -0.5f, 0.0f, 0.5f, -0.5f, 0.0f, 0.0f, 0.5f, 0.0f };
                float[] color = { 1f, 0, 0, 0, 1f ,0 ,0, 0, 1f };

                int vao = GL.GenVertexArray();
                int vertices = GL.GenBuffer();
                int colors = GL.GenBuffer();
                GL.BindVertexArray(vao);
                GL.BindBuffer(BufferTarget.ArrayBuffer, vertices);
                GL.BufferData( BufferTarget.ArrayBuffer, verts.Length * sizeof(float), verts, BufferUsageHint.StaticCopy);
                GL.EnableVertexAttribArray( 0 );
                GL.VertexAttribPointer( 0, 3, VertexAttribPointerType.Float, false, 0, 0 );

                GL.BindBuffer(BufferTarget.ArrayBuffer, colors);
                GL.BufferData(BufferTarget.ArrayBuffer, color.Length * sizeof(float), color, BufferUsageHint.StaticCopy);
                GL.EnableVertexAttribArray(1);
                GL.VertexAttribPointer(1, 3, VertexAttribPointerType.Float, false, 0, 0);



                GL.DrawArrays(PrimitiveType.Triangles, 0, 3);

                GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
                GL.BindVertexArray(0);
                GL.DeleteBuffer(vertices);
                GL.DeleteBuffer(colors);
                GL.DeleteVertexArray( vao );



                window.SwapBuffers();
            };

            window.Run();
            
        }



        private static Shader LoadShader(string shaderLocation, ShaderType type)
        {
            int shaderId = GL.CreateShader( type );
            GL.ShaderSource( shaderId, File.ReadAllText( shaderLocation ) );
            GL.CompileShader( shaderId );
            string infoLog = GL.GetShaderInfoLog( shaderId );
            if (!string.IsNullOrEmpty(infoLog))
            {
                throw new Exception(infoLog);
            }

            return new Shader() { id = shaderId };
        }

        private static ShaderProgram LoadShaderProgram( string vertextShaderLocation, string fragmentShaderLocation)
        {
            int shaderProgramId = GL.CreateProgram();

            Shader vertextShader = LoadShader(vertextShaderLocation, ShaderType.VertexShader);
            Shader fragmentShader = LoadShader(fragmentShaderLocation, ShaderType.FragmentShader);

            GL.AttachShader(shaderProgramId, vertextShader.id);
            GL.AttachShader(shaderProgramId, fragmentShader.id);
            GL.LinkProgram(shaderProgramId);
            GL.DetachShader(shaderProgramId, vertextShader.id);
            GL.DetachShader(shaderProgramId, fragmentShader.id);
            GL.DeleteShader(vertextShader.id);
            GL.DeleteShader(fragmentShader.id);

            string infoLog = GL.GetProgramInfoLog(shaderProgramId);
            if (!string.IsNullOrEmpty(infoLog))
            {
                throw new Exception(infoLog);
            }

            return new ShaderProgram() { id = shaderProgramId };
        }


        public struct Shader
        {
            public int id;
        }

        public struct ShaderProgram
        {
            public int id;
        }
    }
}

Fragment Shader (in glsl):

#version 400

in vec3 color_in;

out vec4 color_out;

void main(){
  color_out = vec4(color_in.r, color_in.g, color_in.b, 1);

}

VertexShader (in glsl):

#version 330


layout(location = 0) in vec3 vPosition;
layout(location = 1) in vec3 vColors;

out vec3 color_in;

void main() {
  color_in = vColors;
  gl_Position = vec4( vPosition, 1.0 );

}

I have tried everything I could with my very limited knowledge of OpenTK and nothing has changed. I have searched on the web and for answer they still have not helped

ANSWER

Answered 2022-Apr-03 at 07:08

You actually assign the shader program to a local variable in the event callback function's scope. You need to assign it to the variable in scope of Main:

ShaderProgram shaderProgram = new ShaderProgram() { id = 0 };
window.Load += () =>
{
    Console.WriteLine("Hello");
                
    // ShaderProgram shaderProgram = LoadShaderProgram("../../../../vertex_shader.glsl", "../../../../fragment_shader.glsl");
    shaderProgram = LoadShaderProgram("../../../../vertex_shader.glsl", "../../../../fragment_shader.glsl");
};

Source https://stackoverflow.com/questions/71723584

Community Discussions, Code Snippets contain sources that include Stack Exchange Network

Vulnerabilities

No vulnerabilities reported

Install opentk

You can download it from GitHub.

Support

API Documentation is available on the [official website](https://opentk.net) or inline from favourite IDE. You can also browse the full API on the official website. Additional information can be found in the [OpenTK Manual](http://web.archive.org/web/20150325224427/http://www.opentk.com/doc). Technical documentation about the implementation of OpenTK can be found in the [Technical Wiki](https://github.com/opentk/opentk/wiki).

DOWNLOAD this Library from

Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

Share this Page

share link
Reuse Pre-built Kits with opentk
Compare Game Engine Libraries with Highest Support
Find, review, and download reusable Libraries, Code Snippets, Cloud APIs from
over 430 million Knowledge Items
Find more libraries
Reuse Solution Kits and Libraries Curated by Popular Use Cases

Save this library and start creating your kit

  • © 2022 Open Weaver Inc.