• Advertisement
  • Popular Tags

  • Popular Now

  • Advertisement
  • Similar Content

    • By Fadey Duh
      Good evening everyone!

      I was wondering if there is something equivalent of  GL_NV_blend_equation_advanced for AMD?
      Basically I'm trying to find more compatible version of it.

      Thank you!
    • By Jens Eckervogt
      Hello guys, 
       
      Please tell me! 
      How do I know? Why does wavefront not show for me?
      I already checked I have non errors yet.
      using OpenTK; using System.Collections.Generic; using System.IO; using System.Text; namespace Tutorial_08.net.sourceskyboxer { public class WaveFrontLoader { private static List<Vector3> inPositions; private static List<Vector2> inTexcoords; private static List<Vector3> inNormals; private static List<float> positions; private static List<float> texcoords; private static List<int> indices; public static RawModel LoadObjModel(string filename, Loader loader) { inPositions = new List<Vector3>(); inTexcoords = new List<Vector2>(); inNormals = new List<Vector3>(); positions = new List<float>(); texcoords = new List<float>(); indices = new List<int>(); int nextIdx = 0; using (var reader = new StreamReader(File.Open("Contents/" + filename + ".obj", FileMode.Open), Encoding.UTF8)) { string line = reader.ReadLine(); int i = reader.Read(); while (true) { string[] currentLine = line.Split(); if (currentLine[0] == "v") { Vector3 pos = new Vector3(float.Parse(currentLine[1]), float.Parse(currentLine[2]), float.Parse(currentLine[3])); inPositions.Add(pos); if (currentLine[1] == "t") { Vector2 tex = new Vector2(float.Parse(currentLine[1]), float.Parse(currentLine[2])); inTexcoords.Add(tex); } if (currentLine[1] == "n") { Vector3 nom = new Vector3(float.Parse(currentLine[1]), float.Parse(currentLine[2]), float.Parse(currentLine[3])); inNormals.Add(nom); } } if (currentLine[0] == "f") { Vector3 pos = inPositions[0]; positions.Add(pos.X); positions.Add(pos.Y); positions.Add(pos.Z); Vector2 tc = inTexcoords[0]; texcoords.Add(tc.X); texcoords.Add(tc.Y); indices.Add(nextIdx); ++nextIdx; } reader.Close(); return loader.loadToVAO(positions.ToArray(), texcoords.ToArray(), indices.ToArray()); } } } } } And It have tried other method but it can't show for me.  I am mad now. Because any OpenTK developers won't help me.
      Please help me how do I fix.

      And my download (mega.nz) should it is original but I tried no success...
      - Add blend source and png file here I have tried tried,.....  
       
      PS: Why is our community not active? I wait very longer. Stop to lie me!
      Thanks !
    • By codelyoko373
      I wasn't sure if this would be the right place for a topic like this so sorry if it isn't.
      I'm currently working on a project for Uni using FreeGLUT to make a simple solar system simulation. I've got to the point where I've implemented all the planets and have used a Scene Graph to link them all together. The issue I'm having with now though is basically the planets and moons orbit correctly at their own orbit speeds.
      I'm not really experienced with using matrices for stuff like this so It's likely why I can't figure out how exactly to get it working. This is where I'm applying the transformation matrices, as well as pushing and popping them. This is within the Render function that every planet including the sun and moons will have and run.
      if (tag != "Sun") { glRotatef(orbitAngle, orbitRotation.X, orbitRotation.Y, orbitRotation.Z); } glPushMatrix(); glTranslatef(position.X, position.Y, position.Z); glRotatef(rotationAngle, rotation.X, rotation.Y, rotation.Z); glScalef(scale.X, scale.Y, scale.Z); glDrawElements(GL_TRIANGLES, mesh->indiceCount, GL_UNSIGNED_SHORT, mesh->indices); if (tag != "Sun") { glPopMatrix(); } The "If(tag != "Sun")" parts are my attempts are getting the planets to orbit correctly though it likely isn't the way I'm meant to be doing it. So I was wondering if someone would be able to help me? As I really don't have an idea on what I would do to get it working. Using the if statement is truthfully the closest I've got to it working but there are still weird effects like the planets orbiting faster then they should depending on the number of planets actually be updated/rendered.
    • By Jens Eckervogt
      Hello everyone, 
      I have problem with texture
      using System; using OpenTK; using OpenTK.Input; using OpenTK.Graphics; using OpenTK.Graphics.OpenGL4; using System.Drawing; using System.Reflection; namespace Tutorial_05 { class Game : GameWindow { private static int WIDTH = 1200; private static int HEIGHT = 720; private static KeyboardState keyState; private int vaoID; private int vboID; private int iboID; private Vector3[] vertices = { new Vector3(-0.5f, 0.5f, 0.0f), // V0 new Vector3(-0.5f, -0.5f, 0.0f), // V1 new Vector3(0.5f, -0.5f, 0.0f), // V2 new Vector3(0.5f, 0.5f, 0.0f) // V3 }; private Vector2[] texcoords = { new Vector2(0, 0), new Vector2(0, 1), new Vector2(1, 1), new Vector2(1, 0) }; private int[] indices = { 0, 1, 3, 3, 1, 2 }; private string vertsrc = @"#version 450 core in vec3 position; in vec2 textureCoords; out vec2 pass_textureCoords; void main(void) { gl_Position = vec4(position, 1.0); pass_textureCoords = textureCoords; }"; private string fragsrc = @"#version 450 core in vec2 pass_textureCoords; out vec4 out_color; uniform sampler2D textureSampler; void main(void) { out_color = texture(textureSampler, pass_textureCoords); }"; private int programID; private int vertexShaderID; private int fragmentShaderID; private int textureID; private Bitmap texsrc; public Game() : base(WIDTH, HEIGHT, GraphicsMode.Default, "Tutorial 05 - Texturing", GameWindowFlags.Default, DisplayDevice.Default, 4, 5, GraphicsContextFlags.Default) { } protected override void OnLoad(EventArgs e) { base.OnLoad(e); CursorVisible = true; GL.GenVertexArrays(1, out vaoID); GL.BindVertexArray(vaoID); GL.GenBuffers(1, out vboID); GL.BindBuffer(BufferTarget.ArrayBuffer, vboID); GL.BufferData(BufferTarget.ArrayBuffer, (IntPtr)(vertices.Length * Vector3.SizeInBytes), vertices, BufferUsageHint.StaticDraw); GL.GenBuffers(1, out iboID); GL.BindBuffer(BufferTarget.ElementArrayBuffer, iboID); GL.BufferData(BufferTarget.ElementArrayBuffer, (IntPtr)(indices.Length * sizeof(int)), indices, BufferUsageHint.StaticDraw); vertexShaderID = GL.CreateShader(ShaderType.VertexShader); GL.ShaderSource(vertexShaderID, vertsrc); GL.CompileShader(vertexShaderID); fragmentShaderID = GL.CreateShader(ShaderType.FragmentShader); GL.ShaderSource(fragmentShaderID, fragsrc); GL.CompileShader(fragmentShaderID); programID = GL.CreateProgram(); GL.AttachShader(programID, vertexShaderID); GL.AttachShader(programID, fragmentShaderID); GL.LinkProgram(programID); // Loading texture from embedded resource texsrc = new Bitmap(Assembly.GetEntryAssembly().GetManifestResourceStream("Tutorial_05.example.png")); textureID = GL.GenTexture(); GL.BindTexture(TextureTarget.Texture2D, textureID); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMagFilter, (int)All.Linear); GL.TexParameter(TextureTarget.Texture2D, TextureParameterName.TextureMinFilter, (int)All.Linear); GL.TexImage2D(TextureTarget.Texture2D, 0, PixelInternalFormat.Rgba, texsrc.Width, texsrc.Height, 0, PixelFormat.Bgra, PixelType.UnsignedByte, IntPtr.Zero); System.Drawing.Imaging.BitmapData bitmap_data = texsrc.LockBits(new Rectangle(0, 0, texsrc.Width, texsrc.Height), System.Drawing.Imaging.ImageLockMode.ReadOnly, System.Drawing.Imaging.PixelFormat.Format32bppRgb); GL.TexSubImage2D(TextureTarget.Texture2D, 0, 0, 0, texsrc.Width, texsrc.Height, PixelFormat.Bgra, PixelType.UnsignedByte, bitmap_data.Scan0); texsrc.UnlockBits(bitmap_data); GL.Enable(EnableCap.Texture2D); GL.BufferData(BufferTarget.TextureBuffer, (IntPtr)(texcoords.Length * Vector2.SizeInBytes), texcoords, BufferUsageHint.StaticDraw); GL.BindAttribLocation(programID, 0, "position"); GL.BindAttribLocation(programID, 1, "textureCoords"); } protected override void OnResize(EventArgs e) { base.OnResize(e); GL.Viewport(0, 0, ClientRectangle.Width, ClientRectangle.Height); } protected override void OnUpdateFrame(FrameEventArgs e) { base.OnUpdateFrame(e); keyState = Keyboard.GetState(); if (keyState.IsKeyDown(Key.Escape)) { Exit(); } } protected override void OnRenderFrame(FrameEventArgs e) { base.OnRenderFrame(e); // Prepare for background GL.Clear(ClearBufferMask.ColorBufferBit); GL.ClearColor(Color4.Red); // Draw traingles GL.EnableVertexAttribArray(0); GL.EnableVertexAttribArray(1); GL.BindVertexArray(vaoID); GL.UseProgram(programID); GL.BindBuffer(BufferTarget.ArrayBuffer, vboID); GL.VertexAttribPointer(0, 3, VertexAttribPointerType.Float, false, 0, IntPtr.Zero); GL.ActiveTexture(TextureUnit.Texture0); GL.BindTexture(TextureTarget.Texture3D, textureID); GL.BindBuffer(BufferTarget.ElementArrayBuffer, iboID); GL.DrawElements(BeginMode.Triangles, indices.Length, DrawElementsType.UnsignedInt, 0); GL.DisableVertexAttribArray(0); GL.DisableVertexAttribArray(1); SwapBuffers(); } protected override void OnClosed(EventArgs e) { base.OnClosed(e); GL.DeleteVertexArray(vaoID); GL.DeleteBuffer(vboID); } } } I can not remember where do I add GL.Uniform2();
    • By Jens Eckervogt
      Hello everyone
      For @80bserver8 nice job - I have found Google search. How did you port from Javascript WebGL to C# OpenTK.?
      I have been searched Google but it shows f***ing Unity 3D. I really want know how do I understand I want start with OpenTK But I want know where is porting of Javascript and C#?
       
      Thanks!
  • Advertisement
  • Advertisement
Sign in to follow this  

OpenGL Question about deprecated OpenGL functionality

This topic is 965 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

I am working on a game that I initially just used immediate rendering for, knowing that I'd revisit it and implement vertex/texture coord/color/etc buffers when the time came. So then I was reading in this thread that a lot of OpenGL stuff that I learned way back when (in the 2000's) is deprecated now.

 

My questions are:

 

  1. How much harm will I suffer if I use this deprecated stuff? It seems like it still works well enough. Is there any performance hit associated with using it?
  2. I saw this basic tutorial on shaders, and in fact have a attenuated point light shader sitting in a git branch, but it just shows how to color a fragment a solid color. Is there any easy, drop-in shader that I can use to handle the basics that I listed above, until I'm ready to dig deeper into writing my own shaders? (UV mapping, colored vertices, etc).

If there are any other resources I should be looking at, please let me know. It's hard to know how old the tutorials you're looking at are sometimes. There's still stuff out there with ARB functions in it that looks current at first glance...

Share this post


Link to post
Share on other sites
Advertisement

I am working on a game that I initially just used immediate rendering for, knowing that I'd revisit it and implement vertex/texture coord/color/etc buffers when the time came. So then I was reading in this thread that a lot of OpenGL stuff that I learned way back when (in the 2000's) is deprecated now.

 

My questions are:

 

  1. How much harm will I suffer if I use this deprecated stuff? It seems like it still works well enough. Is there any performance hit associated with using it?
  2. I saw this basic tutorial on shaders, and in fact have a attenuated point light shader sitting in a git branch, but it just shows how to color a fragment a solid color. Is there any easy, drop-in shader that I can use to handle the basics that I listed above, until I'm ready to dig deeper into writing my own shaders? (UV mapping, colored vertices, etc).

If there are any other resources I should be looking at, please let me know. It's hard to know how old the tutorials you're looking at are sometimes. There's still stuff out there with ARB functions in it that looks current at first glance...

 

1. If you are using immediate mode you will get significantly worse performance (especially if you are pushing tons of vertices to the GPU) and a lack of shaders does greatly restrict the flexibility of your renderer.

 

2. There are tons of pre-written shaders you can download and pretty much just drop-in but if they are basic(the GPU driver should replace fixed function UV mapping and colored vertices with shader equivalents for you anyway) you won't gain much by doing so, for a basic renderer the main performance advantage comes from using VBOs rather than pushing vertex arrays to the GPU once per frame, or worse, pushing a metric crapton of individual vertices to the GPU each frame with glVertex calls.

 

once you are using VBOs however you will have to use vertex shaders to do more fancy transformation of the vertices (i.e, skeletal animation) as doing that on the CPU will require you to re-upload the mesh each frame (which is fine if your scenes consist of 10-20k vertices but not quite as fine if your scenes contain 30m vertices), if you are modifying your vertex arrays right now (rather than just rotating, translating and scaling them) you will have to convert that code to vertex shaders in order to use VBOs effectively.

 

fragment shaders are less useful for basic renderers but becomes almost essential once you try to implement more advanced effects (if you use the fixed function you're pretty much limited to stencil operations and blending the results of multiple render passes together in various ways)

 

 

edit: it is worth keeping in mind that "significantly worse performance" is still insanely fast, the deprecated stuff is not slower today than it was in the late 90s or early 2000s, its just that GPUs have become several hundred or even a few thousand times faster while PCIe x16 is only around 30 times faster than PCI (4GiB/s vs 133MiB/s) and only 2 times as fast as AGP(2GiB/s for AGP8x) so the amount of data you can send to the GPU each second hasn't gone up much at all.

Edited by SimonForsman

Share this post


Link to post
Share on other sites


How much harm will I suffer if I use this deprecated stuff?

It's actually going to be OK for a PC for a long long while.  Biggest problem is you can't port to the more widely-used computers like those running Android or iOS, since they only support GL|ES 2.

Share this post


Link to post
Share on other sites

 


How much harm will I suffer if I use this deprecated stuff?

It's actually going to be OK for a PC for a long long while.  Biggest problem is you can't port to the more widely-used computers like those running Android or iOS, since they only support GL|ES 2.

 

They do also support GLES 1.1.

Share this post


Link to post
Share on other sites

Save yourself the headache and spend a little time getting to learn the newer stuff( and I don't mean the bleeding edge ). It will only help you in the long run, as you will have a new skill set and if done right, a little performance gain also.

Share this post


Link to post
Share on other sites

Thanks for all of the replies guys. The hard part is locating resources that I know are the "latest." I simply don't have the time in my day to sit down and read an OpenGL reference manual cover to cover (and I doubt anyone does this anyway), so I'm really not sure how to know when something is deprecated and when something is current. If anyone has any suggestions, I'd really appreciate it :)

 

Also, a bit of background about my project: it's a 2D game that, for the foreseeable future, uses one fairly small texture. My back-of-the-mental-napkin estimates tell me that there's generally 50k-200k vertices on screen in the heavier scenes, which isn't all that much as far as I can tell. I did finish most of my transition to vertex/UV/color arrays, which has given me a very significant performance boost (as I knew it would -- I had written everything in per-quad immediate mode for the sake of getting something working first). So, I'm guessing the next "correct" step would be to replace these arrays with VBOs? Sorry if that's off-base.

Share this post


Link to post
Share on other sites

A neat source I'm using to look up OpenGL functions is docs.gl. It is a kind of managed collection of manual pages about OpenGL and OpenGLES functions, including filtering by version.

Edited by haegarr

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement