Ich versuche, ein einfaches Rechteck in meinem Spiel zu ziehen, aber ich halten in der folgenden Pause ausgeführt wird: Fehler beim glDrawArrays in C++
Hier ist der Code in meinem Sprite.cpp wo ich binden und Dinge rendern.
void Sprite::init(float x, float y, float width, float height){
this->x = x;
this->y = y;
this->width = width;
this->height = height;
if(vbo == 0)
glGenBuffers(1, &vbo);
Vertex vertex[6];
vertex[0].setPosition(x, y);
vertex[0].setUV(0, 0);
vertex[1].setPosition(x, y + height);
vertex[1].setUV(0, 1);
vertex[2].setPosition(x + width, y + height);
vertex[2].setUV(1, 1);
vertex[3].setPosition(x, y);
vertex[3].setUV(0, 0);
vertex[4].setPosition(x + width, y);
vertex[4].setUV(1, 0);
vertex[5].setPosition(x + width, y + height);
vertex[5].setUV(1, 1);
for (int i = 0; i < 6; i++)
vertex[i].setColor(0.0, 0.0, 1.0, 1.0);
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(vbo, sizeof(vertex), vertex, GL_DYNAMIC_DRAW);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
void Sprite::render(){
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glEnableVertexAttribArray(0);
glEnableVertexAttribArray(1);
glEnableVertexAttribArray(2);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, position));
glVertexAttribPointer(1, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(Vertex), (void*)offsetof(Vertex, color));
glVertexAttribPointer(2, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (void*)offsetof(Vertex, uv));
glDrawArrays(GL_TRIANGLES, 0, 6);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDisableVertexAttribArray(2);
glBindBuffer(GL_ARRAY_BUFFER, 0);
}
Wenn ich die Zeile aus kommentieren "glDrawArrays (GL_TRIANGLES, 0, 6)" Dann wird das Programm läuft völlig in Ordnung. Hier ist meine Vertex-Struktur nur für weitere Informationen:
#pragma once
#include <GL\glew.h>
struct Position {
float x, y;
};
struct UV{
float u, v;
};
struct Color {
GLubyte r, g, b, a;
};
struct Vertex {
Position position;
Color color;
UV uv;
void setUV(float u, float v) {
uv.u = u;
uv.v = v;
}
void setColor(GLubyte r, GLubyte g, GLubyte b, GLubyte a) {
color.r = r;
color.g = g;
color.b = b;
color.a = a;
}
void setPosition(float x, float y) {
position.x = x;
position.y = y;
}
};
Ich habe nur ernsthaft keine Ahnung, warum das passiert. Ich habe gehört, dass dieser Fehler damit zu tun hat, dass ein Null-Zeiger oder etwas de-referenziert wird. Ich weiß einfach nicht, wie ich dieses Problem angehen soll. Jede Hilfe wird sehr geschätzt. diese
Ich hasse mich gerade jetzt ... Vielen Dank so sehr. Ich schätze, seit ich so lange daran gearbeitet habe, brauchte ich nur frische Augen. Vielen Dank! – Luke
Lol ikr, wir alle haben und tun immer noch den gleichen Fehler! Prost. –