标签: glew

调用 glGenFramebuffers() 时出现段错误?

我想在 3D 之上做一些 2D,这样我就可以做一个像样的 GUI。所以我创建了纹理等等。

我可以编译代码,它不会产生任何错误。但是当我运行程序时一切正常,直到我调用以下命令:

glGenFramebuffers(1, &fb);
Run Code Online (Sandbox Code Playgroud)

然后出现这样的情况:

error 139 segmentation fault (core dumped).
Run Code Online (Sandbox Code Playgroud)

有人知道代码有什么问题吗?

std::cout << "test1" << std::endl;

unsigned int fb;
glGenFramebuffers(1, &fb);
std::cout << "test2" << std::endl;
glBindRenderbuffer(GL_RENDERBUFFER, fb);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, renderTexture.getId(), 0);
Run Code Online (Sandbox Code Playgroud)

显示“test1”文本,但不显示“test2”。

代码:

游戏.cpp

#include "game.h"

game::game(){
    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Surface* screen = SDL_SetVideoMode(1000, 600, 32, SDL_SWSURFACE|SDL_OPENGL);

    glClearColor(0.5, 0.5, 0.5, 1.0);
    glMatrixMode(GL_PROJECTION);

    glLoadIdentity();
    gluPerspective(45, 1000.0/600.0, 1.0, 500.0);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_TEXTURE_2D);
}

game::~game(){
    SDL_Quit();
}

void game::start(){
    Uint32 start;
    SDL_Event event;

    texture renderTexture = texture();
    glTexImage2D(GL_TEXTURE_2D, …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew sdl

1
推荐指数
1
解决办法
1501
查看次数

GLEW 未在 MSYS2 上定位 OpenGL 函数

我正在尝试在我的笔记本电脑上玩几个 OpenGL。作为最快的方法,我安装了 MSYS2。我安装了mingw-w64-x86_64-gccmingw-w64-x86_64-glew等等mingw-w64-x86_64-glfw3。我想我安装了所有必需的软件包。当我调用 OpenGL 例程时,我的程序就会出现分段错误。

为了制作一个最小的工作示例,我Hello, TriangleLearnOpenGL.com复制示例,以便保持较小的规模。我在这个程序中也遇到了同样的问题。

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>

void processInput(GLFWwindow *window);

// settings
const unsigned int SCR_WIDTH = 800;
const unsigned int SCR_HEIGHT = 600;

const char *vertexShaderSource = "#version 330 core\n"
    "layout (location = 0) in vec3 aPos;\n"
    "void main()\n"
    "{\n"
    "   gl_Position = vec4(aPos.x, aPos.y, aPos.z, 1.0);\n"
    "}\0";
const char *fragmentShaderSource = "#version 330 core\n"
    "out vec4 FragColor;\n"
    "void main()\n"
    "{\n"
    "   FragColor …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew glfw msys2

1
推荐指数
1
解决办法
825
查看次数

在Ubuntu终端中编译时OpenGL引用的问题

我正在编译c ++文件和标题的目录.我认为我正确安装了openGL,Glut和Glew,但在运行时我一直在引用错误.

这是我正在做的以及编译器发回给我的错误:

user@Linux-machine:~/Documents/HW$ make
g++ -g framework.o poly_line.o shader_program.o circle.o controller.o main.o scene.o view.o -lGLEW -lglut -lGLU -o HW
framework.cpp:84: error: undefined reference to 'glGetError'
check_gl.h:30: error: undefined reference to 'glGetError'
check_gl.h:43: error: undefined reference to 'glGetError'
poly_line.cpp:23: error: undefined reference to 'glGenBuffers'
poly_line.cpp:28: error: undefined reference to 'glBindBuffer'
poly_line.cpp:29: error: undefined reference to 'glBufferData'
poly_line.cpp:54: error: undefined reference to 'glEnable'
poly_line.cpp:55: error: undefined reference to 'glEnable'
poly_line.cpp:56: error: undefined reference to 'glBlendFunc'
poly_line.cpp:57: error: undefined reference to 'glHint' …
Run Code Online (Sandbox Code Playgroud)

c++ opengl terminal glut glew

0
推荐指数
1
解决办法
6054
查看次数

OpenGL实践 - 运行没有核心版本的OpenGL

我不确定这是一个问题或意见需要由用户塑造,但我们走了.

问题:即使我想支持最新版本和扩展,我是否应该在1.1版兼容性配置文件中运行openGL?更多信息提前.

某些功能要求您提供可能需要支持的openGL版本,如果要支持openGL核心配置文件或3.0及更高版本,则最常用.例子 :

SDL: SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR/MINOR_VERSION, major/minor version);

GLX: glXCreateContextAttribsARB, GLX_CONTEXT_MAJOR_VERSION_ARB, GLX_CONTEXT_MINOR_VERSION_ARB

我有一些问题(实际上有几个)与openGL版本和扩展系列.

问题#1 - 查询OpenGL版本:如果我没记错的话,它从Mesa3D Mesa 7.11开始,尝试从中查询GL_VERSION,我得到:

"Mesa 7.11 OpenGL 2.1配置文件"

知道glew以及其他项目解析器,他们只查找字符串中的第一个点,并返回点所在的数字,作为字符串(您可以选择转换为浮点)

来自Glew 1.9.0:代码片段 上面的例子确实返回了"openGL"版本7.0,它实际上是MESA3D驱动程序版本,这使我认为它不可靠.

问题#2 - 使用与以前相同的MESA3D驱动程序扩展(MISSING,OK?):7.11,运行Glewinfo(glew 1.9.0)给了我以下内容:

GL_ARB_texture_storage:MISSING OK

glTexStorage1D:好的

glTexStorage2D:好的

glTexStorage3D:好的

glTextureStorage1DEXT:好的

glTextureStorage2DEXT:好的

glTextureStorage3DEXT:好的

请注意,尝试从"GL_ARB_texture_storage"API检索(导入)函数地址会导致失败(NULL指针).

我解决上述两个问题的方法是在兼容模式下将openGL初始化为版本1.1,并通过检查我可能需要的每个API系列来强制我的方式,如果openGL作为一组独立的API工作.自己的方式,但一起工作,我们不应该以这样的方式对待它们,代码明智,而不是假设它们在那里,如果你有一个核心版本?再次使用MESA3D 7.11 openGL 2.1,我仍然可以使用openGL 3.0等功能,例如"glGenerateMipmap"

**我试图避免版本和扩展字符串的方式是:**

1.)在兼容模式下初始化openGL 1.1.

2.)通过导入核心功能来扫描您可能需要的API.

3.)如果你无法获得核心功能,请尝试通过扩展来获取功能(如果存在)(不需要与扩展名列表"GL_EXTENSIONS"进行字符串比较)

4.)如果您无法获得这些功能,请尝试通过编写自己的功能来模拟它们.

5.)如果上述方法都不起作用,那就放弃吧.

6.)如果上述方法中的任何内容有效,请运行完整性测试并确保函数正常工作,例如:glGetError和断言应该有效.

你认为它安全/有效吗?我是否通过调用最小版本并试图强行进入我的方式而错过了什么?有没有办法可以改善它?*旁注 - 我知道openGL核心配置文件删除了过时的功能,但您可以自己选择不使用它们,如果您的驱动程序支持最新版本.我也知道openGL可能会尝试模拟当前版本之外的函数,取决于你的驱动程序,你仍然可以使用glGenerateMipmap(openGL 3.0函数)和openGL 2.1

问题#3 - 命名约定,Core,ARB和glew.**我还不确定名称约定是如何工作的,例如:似乎你在GL版本4.3中的"GL_ARB_debug_output"中有函数"glDebugMessageCallbackARB"和glDebugMessageCallback,看起来没问题,但是看看上面第2期的例子,你可能会在"GL_ARB_texture_storage"里面看到函数:glTexStorage1D,没有ARB后缀.

我的问题是,我怎么知道API是否还在等待董事会批准,或者它是否已经是核心的一部分,从标题和函数名称来判断.

对于文本墙感到抱歉,对主题的一些输入将不胜感激.

opengl glew

0
推荐指数
1
解决办法
639
查看次数

在 FrameBuffer 中绘制但只得到黑色

视窗

使用 glew

我正在尝试渲染离屏并将渲染的 img opengl 保存到 png 文件。

我在 stackoverflow 上关注了一个评价很高的答案: How to render offscreen on OpenGL?

但我得到的png文件只是黑屏。

这是我的相关代码:

glutCreateWindow(argv[0]);
if(GLEW_OK!=glewInit())
{
    return -1;
}

initScene();


GLuint fbo, render_buf;
glGenFramebuffers(1,&fbo);
glGenRenderbuffers(1,&render_buf);
glBindRenderbuffer(GL_RENDERBUFFER,render_buf);
glRenderbufferStorage(GL_RENDERBUFFER, GL_RGB8, viewport.w, viewport.h);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo);
glFramebufferRenderbuffer(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_RENDERBUFFER, render_buf);


//Before drawing
glBindFramebuffer(GL_DRAW_FRAMEBUFFER,fbo);


glClear(GL_COLOR_BUFFER_BIT);               // clear the color buffer
glMatrixMode(GL_MODELVIEW);                 // indicate we are specifying camera transformations
glLoadIdentity();                       // make sure transformation is "zero'd"

//draw...
//glBegin(GL_POINTS) glColor3f, glVertex2f

//glFlush();
glFinish();

/*glutDisplayFunc(myDisplay);
glutPostRedisplay();*/

glBindFramebuffer(GL_READ_FRAMEBUFFER, fbo);
savePNG(outputPNGName,0,0,viewport.w,viewport.h);

//At deinit:
glDeleteFramebuffers(1,&fbo); …
Run Code Online (Sandbox Code Playgroud)

opengl glew framebuffer

0
推荐指数
1
解决办法
4196
查看次数

GLEW和我的着色器不同意 - 我是否有延伸?

我正在通过使用发现着色器,并且遇到了一个奇怪的问题.

我需要ARB_robustness片段着色器的扩展才能正常运行.GLEW肯定我有这个扩展:

assert(GLEW_ARB_robustness); // Passes
Run Code Online (Sandbox Code Playgroud)

...但是当我require在我的着色器中...

#extension GL_ARB_robustness : require
Run Code Online (Sandbox Code Playgroud)

...着色器编译器无法识别它.

0(3) : error C0202: extension ARB_robustness not supported
Run Code Online (Sandbox Code Playgroud)

GLEW已正确初始化,只要我不尝试使用该扩展,一切正常.

可能是这个问题的原因,我怎么能解决它?提前致谢.

更新:我在朋友的帮助下嘲笑我,我glxinfo继续他的建议,扩展的名称确实出现在输出中.

opengl glew glsl opengl-extensions

0
推荐指数
1
解决办法
115
查看次数

为什么我没有使用GLFW获得前向兼容的OpenGL上下文?

据我所知,当我在GLFW上设置这些上下文约束时:

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);
Run Code Online (Sandbox Code Playgroud)

我应该在运行的机器上获得最大可用的OpenGL上下文,前提是它高于OpenGL 3.3.但是,通过使用glGetString获取OpenGL上下文版本,我发现情况并非如此.每次我查询glGetString上下文版本时,我只会得到我设置的主要和次要版本glfwWindowHint,上面没有.请记住,我的GPU支持OpenGL 4.5.

另外需要注意的是,当我没有设置任何约束时,我确实得到了一个OpenGL 4.5上下文.

这是完整的源代码,似乎可以复制问题:

#define GLEW_STATIC

#include <iostream>

#include <GL\glew.h>
#include <GLFW\glfw3.h>
#include <glm\glm.hpp>

int main(int argc, char argv[])
{

    if (!glfwInit())
    {
        std::cerr  << "Failed to initialize GLFW 3.0.4" << std::endl;
        getchar();

        glfwTerminate();
        return -1;
    }

    std::cout << "Initialized GLFW 3.0.4" << std::endl;

    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    GLFWwindow* m_window = glfwCreateWindow(640, 480, "Koala", NULL, NULL);

    if (!m_window)
    { …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew glfw

0
推荐指数
1
解决办法
2285
查看次数

GLEW如何运作?

我目前正在Windows上学习OpenGL,有一些我不明白的东西.如果我想调用类似的函数glShaderSource,除非我链接GLEW,否则它是未定义的.但是,一旦我链接GLEW并调用glewInit,glShaderSource就会突然定义并可以使用.使用GLEW显式加载需要哪些函数,以及在初始化GLEW后自动加载哪些函数?

opengl glew

0
推荐指数
1
解决办法
151
查看次数

为什么需要检查 GLAD 或 GLEW 是否正确初始化?

我正在使用 GLFW + GLAD 或 GLEW ( ) 设置 opengl #include glad/glad.h #include <GL/glew.h>。在该函数之后,glfwMakeContextCurrent(window);我需要检查 GLAD 或 GLEW 是否已正确初始化,否则我将在 Visual Studio 2019 中遇到异常错误

#include <glad/glad.h>
#include <GLFW/glfw3.h>

#include <iostream>
using namespace std;

int main(void) {

GLFWwindow* window;

/* Initialize the library */
if (!glfwInit())
    return -1;

/* Create a windowed mode window and its OpenGL context */
window = glfwCreateWindow(640, 480, "Hello World", NULL, NULL);
if (!window)
{
    glfwTerminate();
    return -1;
}

/* Make the window's …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew visual-studio

0
推荐指数
1
解决办法
2956
查看次数

glDraw*返回GL_INVALID_ENUM

我正在尝试在OpenGL中渲染一些对象,但即使我glDrawElements用正确的模式调用它,它仍然给了我一个GL_INVALID_ENUM.这是AMD的CodeXL记录的呼叫记录,从设置到渲染:

glBindVertexArray(1) 

... creating shaders/programs and getting uniform locations ...

# the vertex buffer
glGenBuffers(1, 0x008A945C) 
glBindBuffer(GL_ARRAY_BUFFER, 1) 
glBufferData(GL_ARRAY_BUFFER, 96, 0x008A94A0, GL_STATIC_DRAW) 

# the element index buffer
glGenBuffers(1, 0x008A9460) 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2) 
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 96, 0x008A9508, GL_STATIC_DRAW) 

glClearColor(0.12, 0.63999999, 0.55000001, 1) 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT) 


glEnableVertexAttribArray(0) 
glUseProgram(1)

glUniformMatrix4fv(0, 1, FALSE, ... MVP Matrix ...)
glBindBuffer(GL_ARRAY_BUFFER, 1) 
glVertexAttribPointer(0, 3, GL_FLOAT, FALSE, 0, 0x00000000) 
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 2) 


glDrawElements(GL_QUADS, 24, GL_UNSIGNED_INT, 0x00000000) # GL_INVALID_ENUM here <----


glUseProgram(0)
glDisableVertexAttribArray(0) 
wglSwapBuffers(0x09011214) 
Run Code Online (Sandbox Code Playgroud)

我已经尝试换glDrawElementsglDrawArrays(GL_QUADS, …

c++ opengl glew glfw

-1
推荐指数
1
解决办法
317
查看次数

Linux 上的 OpenGL

我想学习如何在 Linux 上集成 OpenGl 和 C++,但我对网上找到的教程感到非常失望......我想学习整个过程,如何编译,如何设置等等等等......我开始谷歌搜索已经两天了,有很多教程,但没有人做我喜欢的......我只找到了openGL的教程,但我想将它们与c ++一起使用。我找到了关于 c++ 的教程,但是他们开始使用已经配置好的 cmake 来构建所有东西,所以我根本没有第一步......我的意思是,很难找到从头开始指导你的东西,很好地解释了什么各种包含的库做什么等等?如果你知道什么,请告诉我。(不要像open gl的官方网站那样链接我,我'

linux opengl glew opengl-es graphic

-2
推荐指数
1
解决办法
2088
查看次数