So habe ich auf ein Spiel durch C gearbeitet ++ mit GLFW und GLEW und alles lief gut, bis ich GLEW implementiert dann bekomme ich einen Fehler, ich habe noch nie zuvor begegnet und ich habe nicht die leiseste auf was zu tun ist, habe ich es gegoogelt und einige Nachforschungen gemacht, aber ohne Erfolg. Ich habe in dem Stack-Frame Abschnitt sagt es etwas zu tun mit dieser Codezeile in meinem main.cppGLEW _First war nullptr
std::cout << glGetString(GL_VERSION) << std::endl;
auch sagt, dass es etwas mit Erinnerung zu tun bemerkt. Ich werde den Rest meines Codes verlassen unten und wenn es eine Info brauchen Sie nur fragen, und ich werde mein Bestes versuchen, es entdeckte ich nur
So zu bieten, wenn i
nehmenstd::cout << glGetString(GL_VERSION) << std::endl;
es dann funktioniert aber das Fenster wird nicht erstellt.
Wohin gehe ich von hier? Irgendeine Idee?
#include "src\graphics\window.h"
int main() {
using namespace benji;
using namespace graphics;
Window window("Benji Engine", 1280, 720);
glClearColor(0.2f, 0.3f, 0.8f, 1.0f);
std::cout << glGetString(GL_VERSION) << std::endl;``
while (!window.closed()) {
std::cout << window.getWidth() << ", " << window.getHeight() << std::endl;
window.clear();
glBegin(GL_TRIANGLES);
glVertex2f(-0.5f, -0.5f);
glVertex2f(0.0f, 0.5f);
glVertex2f(0.5f, -0.5f);
glEnd();
window.update();
}
return 0;
}
main.h
#pragma once
class main
{
public:
main();
~main();
};
window.cpp
#include "window.h"
namespace benji { namespace graphics {
void windowResize(GLFWwindow *window, int width, int height);
Window::Window(const char *title, int width, int height) {
m_Title = title;
m_Width = width;
m_Height = height;
if (!init()) {
glfwTerminate();
}
}
Window::~Window() {
glfwTerminate();
}
bool Window::init() {
if (!glfwInit()) {
std::cout << "Failed to initialize GLFW!" << std::endl;
return false;
}
m_Window = glfwCreateWindow(m_Width, m_Height, m_Title, NULL, NULL);
if (!m_Window) {
std::cout << "Failed to create GLFW window!" << std::endl;
return false;
}
glfwMakeContextCurrent(m_Window);
glfwSetWindowSizeCallback(m_Window, windowResize);
if (glewInit != GLEW_OK) {
std::cout << "GLEW FAILED!" << std::endl;
return false;
}
return true;
}
void Window::clear() const {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
void Window::update(){
glfwPollEvents();
glfwSwapBuffers(m_Window);
}
bool Window::closed() const {
return glfwWindowShouldClose(m_Window) == 1;
}
void windowResize(GLFWwindow *window, int width, int height) {
glViewport(0, 0, width, height);
}
}}
window.h
#pragma once
#include <iostream>
#include <GL\glew.h>
#include <GLFW\glfw3.h>
namespace benji {
namespace graphics {
class Window {
private:
const char *m_Title;
int m_Width, m_Height;
GLFWwindow *m_Window;
bool m_Closed;
public:
Window(const char *title, int width, int height);
~Window();
bool closed() const;
void update();
void clear() const;
int getWidth() const {
return m_Width;
}
int getHeight() const { return m_Height; }
private:
bool init();
};
}
}
Was ist der volle Fehler? Und haben Sie einen Debug-Callstack oder andere Informationen? – ssell
Der einzige andere Fehler, den ich sehen kann, ist Exception geworfen: Lesezugriffsverletzung. _First war nullptr. –
Wenn 'glGetString' tatsächlich abstürzt, liegt das daran, dass Ihr OpenGL nicht richtig initialisiert wurde. Erhalten Sie irgendwelche Fehlermeldungen während Ihrer 'Window :: init'? Dies wird auch durch die Tatsache unterstützt, dass wenn Sie den Aufruf von 'glGetString' entfernen, es nicht abstürzt, aber kein Fenster geöffnet wird. Siehe auch "[Warum konnte glGetString (GL_VERSION) einen Seg Fehler verursachen?] (Http://stackoverflow.com/questions/6288759/why-could-glgetstringgl-version-be-causing-a-seg-fault)" – ssell