• 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 Crash in glGenFramebuffersEXT for some users

This topic is 2076 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

Our game Awesomenauts released last week for Windows and for a small number of users the game turns out to crash when post-effects are enabled. It works fine without. All of these users have Nvidia videocards, but from various generations: from 8800 to 560. Most users with the exact same videocards don't get these crashes. I asked those with crashes to update their drivers, and that does not help.

Now the interesting thing is that creating the first rendertexture does not crash, and the second rendertexture the game creates, crashes. It crashes in glGenFramebuffersEXT (or maybe glGenTextures, not entirely sure, but I think it is glGenFramebuffersEXT). These rendertextures are created directly after each other, with no relevant code in-between. So it basically looks like this (removed some irrelevant code in-between):


{
unsigned int frameBufferID;
unsigned int textureID;
glGenFramebuffersEXT(1, &frameBufferID);
glGenTextures(1, &textureID);
glBindTexture(GL_TEXTURE_2D, textureID);
GLint filterMode = GL_LINEAR;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterMode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterMode);
GLint frameBufferFormat = GL_RGBA;
glTexImage2D(GL_TEXTURE_2D, 0, frameBufferFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, textureID, 0);
}
{
unsigned int frameBufferID;
unsigned int textureID;
glGenFramebuffersEXT(1, &frameBufferID); // << CRASH!
glGenTextures(1, &textureID); // << OR MAYBE THE CRASH IS HERE
glBindTexture(GL_TEXTURE_2D, textureID);
GLint filterMode = GL_LINEAR;
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filterMode);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filterMode);
GLint frameBufferFormat = GL_RGBA;
glTexImage2D(GL_TEXTURE_2D, 0, frameBufferFormat, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glBindFramebufferEXT(GL_FRAMEBUFFER_EXT, frameBufferID);
glFramebufferTexture2DEXT(GL_FRAMEBUFFER_EXT, GL_COLOR_ATTACHMENT0_EXT, GL_TEXTURE_2D, textureID, 0);
}


Some random pieces of information:
-Crashes are on Windows
-Crashes only happen on Nvidia videocards
-Happens for less than 1% of our users (which is quite a few computers for a game that is selling well on Steam)
-We use SDL 1.2.13
-Our engine is multi-threaded, and all OpenGL code happens in one thread

What could cause this to crash on only some rare computers, and what can I do to fix this?

Share this post


Link to post
Share on other sites
Advertisement

I asked those with crashes to update their drivers, and that does not help.

Try to get a dxdiag report and take a look at the driver version yourself.

Else your code looks ok to me. Maybe it is just a result of an previous error. I would add a lot of error checking code at the suspecious location and send the pimped exe to one of the players with this problem to track it down.

Share this post


Link to post
Share on other sites

Try to get a dxdiag report and take a look at the driver version yourself.

I already have this:
GL_VENDOR: NVIDIA Corporation
GL_RENDERER GeForce 9800 GT/PCIe/SSE2
GL_VERSION 3.3.0
What other information would be interesting to check in the dxdiag report?

Else your code looks ok to me. Maybe it is just a result of an previous error. I would add a lot of error checking code at the suspecious location and send the pimped exe to one of the players with this problem to track it down.[/quote]
I call glGetError() and cgGetError() regularly already, and they don't print anything at all. I added logging to find the exact line where the crash happens. What other things could I log that are interesting?

Share this post


Link to post
Share on other sites

GL_VERSION 3.3.0

This is the supported gl version, but not the driver version. Current driver version for nvidia should be above 300. Early driver version, which supported ogl 3.3.0, might be buggier than later one which still support the same ogl version.


I call glGetError() and cgGetError() regularly already,

Btw. this kills performance (at least decrease it due to flushing the command queue). Nevertheless, there are special error checking functions avaible for the framebuffer (glCheckFramebufferStatusEXT), try to check these one after creating the first framebuffer.

Share this post


Link to post
Share on other sites
I'd suggest using the core (i.e non-EXT) version of the FBO API where it's available, which it should be on all 3.3 hardware. A best guess here is that you're using some other functionality which doesn't interact well with the -EXT version on these cards.

Share this post


Link to post
Share on other sites
I tried using the non-EXT versions, but it still crashes. sad.png

Strangely, I still had to call them EXT, is that correct? For some reason I can request glGenFramebuffers and it works fine, but I can only put it in a PFNGLGENFRAMEBUFFERSEXTPROC pointer. It seems like PFNGLGENFRAMEBUFFERSPROC does not exist?! Here's how I get the functions related to the framebuffer:

PFNGLGENFRAMEBUFFERSEXTPROC glGenFramebuffers = PFNGLGENFRAMEBUFFERSEXTPROC(wglGetProcAddress("glGenFramebuffers"));
if (glGenFramebuffers == NULL)
{
glGenFramebuffers = PFNGLGENFRAMEBUFFERSEXTPROC(wglGetProcAddress("glGenFramebuffersEXT"));
}


I also had to still use GL_FRAMEBUFFER_EXT instead of GL_FRAMEBUFFER. Is that okay, or am I doing something wrong?

So using glGenFramebuffers instead of glGenFramebuffersEXT does work on my own computer and behaves the exact same as just using the EXT versions, but on the computers where it used to crash, it still crashes. Edited by Oogst

Share this post


Link to post
Share on other sites
Have you considered using an extension wrangler (like GLEW) instead of doing that yourself? Right now it is not clear if the problem happens because you are setting up the extensions wrong or because something with OpenGL does not work as intended.

Share this post


Link to post
Share on other sites
I second the notion of using GLEW, instead of retrieving the function addresses yourself.
Also note that the name of your function variable is just that, a variable name. Changing it will not change the behaviour of your program. The call to wglGetProcAddress("glGenFramebuffersEXT") determines whether you retrieving the EXT version of the function or not. I am not sure whether there is actually any difference between the two since glGenFramebuffers moved to the Core profile though.

Share this post


Link to post
Share on other sites
I didn't know about GLEW before it was brought up in this topic, and I really don't want to switch these kinds of libraries on an already released game with tens of thousands of users: the risk is just too big...

What could I be doing wrong in retrieving these functions that GLEW would fix? I think my own code is exactly as the standard advocates, or am I overlooking something here?

Anyway, since it works for 99% of users, I don't think the way the extensions are retrieved would be the problem, right? Is it not more probably something with the use of rendertextures itself?

Share this post


Link to post
Share on other sites
Well, for a start you are missing several constants, starting with GL_FRAMEBUFFER. I'm not sure if GL_FRAMEBUFFER_EXT works instead. Then you have to query all the required functions yourself and make extremely sure that their signature matches exactly. Do glGenFramebuffersEXT and glGenFramebuffers have the exact same signature and calling convention? Probably, but I'd hate to make sure of that myself for every function I need to use.

Even if you do not want to use GLEW in general (though I would strongly advocate using GLEW or an equivalent well-tested extension wrangler), you could still build a test version which uses GLEW instead of your own code and send it to the people who currently have the crashing problem.

Share this post


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

  • Advertisement