Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL中没有显示任何内容 我已经在java和C++中工作了一段时间,但是我对OpenGL是新的,所以我开始使用一个名为GLFW的库,我正在遵循一本书,叫做“OpenGL超级圣经第六版”,但是在GLFW模式中。这里的问题是,我已经重新检查了所有内容,并观看了其他教程,我的代码接缝正常,但着色器渲染中没有任何内容。我不知道我声明着色器src的部分是正确的还是有效的形式_C++_Opengl_Glfw - Fatal编程技术网

OpenGL中没有显示任何内容 我已经在java和C++中工作了一段时间,但是我对OpenGL是新的,所以我开始使用一个名为GLFW的库,我正在遵循一本书,叫做“OpenGL超级圣经第六版”,但是在GLFW模式中。这里的问题是,我已经重新检查了所有内容,并观看了其他教程,我的代码接缝正常,但着色器渲染中没有任何内容。我不知道我声明着色器src的部分是正确的还是有效的形式

OpenGL中没有显示任何内容 我已经在java和C++中工作了一段时间,但是我对OpenGL是新的,所以我开始使用一个名为GLFW的库,我正在遵循一本书,叫做“OpenGL超级圣经第六版”,但是在GLFW模式中。这里的问题是,我已经重新检查了所有内容,并观看了其他教程,我的代码接缝正常,但着色器渲染中没有任何内容。我不知道我声明着色器src的部分是正确的还是有效的形式,c++,opengl,glfw,C++,Opengl,Glfw,感谢您阅读本文:) 注: 我知道它只会渲染一个点,但我用“glPointSize(40.0f);”调整了它的大小 #包括 #定义GLFW_DLL #包括 #包括 #包括 #包括“jelly/lua_manager.h” #包括“jelly/keysManager.h” jelly::keys_buttons::KeysManager km; 胶合顶点数组; GLuint程序; GLuint startRender(GLFWwindow*窗口) { GLuint vertexShader=glCr

感谢您阅读本文:)

注: 我知道它只会渲染一个点,但我用“glPointSize(40.0f);”调整了它的大小

#包括
#定义GLFW_DLL
#包括
#包括
#包括
#包括“jelly/lua_manager.h”
#包括“jelly/keysManager.h”
jelly::keys_buttons::KeysManager km;
胶合顶点数组;
GLuint程序;
GLuint startRender(GLFWwindow*窗口)
{
GLuint vertexShader=glCreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader=glCreateShader(GL\u fragmentShader);

std::cout包含着色器源的两个变量命名不正确。您已将顶点源错误地放置到
fragmentShader\u src
中,并将源片段错误地放置到
vertexShader\u src

如果检查着色器编译和链接状态,则很容易发现错误。如果着色器编译或链接失败,则应添加相应的
if
s并打印日志


此外,您还缺少一个明确的OpenGL版本选择。您应该要求GLFW为您提供“OpenGL 4.3兼容性配置文件”上下文。(“核心配置文件”也适用于您不需要任何不推荐的功能。)查看GLFW文档以了解如何操作。

您应该检查着色器是否实际编译和链接。您还应该检查您获得的OpenGL版本。明确请求核心配置文件在某些平台上可能也会有所帮助。是的,在我的Makefile中有很多奇特的东西,我已经切换了它们,但仍然不起作用。等等,但是我不知道如何检查GLSL文件中的错误编译,甚至不知道如何检查编译是否正常。@CavariuX使用任何好的OpenGL教程。或者检查
glewInit()的返回状态
。此外,您缺少OpenGL版本选择。您应该要求GLFW为您提供“OpenGL 4.3兼容性配置文件”上下文。有关如何操作的信息,请查看GLFW文档。
#include <GL/glew.h>
#define GLFW_DLL
#include <GLFW/glfw3.h> 
#include <stdio.h>
#include <iostream> 
#include "jelly/lua_manager.h"
#include "jelly/keysManager.h"

jelly::keys_buttons::KeysManager km; 

GLuint vertex_array_obj;
GLuint program;

GLuint startRender(GLFWwindow* window)
{
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);

    std::cout << "ASD" << std::endl;

    static const GLchar * fragmentShader_src[] =
    {
        "#version 430 core                                                      \n"
        "                                                                       \n"
        "void main(void)                                                        \n"
        "{                                                                      \n"
        "   gl_Position = vec4(0, 0.5, 0.0, 1);                                 \n"
        "}                                                                      \n"
    };

    static const GLchar * vertexShader_src[] =
    {
        "#version 430 core                          \n"
        "                                           \n"
        "out vec4 color;                            \n"
        "                                           \n"
        "void main(void)                            \n"
        "{                                          \n"
        "   color = vec4(0.0, 0.8, 1.0, 1.0);       \n"
        "}                                          \n"
    };

    glShaderSource(vertexShader, 1, vertexShader_src, NULL);
    glCompileShader(vertexShader);

    glShaderSource(fragmentShader, 1, fragmentShader_src, NULL);
    glCompileShader(fragmentShader);

    GLuint tprogram = glCreateProgram();
    glAttachShader(tprogram, vertexShader);
    glAttachShader(tprogram, fragmentShader);
    glLinkProgram(tprogram);
    glValidateProgram(tprogram);

    glDeleteShader(vertexShader);
    glDeleteShader(fragmentShader);

    glGenVertexArrays(1, &vertex_array_obj);
    glBindVertexArray(vertex_array_obj);

    return tprogram;
}

void render(GLFWwindow* window)
{
    glClearColor(1.0f, 0.0f, 0.0f, 0.0f);
    glClear(GL_COLOR_BUFFER_BIT);
    glDrawArrays(GL_POINTS, 0, 1);
    glPointSize(40.0f);
}

void mouseCallback(GLFWwindow* window, int button, int action, int mods)
{
    km.mouseClick(button, action, mods);
}

void keyCallback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    km.keyPressed(key, action, mods);
}

int main()
{
    jelly::lua::LuaManager lm;

    // 0 = Build | 1 = Release | 2 = Alpha | 3 = Beta
    int buildType = 0;

    std::string title = "Relieved";

    if (buildType != 1)
    {
        switch (buildType) {
            case 0 :
                title += " | Build Version";
            break;
            case 2 :
                title += " | Alpha Version";
            break;
            case 3 :
                title += " | Beta Version";
            break;
            default :
            break;
        }
    }

    GLFWwindow* window;

    if (!glfwInit()) {
        glfwTerminate();
        return -1;
    }

    window = glfwCreateWindow(640, 400, title.c_str(), NULL, NULL);

    if (!window) {
        glfwTerminate();  
        return -1;
    }

    glfwMakeContextCurrent(window);

    glewExperimental = GL_TRUE;
    glewInit ();

    program = startRender(window);
    glUseProgram(program);

    glfwSetKeyCallback(window, keyCallback);
    glfwSetMouseButtonCallback(window, mouseCallback);

    while(!glfwWindowShouldClose(window))
    {
        render(window);
        glfwSwapBuffers(window);
        glfwPollEvents();
    }

    glDeleteVertexArrays(1, &vertex_array_obj);
    glDeleteProgram(program);
    glDeleteVertexArrays(1, &vertex_array_obj);

    glfwTerminate();    

    return 0;
}