glfw 相关问题

GLFW是一个免费的开源多平台库,用于打开窗口,创建OpenGL上下文和管理输入。它很容易集成到现有的应用程序中,并没有声称主循环。 GLFW是用C语言编写的,并且对Windows,Mac OS X以及使用X Window系统的许多类Unix系统(例如Linux和FreeBSD)提供原生支持。 GLFW根据zlib / libpng许可证授权。

定义类构造函数的数组默认参数 C++

我正在尝试创建一个类来在Mac上使用OpenGL创建正常形状(等边形状)。 给定的参数是中心坐标(double center[2]),从中心到顶点的半径(double

回答 1 投票 0

Visual Studio 调试器对于调试我的 OpenGL 代码有用吗?

是否可以使用 Visual Studio 调试器来调试我的 GLFW/OpenGL 代码?我在 glDrawElements() 调用上遇到异常,它提供了无用的信息。显然我没有正确设置...

回答 1 投票 0

在 CMake/MSBuild 中与 OpenGL 和 GLFW 链接时出现链接器错误

我正在基于 CMake 的设置中使用 GLFW 和 Glad 开发 OpenGL 项目,并且遇到与 Glad 相关的链接器错误。我已经将项目配置为使用 happy 和 OpenGL,并且我能够

回答 1 投票 0

ModernGL:如何将三角形渲染到各个glfw窗口?

我正在熟悉 ModernGL,特别是渲染到各个 glfw 窗口。我计划在一个应用程序中拥有多个 glfw 窗口,每个窗口都包含在自己的 QtWidg 中......

回答 1 投票 0

OpenGL程序无法绘制三角形?

我将 OpenGL 与 GLEW 和 GLFW 一起使用。我创建了两个着色器,它们编译得很好: #包括 #包括 #包括 #包括 我将 OpenGL 与 GLEW 和 GLFW 一起使用。我创建了两个着色器,它们编译得很好: #include <iostream> #include <GL/glew.h> #include <OpenGL/OpenGL.h> #include <GLFW/glfw3.h> static unsigned int CompileShader( unsigned int type, const std::string source){ unsigned int id = glCreateShader(type); const char* src = source.c_str(); glShaderSource(id, 1, &src, nullptr); glCompileShader(id); int result; glGetShaderiv(id, GL_COMPILE_STATUS, &result); if (result == GL_FALSE){ int length; glGetShaderiv(id, GL_INFO_LOG_LENGTH, &length); char* message = (char*)alloca(length * sizeof(char)); glGetShaderInfoLog(id, length, &length, message); std::cout <<"failed to compile " << (type == GL_VERTEX_SHADER ? "vertex" : "fragment") << " shader" <<"\n"; std::cout << message << "\n"; glDeleteShader(id); return 0; } return id; } static int CreateShader(const std::string& VertexShader, const std::string& FragmentShader){ unsigned int program = glCreateProgram(); unsigned int vs = CompileShader(GL_VERTEX_SHADER, VertexShader); unsigned int fs = CompileShader(GL_FRAGMENT_SHADER, FragmentShader); glAttachShader(program, vs); glAttachShader(program, fs); glLinkProgram(program); glValidateProgram(program); glDeleteShader(vs); glDeleteShader(fs); return program; } int main(void){ /* Initialize the library */ GLFWwindow* window; if (!glfwInit()){return -1;} glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); #ifdef __APPLE__ glfwWindowHint(GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE); #endif /* Create a windowed mode window and its OpenGL context */ window = glfwCreateWindow(640, 480, "Gaston", NULL, NULL); if (!window){ glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent(window); if (glewInit() != GLEW_OK){ std::cout <<"glewunit(); failed\n"; } float positions[6] = { -0.5f, -0.5f, -.9f, .5f, 0.5f, 0.5f }; unsigned int buffer; glGenBuffers(1, &buffer); glBindBuffer(GL_ARRAY_BUFFER, buffer); glBufferData(GL_ARRAY_BUFFER, sizeof(positions) * sizeof(float), positions, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(float)*2, 0); glBindBuffer(GL_ARRAY_BUFFER, 0); std::string vertexshader = "#version 330 core\n" "\n" "layout(location = 0) in vec4 position;\n" "\n" "void main()\n" "{\n" " gl_Position = position;\n" "}\n"; std::string fragmentshader = "#version 330 core\n" "\n" "layout(location = 0) out vec4 colour;\n" "\n" "void main()\n" "{\n" " colour = vec4(1.0, 0.0, 0.0, 1.0);\n" "}\n"; unsigned int shader = CreateShader(vertexshader, fragmentshader); glUseProgram(shader); /* Loop until the user closes the window */ while (!glfwWindowShouldClose(window)){ /* Render here */ glClear(GL_COLOR_BUFFER_BIT); glDrawArrays(GL_TRIANGLES, 0, 3); /* Swap front and back buffers */ glfwSwapBuffers(window); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; } ...但是三角形没有出现。我得到的只是一个空白屏幕。 理想的结果是红色三角形。 一些事情: 作为@G.M.指出您需要绑定和填充顶点数组对象(VAO)(使用 VBO 绑定和顶点属性启用)才能在 Core 上下文中渲染事物。 例如: GLuint vao = 0; glCreateVertexArrays(1, &vao); glBindVertexArray(vao); 着色器链接也可能失败,请务必通过 glGetProgramiv() & co. 检查这一点 调试上下文和调试消息回调将显示 glDrawArrays() 调用抛出 GL_INVALID_OPERATION: if( glewIsSupported( "GL_ARB_debug_output" ) ) { glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB ); glDebugMessageControlARB( GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE ); glDebugMessageCallbackARB( []( GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar* message, const void* ) { std::cerr << "GL: " << message << std::endl; }, 0 ); } 输出: GL: GL_INVALID_OPERATION in glDrawArrays 大家一起: // g++ main.cpp $(pkg-config --cflags --libs glew glfw3) #include <GL/glew.h> #include <GLFW/glfw3.h> #include <iostream> void CheckStatus( GLuint obj, bool isShader ) { GLint status = GL_FALSE, log[ 1 << 11 ] = { 0 }; ( isShader ? glGetShaderiv : glGetProgramiv )( obj, isShader ? GL_COMPILE_STATUS : GL_LINK_STATUS, &status ); if( status == GL_TRUE ) return; ( isShader ? glGetShaderInfoLog : glGetProgramInfoLog )( obj, sizeof( log ), NULL, (GLchar*)log ); std::cerr << (GLchar*)log << "\n"; std::exit( EXIT_FAILURE ); } void AttachShader( GLuint program, GLenum type, const char* src ) { GLuint shader = glCreateShader( type ); glShaderSource( shader, 1, &src, NULL ); glCompileShader( shader ); CheckStatus( shader, true ); glAttachShader( program, shader ); glDeleteShader( shader ); } const char* const vert = R"GLSL( #version 330 core layout( location = 0 ) in vec4 position; void main() { gl_Position = position; }; )GLSL"; const char* const frag = R"GLSL( #version 330 core layout(location = 0) out vec4 colour; void main() { colour = vec4( 1.0, 0.0, 0.0, 1.0 ); }; )GLSL"; int main( void ) { /* Initialize the library */ glfwSetErrorCallback( []( int, const char* desc ) { std::cerr << desc << "\n"; std::exit( EXIT_FAILURE ); } ); if( !glfwInit() ) { return -1; } glfwWindowHint( GLFW_CONTEXT_VERSION_MAJOR, 3 ); glfwWindowHint( GLFW_CONTEXT_VERSION_MINOR, 3 ); glfwWindowHint( GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE ); #ifdef __APPLE__ glfwWindowHint( GLFW_OPENGL_FORWARD_COMPAT, GL_TRUE ); #endif glfwWindowHint( GLFW_OPENGL_DEBUG_CONTEXT, GL_TRUE ); /* Create a windowed mode window and its OpenGL context */ GLFWwindow* window = glfwCreateWindow( 640, 480, "Gaston", NULL, NULL ); if( !window ) { glfwTerminate(); return -1; } /* Make the window's context current */ glfwMakeContextCurrent( window ); if( glewInit() != GLEW_OK ) { std::cout << "glewunit(); failed\n"; } if( glewIsSupported( "GL_ARB_debug_output" ) ) { glEnable( GL_DEBUG_OUTPUT_SYNCHRONOUS_ARB ); glDebugMessageControlARB( GL_DONT_CARE, GL_DONT_CARE, GL_DONT_CARE, 0, NULL, GL_TRUE ); glDebugMessageCallbackARB( []( GLenum, GLenum, GLuint, GLenum, GLsizei, const GLchar* message, const void* ) { std::cerr << "GL: " << message << std::endl; }, 0 ); } float positions[ 6 ] = { -0.5f, -0.5f, -.9f, .5f, 0.5f, 0.5f }; GLuint vao = 0; glCreateVertexArrays(1, &vao); glBindVertexArray(vao); unsigned int buffer; glGenBuffers( 1, &buffer ); glBindBuffer( GL_ARRAY_BUFFER, buffer ); glBufferData( GL_ARRAY_BUFFER, sizeof( positions ) * sizeof( float ), positions, GL_STATIC_DRAW ); glEnableVertexAttribArray( 0 ); glVertexAttribPointer( 0, 2, GL_FLOAT, GL_FALSE, sizeof( float ) * 2, 0 ); glBindBuffer( GL_ARRAY_BUFFER, 0 ); GLuint prog = glCreateProgram(); AttachShader( prog, GL_VERTEX_SHADER, vert ); AttachShader( prog, GL_FRAGMENT_SHADER, frag ); glLinkProgram( prog ); CheckStatus( prog, false ); glUseProgram( prog ); /* Loop until the user closes the window */ while( !glfwWindowShouldClose( window ) ) { /* Render here */ glClear( GL_COLOR_BUFFER_BIT ); glDrawArrays( GL_TRIANGLES, 0, 3 ); /* Swap front and back buffers */ glfwSwapBuffers( window ); /* Poll for and process events */ glfwPollEvents(); } glfwTerminate(); return 0; }

回答 1 投票 0

按任意键时 GLFW 崩溃(分段错误(核心转储))

使用glfw与glad和stb_image来渲染带有纹理的矩形(遵循learnopengl.com),但是在我获得矩形渲染后,当glfwPollEvents为

回答 1 投票 0

无法使用 C++ 和 VS Code 正确设置 GLFW

我在 Windows 上,使用 c++17 并尝试在我的一个项目中使用 GLFW。这是我尝试过的,但它不起作用: 我在 VS Code 中打开了一个空文件夹,并添加了 src 和 Dependencies 文件夹...

回答 2 投票 0

如何在C#中使用GLFW正确调用glTexImage2D

我试图为我正在开发的一个OpenGL项目设置纹理渲染,但我无法让它工作,因为显然glTexImage2D函数的最后一个参数是nint。我在网上查了一下...

回答 1 投票 0

为什么要使用外部 OpenGL 加载器函数而不是 GLAD 的内置加载器?

我已经使用 GLAD 和 SFML 一段时间了,并且我一直在使用 GLAD 的内置函数加载器,gladLoadGL,它对我来说工作得很好。现在我正在查看 GLFW,它的 gui 中都写着...

回答 1 投票 0

如何使用 C++ 在 Vulkan 中正确实现深度缓冲?

在Vulkan中实现分层纹理深度缓冲的问题 我正在学习 Vulkan 教程,并已经实现了包括纹理在内的所有内容。 然而,相反...

回答 1 投票 0

GLFW:对“glfwInit”的未定义引用

我只是想通过 GLFW 让 OpenGL 在我的机器(Windows 7 64 位)上工作。 我收到单一链接器错误: 对“glfwInit”的未定义引用。 我试图编译的代码是

回答 5 投票 0

如何在窗口构造函数中正确管理渲染器初始化?

作为练习,我正在用 C++ 围绕 GLFW 和 OpenGL 编写一个简单的包装器。我有两个类:Window 和 Renderer,其中 Window 拥有 Renderer 的一个实例。 Window 类设置 GLFW con...

回答 1 投票 0

如何在 makefile 中链接 Windows 上 C 程序中的 GLFW

我的项目结构如下所示。 lib/GLFW/glfw3.h lib/GLFW/glfw3.dll lib/GLFW/libglfw3dll.a 主程序 主程序 生成文件 在我的 makefile 中我有这个。 gcc main.o -o main -D GLFW_DLL -I lib/GLFW...

回答 1 投票 0

OpenGL Shader 在 AMD 机器上无法正常工作

问题: 我有相同的 OpenGL 代码,在一台机器上运行良好,但在另一台机器上只能部分运行。 很难调试,因为问题只发生在我需要部署的机器上。在那

回答 1 投票 0

无法格式化参数。要使类型 T 格式化,请提供格式器 <T>

所以我根据 thecherno 的教程创建一个游戏引擎,并添加 GLFW 错误处理(这是 C++),但我不知道在哪里以及如何为 SPDLOG 添加格式化程序 这是我的 L...

回答 2 投票 0

无法将基础坐标从左下角更改为左上角

我正在使用 OpenGL 和 GLFW 编写一个文本编辑器,传统上 GUI 应用程序从左上角(而不是从左下角)开始缩放,所以这对我来说很重要。 我想要...

回答 1 投票 0

在 macOS 上使用 GLFW 和 Metal 创建窗口会创建两个窗口吗?

每当我尝试创建一个窗口时,它都会直接在彼此之上创建两个窗口,并在我移动它们时出现此错误: 客户端错误:TUINSRemoteViewController 未覆盖 -

回答 1 投票 0

渲染三角形时出现段错误?

我编译得很好,但出现了段错误。与 GLchar *fragmentShaderSource 和 GLchar*vertexShaderSource 有关吗?我注意到它们是从 coloredtriangle.cpp 和 #version 330 c 中取出的...

回答 1 投票 0

Packt 学习OpenGL教程,渲染三角形时出现段错误。与GLchar * vertexShaderSource和GLchar *fragmentShaderSource相关?

我在《Learn OpenGL by packt》的前面示例中制作了一个橙色三角形。当我使用shader.h、core.vs和core.frag将代码更新到下一个示例时,我编译得很好,但出现了段错误。是吗

回答 1 投票 0

是什么导致了这个段错误?是Glchar * vertexShaderSource 和GLchar *fragmentShaderSource 吗?

我在《Learn OpenGL by packt》中的前面示例中制作了一个橙色三角形。当我使用shader.h、core.vs和core.frag将代码更新到下一个示例时,我编译得很好,但出现了段错误。是吗

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.