2013-11-04 129 views
0

我一直有glTexImage2D的問題,它阻止我從渲染到屏幕。glTexImage2D()函數訪問衝突錯誤

這裏是我的代碼:

#include <glew.h> 
#include <wglew.h> 
#include <stdio.h> 
#include <iostream> 
#include <gl\GL.h> 
#include <SDL.h> 
#include "SDL_image.h" 

GLuint _texturebufferID; 
GLuint _vertexBufferID; 
GLuint texturebufferID; 

int SCREEN_WIDTH = 740; 
int SCREEN_HEIGHT = 520; 
int mode; 

bool processing = true; 

SDL_Surface* image; 
SDL_Window* window; 
SDL_Renderer* renderer; 
SDL_GLContext context; 
SDL_Surface* surface; 
SDL_Event window_key; 

typedef struct { 

GLfloat positionCoordinates[3]; 
GLfloat textureCoordinates[2]; 

} Texture; 

Texture vertices[] = 
{ 
// |  Pixels  |--|coords| 
{{1.0f,  0.0f, 0.0f}, {0.0f, 0.0f}}, 
{{0.0f, 43.0f, 0.0f}, {0.0f, 1.0f}}, 
{{168.0f, 43.0f, 0.0f}, {1.0f, 1.0f}}, 
{{168.0f, 0.0f, 0.0f}, {1.0f, 0.0f}} 

}; 

GLuint loadandbuffersprite(const char *filename) 
{ 

image = IMG_Load(filename); 

glGenTextures(1, &texturebufferID); 
glBindTexture(GL_TEXTURE_2D, texturebufferID); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, image->w, image->h, 0, GL_RGBA, GL_UNSIGNED_BYTE, image->pixels); //Access Violation 

SDL_FreeSurface(image); 

return texturebufferID; 

} 

void render() 
{ 



glEnable(GL_TEXTURE_2D); 
    glEnable(GL_BLEND); 
    glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); 

    glMatrixMode(GL_PROJECTION); 
    glMatrixMode(GL_MODELVIEW); 

    glGenBuffers(1, &_vertexBufferID); 
    glBindBuffer(GL_ARRAY_BUFFER, _vertexBufferID); 
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, 
     GL_STATIC_DRAW); 

    glEnableClientState(GL_VERTEX_ARRAY); 
    glVertexPointer(3, GL_FLOAT, sizeof(Texture), (GLvoid *) 
     offsetof(Texture, positionCoordinates)); 

    glEnableClientState(GL_TEXTURE_COORD_ARRAY); 
    glTexCoordPointer(2, GL_FLOAT, sizeof(Texture), (GLvoid *) 
     offsetof(Texture, textureCoordinates)); 

    glLoadIdentity(); 

    loadandbuffersprite("hane_stand.png"); 

} 

我剛剛得到了錯誤,但最近我不明白的問題可能是什麼。有沒有人指出我的方向是正確的?

回答

0

唯一真正的問題是,您從未爲2D渲染啓用GL_TEXTURE_2D。