2013-11-04 20 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를 사용 설정하지 않았기 때문입니다.