gpt4 book ai didi

c++ - 在 glGenTextures 上获取 EXC_BAD_ACCESS

转载 作者:行者123 更新时间:2023-11-27 23:00:12 24 4
gpt4 key购买 nike

使用 SDL2 和 SDL2_image 尝试一些 C++ 和 OpenGL,基于 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

最佳答案

glGenTextures() 的第一个参数是计数,表示您要创建的纹理名称数量,第二个参数是指向一个足以容纳所有纹理名称的指针名字。你在打电话

GLuint tex;
glGenTextures(GL_TEXTURE_2D, &tex);

因此您使用 GL_TEXTURE_2D 作为计数,这是一个相当大的数字,GL 将覆盖堆栈中 tex 之后的任何内容,从而导致崩溃。 .

关于c++ - 在 glGenTextures 上获取 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28508555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com