2016-11-02 2 views
0

Ich versuche, ein einfaches Rechteck in meinem Spiel zu ziehen, aber ich halten in der folgenden Pause ausgeführt wird: enter image description hereFehler 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

Antwort

3

: glBufferData(vbo, sizeof(vertex), vertex, GL_DYNAMIC_DRAW);

sollte sein: glBufferData(GL_ARRAY_BUFFER, sizeof(vertex), vertex, GL_STATIC_DRAW);

, weil das erste Argument gibt sollte die, wie Ihr Array verwendet werden.

+0

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

+1

Lol ikr, wir alle haben und tun immer noch den gleichen Fehler! Prost. –