2012-12-09 52 views
6

मैं glew/glfw के साथ एक ओपनजीएल ऐप बनाने की कोशिश कर रहा हूं। मैंने बाइनरी डाउनलोड की हैं, उन्हें मेरे फ़ोल्डर की जड़ में रखा है, इसमें शामिल हैं और lib निर्देशिकाओं के पथ जोड़े और glew32.lib, GLFW.lib और opengl32.lib की आवश्यकता के लिए मेरे प्रोजेक्ट को बताया।glewInit() असफल, ओपनजीएल ऐप

मैंने रूट निर्देशिका में glew32.lib की प्रतिलिपि बनाई है क्योंकि मेरी परियोजना इसे नहीं देख सका।

मुझे परियोजना निर्देशिका में सभी निर्भरताओं को रखना होगा क्योंकि मैं इसे वितरित कर दूंगा। मुझे हानि हो रही है।

#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, 
    }; 

} 
मेरी आम हैडर के साथ

:

#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 
+0

पर कॉल करने से पहले आपको ऐसा करना होगा शायद अपना कोड डालें? मुझे उस लॉग में कोई वास्तविक त्रुटियां नहीं दिखाई देती हैं, केवल एक अधिसूचना है कि कार्यक्रम निष्पादित हो गया है। आप सभी पीडीबी प्रतीकों की रेखाओं को अनदेखा कर सकते हैं। – Tim

+3

'glewInit() 'वास्तव में एक त्रुटि कोड देता है जिसका उपयोग आप' glewGetErrorString' के साथ कर सकते हैं। Http://glew.sourceforge.net/basic.html देखें – Grimmy

उत्तर

5

यदि यह 0. रिटर्न के लिए:

glewExperimental=GL_TRUE; 

यहां एक संपूर्ण init कोड मेरी इंजन से यह 4.2 के लिए है, लेकिन आप के लिए एक ही काम करना चाहिए है कुछ कारण है कि वापसी GLEW_OK से अच्छी तरह से तुलना नहीं कर रही थी, लेकिन यदि मान 0 से कुछ भी है, तो एक त्रुटि है।

if(glewInit()) { 

    //Handle Error 

} 
3

आप उपयोग कर रहे हैं

अब जब मैं अपने कार्यक्रम चलाने के लिए, यह glewInit()

यह मेरा कार्यान्वयन अब तक है पर विफल रहता है कोर ओपनजीएल संस्करण 3.3 ताकि आपको यह निर्दिष्ट करना होगा कि आप "नया" और जीएलईडब्ल्यू शब्द "प्रयोगात्मक" एपीआई का उपयोग कर रहे हैं। GlewInit() को कॉल करने से पहले इस लाइन को जोड़ें; कोई त्रुटि glewInit() से वापस आ रहा है

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); 
} 
1

मुझे एक ही समस्या थी और अंत में समाधान opengl.org पर मिला। ऐसा लगता है कि GLEW डेवलपर्स ने अभी तक एक कोर संदर्भ समस्या तय नहीं की है। हालांकि एक काफी आसान उपाय है:

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

HTH

5

मैं जानता हूँ कि क्या यह उत्तर देर से एक सा आता है, लेकिन मैं आपको glfwMakeContextCurrent(window) फोन करके ओपन संदर्भ वर्तमान बनाने नहीं दिख रहा। glewInit()

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^