使用SDL2和&amp ;;尝试一些C ++和OpenGL。 SDL2_image,基于http://open.gl
一旦到达glGenTextures调用,我就会收到主题错误。我的大多数搜索都提到没有创建gl上下文。我有,并且在此成功之前使用多个gl调用。这是我的主要内容。所以
int main(int argc, const char * argv[]) {
uniforms = std::vector<GLuint>();
SDL_Init(SDL_INIT_VIDEO);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 2);
SDL_Window* window = SDL_CreateWindow("OpenGL", 100, 100, 800, 600, SDL_WINDOW_OPENGL);
SDL_GLContext context = SDL_GL_CreateContext(window);
glewExperimental = GL_TRUE;
glewInit();
SDL_Event windowEvent;
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
GLuint vao;
glGenVertexArrays(1, &vao);
glBindVertexArray(vao);
GLuint vbo;
glGenBuffers(1, &vbo);
GLuint ebo;
glGenBuffers(1, &ebo);
setupVertices(vbo);
setupElementBuffer(ebo);
GLuint fragmentShader;
GLuint vertexShader;
GLuint shaderProgram = compileShaders(vertexShader, fragmentShader);
bindAttributes(shaderProgram);
GLuint tex;
glGenTextures(GL_TEXTURE_2D, &tex);
SDL_Surface *image = IMG_Load("pic.png");
if (!image) {
assert(false);
}
int mode;
if (image->format->BytesPerPixel == 3) { // RGB 24bit
mode = GL_RGB;
} else if (image->format->BytesPerPixel == 4) { // RGBA 32bit
mode = GL_RGBA;
}
glBindTexture(GL_TEXTURE_2D, tex);
// ... etc
答案 0 :(得分:4)
glGenTextures()
将 count 作为第一个参数,指定要创建的纹理名称的数量,以及第二个指向arry的指针,该指针足以容纳所有名称。你在打电话
GLuint tex;
glGenTextures(GL_TEXTURE_2D, &tex);
所以你使用GL_TEXTURE_2D
作为计数,这是一个相当大的数字,而GL将覆盖你堆栈上tex
之后的任何内容,导致崩溃......
答案 1 :(得分:0)
我使用此修复它: glGenTextures(1,&amp; textureId);