0

我一直遇到 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");

}

我最近刚刚收到错误,但我不明白问题可能是什么。有什么可以指出我正确的方向吗?

4

1 回答 1

0

唯一真正的问题是您从未启用 GL_TEXTURE_2D 进行 2D 渲染。

于 2014-01-30T01:28:14.353 回答