在glGenTextures上获取EXC_BAD_ACCESS
Getting a EXC_BAD_ACCESS on glGenTextures
用SDL2&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
glGenTextures()
将一个计数作为第一个参数,该计数表示要创建的纹理名称的数量,并将一个指针作为第二个参数,指向一个足够容纳所有名称的arry。您正在呼叫
GLuint tex;
glGenTextures(GL_TEXTURE_2D, &tex);
因此,您使用GL_TEXTURE_2D
作为计数,这是一个相当大的数字,GL将覆盖堆栈上tex
后面的任何内容,导致崩溃。。。
我使用这个修复程序:glGenTextures(1,&textureId);
相关文章:
- 将数组信息存储到 c++ 向量中有一个"Access violation reading location"
- 为什么调试器引发"read access violation. this was nullptr"异常?
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 使用来自 Excel VBA 的 C++ dll 时"Bad DLL calling convention" - 如何解决?
- Simulink "Access Violation"写入 C++ lambda 函数捕获列表中的 PWork 变量
- Qt QXmlStreamReader Access Violation
- "Access is Denied" U盘上的创建文件()
- 指向 std::unrodered_map 中元素的指针返回'Read access violation'
- C++17 编解码器在将标准::字符串转换为标准::字符串时抛出"bad conversion"
- 例外:'Access violation reading location'
- 向量数组"Cannot access memory at address"
- Windeployqt不会运行,"Access is denied."
- 对于代理容器上的迭代器来说,"least bad implementation"可能是什么?
- 我在发布模式下运行时收到"Access violation reading location"错误 - C++
- Access C++ Enum from Swift
- Java 本机访问代码错误:"Invalid memory access"
- 获取错误:在抛出"std::bad::alloc"的实例后终止调用 what(): std::bad_alloc
- 如何获得私人会员的"read access"?
- 将数据添加到 CArray 会产生错误"cannot access private member declared in class 'CObject'"
- Bad Linux Memory Map File Performance with Random Access C++ & Python