标签: glfw

即使手动设置显示环境变量后,WSL Ubuntu 也会显示“错误:无法打开显示”

我在 WSL Ubuntu 上使用 g++。我使用 git 克隆了 GLFW 存储库,使用ccmake命令来配置和生成二进制文件,然后make在“build”目录中使用以最终创建文件.a。我安装了所有与 OpenGL 相关的库/usr/ld(我不记得到底安装了哪些库,因为我必须安装这么多。无论如何,g++ 命令有效,所以我认为它是成功的)。后来我在VS Code上做了一个项目,如下所示:

在此输入图像描述

GLFW 包含文件夹来自上述克隆的存储库,GLAD 和 KHR 包含文件夹来自glad.dav1d.de,我将 GL 版本(在 API 下)设置为3.3,将 Profile 设置为Core

在 中main.cpp,我放置了一段用于初始化 GLFW 的简单代码片段:

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

int main()
{
    // Initialize GLFW
    if (!glfwInit()) {
        std::cerr << "Failed to initialize GLFW" << std::endl;
        return 1;
    }
    glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 3);
    glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 3);
    glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE);

    std::cout << "Success" << …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glfw windows-subsystem-for-linux ubuntu-18.04

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

寻找一个好的实践:全局变量还是其他什么?

我正在使用 GLFW 制作图形应用程序。而且......我需要以某种特定的方式处理 GLFW 回调。例如,处理帧缓冲区大小回调。我需要将此事件路由到我的应用程序类:

class OglApplication
{
/* Rest is ommited. */

public:
    void Init();

    void Render();
    void OnResize(int width, int height);
    void OnDestroy();
};
Run Code Online (Sandbox Code Playgroud)
OglApplication app;

Run Code Online (Sandbox Code Playgroud)

glfwSetFramebufferSizeCallback函数接受具有以下签名的函数 ptr:

void framebuffer_onSizeChanged(GLFWwindow* window, int width, int height);
Run Code Online (Sandbox Code Playgroud)

所以我需要创建一个中间函数来适应它void OnResize(int width, int height);。无论如何,我不能直接传递它,因为glfwSetFramebufferSizeCallback只接受静态函数(错过 C# delegates )。

那么...我尝试了什么?我尝试使用全局变量,但我知道这被认为是不好的做法。

我可以使用全局映射(键 = GLFWwindow,值 = OglApplication)并通过其关联的 GLFWwindow 获取 OglApplication。但实际上在我的应用程序中我只有一个窗口和一个 OglApplication 实例。所以我可以写一个全局指针:

static OglApplication* app;
Run Code Online (Sandbox Code Playgroud)

并在回调中使用它。我什至将其声明为静态,因此只能在当前翻译单元中访问它,因此其他代码不会违反状态(反对全局变量的参数之一)。还很糟糕吗?

我也尝试过编写 lambda 表达式。这有效:

glfwSetFramebufferSizeCallback(mainWindow, [](GLFWwindow* window, int width, int height)
        {

        });
Run Code Online (Sandbox Code Playgroud)

但是我需要在那里使用 OglApplication (这是局部变量)。和这个: …

c++ glfw

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

使用OpenGL和GLFW操作C数组

我正在尝试构建一个应用程序来模拟一些基本的球体移动.

我面临的问题是,当我真正需要时,它看起来不像是在init语句之外的数组中分配数据.这与我声明包含粒子的数组的方式有关.

我想创建一个结构数组,可以从各种方法访问,所以在我的文件顶部下面我使用的include语句:

struct particle particles[];


// Particle types
enum TYPES { PHOTON, NEUTRINO };

// Represents a 3D point
struct vertex3f
{
    float x;
    float y;
    float z;
};

// Represents a particle
struct particle
{
    enum TYPES type;
    float radius;
    struct vertex3f location;
};
Run Code Online (Sandbox Code Playgroud)

我有一个初始化方法,它创建数组并为其分配粒子

void init(void)
{
    // Create a GLU quadrics object
    quadric = gluNewQuadric();
    struct particle particles[max_particles];

    float xm = (width / 2) * -1;
    float xp = width / 2;
    float ym = (height …
Run Code Online (Sandbox Code Playgroud)

c opengl glfw

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

使用GLFW渲染和WinAPI来处理消息

我想使用OpenGL库GLFW来渲染窗口,但也希望使用WinAPi来创建控件和处理事件.有没有办法做到这一点?我尝试搜索(谷歌搜索)"使用glfw和winapi",但没有产生任何结果.我找到的唯一一个我想做的就是这个,但由于GLFW_WINPAR不存在,页面似乎已经过时了.有什么方法可以做我想要的,或者我必须使用"Vanilla"OpenGL.

c++ opengl winapi glfw

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

读取文件,损坏的数据

好像我不能编译我的GLSL着色器.偶尔(主要是在编辑文件之后),编译时出现以下错误:

----- SRC ----- (150 B)
#version 330 core

uniform mat4 mvpMatrix;

in vec4 vertexPosition_modelspace;

void main() {
    gl_Position = mvpMatrix * vertexPosition_modelspace;
}
gp!
----- END -----
SimpleTransform.vertexshader:Vertex shader failed to compile with the following errors:
ERROR: 0:10: error(#132) Syntax error: 'gp' parse error
ERROR: error(#273) 1 compilation errors.  No code generated
Run Code Online (Sandbox Code Playgroud)

这很奇怪,因为我发誓该文件不包含那个尴尬的gp!部分.不过我用调查过它

#version 330 core

uniform mat4 mvpMatrix;

in vec4 vertexPosition_modelspace;

void main() {
    gl_Position = mvpMatrix * vertexPosition_modelspace;
}
Run Code Online (Sandbox Code Playgroud)

而且更少 …

c++ linux opengl glsl glfw

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

在OS/X上使用glDrawElements(OpenGL 3.2核心配置文件)

我正在尝试将一些OpenGL 3.2代码从Windows移植到OS/X 10.8(使用GLFW核心配置文件),但在调用glDrawElements时获取INVALID_OPERATION(glError()).glDrawArrays函数工作正常,因此我的着色器初始化正常.

以下片段很好地解释了我在做什么.我知道自己做错了什么?

struct Vertex {
 vec2 position;
 vec3 color;
};

void display() {
    glClearColor(0.0, 0.0, 0.0, 1.0);
    glClear(GL_COLOR_BUFFER_BIT);

    glUseProgram(shaderProgram);

    mat4 projection = Ortho2D(-15.0f, 15.0f, -15.0f, 15.0f);
    glUniformMatrix4fv(projectionUniform, 1, GL_TRUE, projection);

    glBindVertexArray(shapeVertexArrayBuffer);

    mat4 modelView;

    // upper left
    modelView = Translate(-7,+7,0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    glDrawArrays(GL_TRIANGLE_FAN, 0, rectangleSize); // renders correctly

    // upper right
    modelView = Translate(+7,+7,0);
    glUniformMatrix4fv(modelViewUniform, 1, GL_TRUE, modelView);
    GLuint indices[6] = {0,1,2,3,4,0};
    glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, indices); //INVALID_OPERATION

    glfwSwapBuffers();
}

void loadGeometry() {
    vec3 color(1.0f, 1.0f, 0.0f);
    Vertex …
Run Code Online (Sandbox Code Playgroud)

opengl macos glfw

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

选择从Windows将文件拖放到GLFW应用程序中

所以基本上我有兴趣知道我需要知道哪个Windows api才能在Windows中用鼠标选择文件并将其拖放到我的应用程序窗口中

我的应用程序窗口将由GLFW处理,它基本上处理图像格式,但这并不重要

我有兴趣了解的是如何在Windows中执行此操作

基本上我有一个想法,我必须引用Windows API,并利用他们的一些功能/方法,并通过一些管道将文件从Windows应用程序移植到我的应用程序

因此,如果您可以指导我使用正确的API和简要的方法/想法如何做到这一点以及如何工作

谢谢

c c++ windows glfw

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

LWJGL 3 GLFW键盘和鼠标输入很慢,并且在GLFW_PRESS和GLFW_REPEAT之间有一个延迟

因此,我最近刚从LWJGL 2升级到3,并且在获取键盘和鼠标输入时遇到了一些困难。顺便说一下,我正在使用它进行相机的移动和旋转。

我的问题是,如果我使用GLFW回调,则移动似乎非常不稳定且缓慢。这不是一个稳定的速度,只是感觉不对。此外,当我按下一个键(例如w)向前移动时,从GLFW_PRESS到的转换之间大约有半秒的延迟。GLFW_REPEAT这会导致在按下键时相机在前半秒内不会移动。

顺便说一下,我有一个InputHandler类,该类具有用于keyDown,keyPressed,keyReleased等的方法。在一个invoke方法中,我没有所有的键检查。invoke方法将键事件添加到存储键的列表中,以及事件状态枚举,该枚举可以是DOWN,TAPPED,RELEASED,NONE之一。上课很大程度上是基于对这个问题的回答

我花了过去2个小时的时间来寻找解决方案,但没有发现太多。我确实找到了一些使用回调方法的替代方法,例如:

if (glfwGetKey(window, key) == GLFW_PRESS)
Run Code Online (Sandbox Code Playgroud)

if (glfwGetKey(windowm key) == GLFW_RELEASE)
Run Code Online (Sandbox Code Playgroud)

但是我找不到一种方法来检测单个按键,即GLFW_REPEAT状态,因为该glfwGetKey方法只能检测GLFW_PRESSGLFW_RELEASE

如果有人可以告诉我一种方法来检测单个按键敲击glfwGetKey,或者使GLFW回调更轻松,更流畅,我将不胜感激。

谢谢 :)

java opengl user-input lwjgl glfw

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

OpenGL着色器链接错误,没有错误消息

我一直试图将这个问题弄清楚很长时间,但无法让事情发挥作用.我只想编译/运行我的OpenGL程序,但我的着色器没有正确链接,我没有得到任何有用的错误消息.在一种情况下,错误纯粹是空的,而在另一种情况下,它是??y?出于某种原因.

要创建我的程序并编译我的着色器,我有以下代码:

GLuint buildProgram(const char* vertexShaderFile, const char* fragmentShaderFile)
{
    std::string vs = fileContents(vertexShaderFile);
    std::string fs = fileContents(fragmentShaderFile);
    return createProgram(vs.c_str(), fs.c_str());
}
Run Code Online (Sandbox Code Playgroud)

着色器看起来像

#version 330
out vec4 out_color; 
void main()
{
    out_color = vec4(0.5, 0.5, 0.5, 0.5);
}

#version 330
in vec4 in_Position;
void main()
{
    gl_Position = in_Position;
}
Run Code Online (Sandbox Code Playgroud)

GLuint createProgram(const char* vertexSource, const char* fragmentSource)
{
    GLuint vertexshader = createShader(vertexSource, GL_VERTEX_SHADER);
    GLuint fragmentshader = createShader(fragmentSource, GL_FRAGMENT_SHADER);
    GLuint program = glCreateProgram();

    glAttachShader(program, vertexshader);
    glAttachShader(program, fragmentshader);

    glLinkProgram(program); …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glew glfw

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

0:1(10):错误:不支持GLSL 3.30.ubuntu 18.04 c ++

我试图用openGL GLFW库在窗口上绘制一个三角形.这是我的完整代码

#include <GL/glew.h>
#include <GLFW/glfw3.h>
#include <iostream>
using namespace std;

static unsigned int compileShader ( unsigned int type, const string& source ){
    unsigned int id = glCreateShader ( type );
    const char* src = source.c_str();
    glShaderSource ( id, 1, &src, nullptr );
    glCompileShader ( id );

    int result = 0;
    glGetShaderiv ( id, GL_COMPILE_STATUS, &result );
    if ( result == GL_FALSE ){
        int length = 0;
        glGetShaderiv ( id, GL_INFO_LOG_LENGTH, &length );
        char* message = ( char* ) alloca …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glfw ubuntu-18.04

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