2012-12-19 58 views
5

का उपयोग करते समय मुझे यकीन है कि सब कुछ ठीक से जुड़ा हुआ है। मैं शुरुआत में अनौपचारिक जीएलएसडीके से ग्ललोड और ग्लफू का उपयोग कर रहा था लेकिन फिर मैंने ग्ललोड के साथ काम करने का फैसला किया जिसका मतलब था कि मुझे आधुनिक शीर्षकों पर जाने के लिए ग्लेव का उपयोग करना पड़ा।प्रवेश उल्लंघन। GLEW और GLFW

#include <GL/glew.h> 
#include <GL/glfw.h> 

मैंने निर्देशों के अनुसार glfw से पहले glew शामिल किया है।

रन समय के दौरान ओपन खिड़की

//(relevant code) 
if(!glewInit()) {return -1; } 
if(!glfwInit()) {return -1; } 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
// also tried glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); 

if(!glfwOpenWindow(1024, 768, 8, 8, 8, 8, 24, 8, GLFW_WINDOW)){ 
    glfwTerminate(); 
    return -1; 
} 

glfwSetWindowTitle("OpenGL 3.2"); 

//init method 
glGenVertexArrays(1, &vao); //<< Access violation here. 

कोई भी विचार क्या मेरी समस्या यहाँ है खोलता है?

मैंने देखा है। "ग्लो के साथ वीबीओ का उपयोग करके उल्लंघन का उल्लंघन" लेकिन यह कोई मदद नहीं थी।

उत्तर

6

glewInit के बाद एक ओपन संदर्भ बना दिया गया है और curren धागा करने के लिए बाध्य है, यानी कहा जा करने के लिए अपने मामले में glfwOpenWindow के बाद है।

+0

धन्यवाद, मैंने आपको बताया जैसे मैंने कहा। अगर (! glewInit()) {वापसी -1; } गलत था कि मुझे लौटने वाले मूल्य की जांच करने की आवश्यकता है। क्योंकि यह एक बूल नहीं है – Andrew

3

थोड़ा देर हो चुकी है, लेकिन मुझे लगा कि मैं किसी भी तरह से पाइप करूंगा।

जैसा कि डेटनवॉल्फ द्वारा उल्लिखित है, आपके प्रासंगिक कोड में glewInit() पोस्ट की स्थिति के कारण एक त्रुटि वापस करनी चाहिए।

अन्य संभावित समस्या जो आप सामना कर सकते हैं http://www.opengl.org/wiki/OpenGL_Loading_Library पर GLEW अनुभाग के तहत वर्णित है।

ऊपर से

कॉपी-पेस्ट:

Glew कोर संदर्भों के साथ एक समस्या है। यह glGetString(GL_EXTENSIONS), पर कॉल करता है जो पर जीएल 3.2+ कोर संदर्भ पर glewInit() कहा जाता है।

GLEW (उपर्युक्त लिंक द्वारा प्रदान किया गया) के लिए समाधान 'प्रयोगात्मक' समर्थन को सक्षम करना है। उदाहरण के लिए:

glewExperimental = GL_TRUE; 
GLenum err = glewInit(); 
if(err != GLEW_OK) 
{ 
    printf("GlewInit error"); 
    exit(1); 
} 
2

इसके अलावा देर से, लेकिन अभी भी

glewExperimental = GL_TRUE; 

देख संदर्भ आरंभ करने से पहले किसी के लिए भी पहुँच उल्लंघन त्रुटि से छुटकारा मिल गया था, लेकिन बजाय एक GL_INVALID_ENUM त्रुटि के साथ कार्यक्रम बाहर हो गए। जीएलएफडब्ल्यू के साथ, मुझे विंडो संकेतों को अतिरिक्त रूप से टिप्पणी करना पड़ा:

//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MAJOR, 3); 
//glfwOpenWindowHint(GLFW_OPENGL_VERSION_MINOR, 2); 
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); 
//glfwOpenWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_COMPAT_PROFILE); 

कार्यक्रमों ने संकलन शुरू किया!