glewInit() Failed, OpenGL App
Asked Answered
B

5

11

I'm trying to build an OpenGL App with glew/glfw. I've downloaded the binaries, placed them in the root of my folder, added the paths to the include and lib directories and told my project to require glew32.lib, GLFW.lib and opengl32.lib.

I even copied glew32.lib to the root directory because my project couldn't see it.

I must keep all the dependencies in the project directory since I will be distributing this. I'm at a loss.

Now when I run my program, it fails at glewInit()

This is my implementation so far:

#include "Common.h"

GameEngine::GameEngine()
{
    InitWithSize(1024, 768);
    InitInput();
}

void GameEngine::InitWithSize(int _width, int _height)
{
    try {
        // Initialise GLFW
        if( !glfwInit() )
            throw std::exception("Failed to initialize GLFW\n");

        //glfwOpenWindowHint(GLFW_FSAA_SAMPLES, 4);
        glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
        glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 3);
        glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

        // Open a window and create its OpenGL context
        if( !glfwOpenWindow( _width, _height, 0,0,0,0, 32,0, GLFW_WINDOW ) ) 
            throw std::exception("Failed to initialize GLFW\n");


        glfwSetWindowTitle( "Tutorial 01" );

        // Initialize GLEW
        if (glewInit() != GLEW_OK)
            throw std::exception("Failed to initialize GLEW\n");


    } catch ( std::system_error const& err) {
        fprintf(stdout, "System Error: %s", err.what());
        glfwTerminate(); // Free glfw if it has been allocated
        // Try Again
        this->InitWithSize(_width, _height);
    } catch( std::exception const& err) {
        fprintf(stdout, "Exception Found: %s", err.what());
    } catch ( ... ) {
        fprintf(stdout,"Unknown Exception Occurred\n");
    }
}

void GameEngine::InitInput()
{
        // Ensure we can capture the escape key being pressed below
        glfwEnable( GLFW_STICKY_KEYS );
}

void GameEngine::StartGameLoop()
{
    do{
            // Draw nothing, see you in tutorial 2 !

            // Swap buffers
            glfwSwapBuffers();

        } // Check if the ESC key was pressed or the window was closed
        while( glfwGetKey( GLFW_KEY_ESC ) != GLFW_PRESS &&
            glfwGetWindowParam( GLFW_OPENED ) );
}


void GameEngine::InitTestData()
{
    // An array of 3 vectors which represents 3 vertices
    static const GLfloat g_vertex_buffer_data[] = {
        -1.0f, -1.0f, 0.0f,
        1.0f, -1.0f, 0.0f,
        0.0f,  1.0f, 0.0f,
    };

}

With my Common Header:

#ifndef _COMMON_H
#define _COMMON_H

// OpenGL Libraries
#define GLEW_STATIC
//#pragma comment(lib, "glew32.lib")
#include <GL\glew.h>
#include <GL\glfw.h>

// Core Libraries
#include <Windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <map>
#include <string>
#include <fstream>

// C++ 11 Libraries
#include <memory>
#include <exception>
#include <thread>
#include <chrono>

// Manager Classes
#include "ThreadManager.h"
#include "GameEngine.h"
#include "ShaderManager.h"

// Lesser Classes
#include "Shader.h"

#endif
Bobby answered 9/12, 2012 at 3:1 Comment(2)
Maybe put your code? I don't see any real errors in that log, just a notification that the program finished executing. You can ignore all the PDB symbols lines.Posture
glewInit() actually returns an error code you can use with glewGetErrorString. See glew.sourceforge.net/basic.htmlTranscription
B
7

If no error is returned from glewInit() it returns 0. For some reason the return wasn't comparing well to GLEW_OK but if the value is anything but 0, there's an error.

if(glewInit()) {

  //Handle Error

}
Bobby answered 9/12, 2012 at 23:21 Comment(0)
S
16

I know this answer comes a bit late, but I don't see you making the OpenGL context current by calling glfwMakeContextCurrent(window). You have to do that before calling glewInit()

Shifrah answered 26/12, 2016 at 16:10 Comment(0)
B
7

If no error is returned from glewInit() it returns 0. For some reason the return wasn't comparing well to GLEW_OK but if the value is anything but 0, there's an error.

if(glewInit()) {

  //Handle Error

}
Bobby answered 9/12, 2012 at 23:21 Comment(0)
S
6

You are using Core OpenGL version 3.3 so you must specify you are using "new" and by GLEW terms "experimental" API. Add this line before calling glewInit();

glewExperimental=GL_TRUE;

Here is a complete init code from my engine .It is for 4.2 but should work the same for you:

 void Engine::InitWithGLFW(){
    if(!glfwInit()){
        exit(EXIT_FAILURE);
    }
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 4);
    glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2);
    //glfwOpenWindowHint(GLFW_OPENGL_FORWARD_COMPAT,GL_TRUE);
    glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE);
    glfwOpenWindowHint(GLFW_FSAA_SAMPLES,4);
    glfwDisable(GLFW_AUTO_POLL_EVENTS);

 #ifdef DEBUG
    glfwOpenWindowHint(GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE);
 #endif

    if(!glfwOpenWindow(_width,_height,8, 8, 8, 8, 24, 8,GLFW_WINDOW)){
        glfwTerminate();
        exit(EXIT_FAILURE);
    }

    glfwSetWindowTitle("XDEngine V-1.0");
    InitGlew();
 }

 void Engine::InitGlew(){
    glewExperimental=GL_TRUE;
    GLenum err = glewInit(); 

    if (GLEW_OK != err)
    {
        /* Problem: glewInit failed, something is seriously wrong. */
        fprintf(stderr, "Error: %s\n", glewGetErrorString(err));

    }

    fprintf(stdout, "Status: Using GLEW %s\n", glewGetString(GLEW_VERSION));
    glEnable (GL_BLEND);
    glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

    glEnable(GL_MULTISAMPLE);
    glEnable(GL_DEPTH_CLAMP);
    glEnable(GL_CULL_FACE);
    glCullFace(GL_BACK);

    glfwSetWindowSizeCallback(Reshape);
 }
Scheel answered 9/12, 2012 at 8:25 Comment(0)
H
2

I had a similar problem and finally got the solution on opengl.org. It seems that GLEW developers haven't fixed a core context problem yet. Though there is a quite easy solution:

  glewExperimental=TRUE;
  GLenum err=glewInit();
  if(err!=GLEW_OK)
  {
    //Problem: glewInit failed, something is seriously wrong.
    cout<<"glewInit failed, aborting."<<endl;
  }

HTH

Hildick answered 5/8, 2014 at 9:2 Comment(0)
J
1

Compare the glewInit() return type with GLenum

if (glewInit() != GLEW_OK) {
    printf("glew initialization failed!");
}
Joshua answered 27/12, 2019 at 6:12 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.